Экспо-Аудио не работает на iOS. Его застрял на самой записи кнопки - PullRequest
0 голосов
/ 09 октября 2019

github.com / expo / аудиозапись-пример

Вы можете проверить его на предмет кода.

Я использую аудио с expo-av.

Этоотлично работает с устройствами Android даже на эмуляторе. На Android-устройстве сначала запрашивается разрешение на воспроизведение звука, затем начинается запись звука при нажатии кнопки «Остановить», оно обеспечивает воспроизведение звука.

Но при тестировании на iOS разрешение также не запрашивается, напрямую отображается запись звукаи нажав на кнопку записи, запись не началась.

Я не могу понять, связана ли она с разрешением аудио iOS или с синтаксисом audio.recording.

Я пыталсяустановить разрешение вручную true

    this.recordingSettings = JSON.parse(JSON.stringify(Audio.RECORDING_OPTIONS_PRESET_LOW_QUALITY));
    // // UNCOMMENT THIS TO TEST maxFileSize:
    // this.recordingSettings.android['maxFileSize'] = 12000;
  }

  _askForPermissions = async () => {
    const response = await Permissions.askAsync(Permissions.AUDIO_RECORDING);
    this.setState({
      haveRecordingPermissions: response.status === 'granted',
    });
  };

  async _stopPlaybackAndBeginRecording() {
    this.setState({
      isLoading: true,
    });
    if (this.sound !== null) {
      await this.sound.unloadAsync();
      this.sound.setOnPlaybackStatusUpdate(null);
      this.sound = null;
    }
    await Audio.setAudioModeAsync({
      allowsRecordingIOS: true,
      interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX,
      playsInSilentModeIOS: true,
      shouldDuckAndroid: true,
      interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
      playThroughEarpieceAndroid: false,
      staysActiveInBackground: true,
    });
    if (this.recording !== null) {
      this.recording.setOnRecordingStatusUpdate(null);
      this.recording = null;
    }

    const recording = new Audio.Recording();
    await recording.prepareToRecordAsync(this.recordingSettings);
    recording.setOnRecordingStatusUpdate(this._updateScreenForRecordingStatus);

    this.recording = recording;
    await this.recording.startAsync(); // Will call this._updateScreenForRecordingStatus to update the screen.
    this.setState({
      isLoading: false,
    });
  }

  _onRecordPressed = () => {
    if (this.state.isRecording) {
      this._stopRecordingAndEnablePlayback();
    } else {
      this._stopPlaybackAndBeginRecording();
    }
  };

Я ожидаю записи звука на iOS, но застрял на isrecording.

...