Как воспроизвести фоновый звук в React Native с помощью expo-av? - PullRequest
0 голосов
/ 08 мая 2020

Я создаю собственное приложение для реагирования, используя expo. Я использую expo-av.

У меня проблемы с воспроизведением аудиофайла в фоновом режиме.

У меня есть следующее, но я все еще не могу заставить его работать когда я переключаю свое приложение на другое приложение. Я не получаю ошибок; музыка c просто останавливается в моем приложении. Любой совет о том, как заставить это работать? Или где-то еще мой код может быть отключен?

  async componentDidMount() {
    try {
      await Audio.setAudioModeAsync({
        allowsRecordingIOS: false,
        interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_MIX_WITH_OTHERS,
        // interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
        playsInSilentModeIOS: true,
        interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
        shouldDuckAndroid: true,
        staysActiveInBackground: true,
        playThroughEarpieceAndroid: true
      })
      this.loadAudio();
    //   this.interval = setInterval(() => this.getStatus(), 1000);
    } catch (e) {
      console.log(e)
    }
  }

1 Ответ

0 голосов
/ 04 июня 2020

Все работает с такими параметрами:

Audio.setAudioModeAsync({
   allowsRecordingIOS: false,
   staysActiveInBackground: true,
   interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
   playsInSilentModeIOS: true,
   shouldDuckAndroid: true,
   interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
   playThroughEarpieceAndroid: false
});

В пакете. json "expo-av": "^ 6.0.0",

В плеере:

componentDidMount() {
        Audio.setAudioModeAsync({
            allowsRecordingIOS: false,
            staysActiveInBackground: true,
            interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DUCK_OTHERS,
            playsInSilentModeIOS: true,
            shouldDuckAndroid: true,
            interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DUCK_OTHERS,
            playThroughEarpieceAndroid: false
        });
        this._loadNewPlaybackInstance(true);
    }

async _loadNewPlaybackInstance(playing) {
        if (this.playbackInstance != null) {
            await this.playbackInstance.unloadAsync();
            this.playbackInstance = null;
        }
const source = { uri: 'http://music.ru/music.mp3' };

    const initialStatus = {
        shouldPlay: playing,
        rate: this.state.rate,
        shouldCorrectPitch: this.state.shouldCorrectPitch,
        volume: this.state.volume,
        isMuted: this.state.muted,
        isLooping: this.state.loopingType === LOOPING_TYPE_ONE
        // // UNCOMMENT THIS TO TEST THE OLD androidImplementation:
        // androidImplementation: 'MediaPlayer',
    };
    const {sound, status} = await Audio.Sound.createAsync(
        source,
        initialStatus,
        this._onPlaybackStatusUpdate
    );
    this.playbackInstance = sound;
...