Noticing different behavior when updating playback status on iOS and Android using Expo's Audio Module

Viewed 74

I'm currently attempting to implement an audio player in React Native using Expo's Audio module. Everything is working as expected in Android, but on iOS, the playbackStatusUpdate() callback does not appear to be working. I've pasted the relevant snippet below.

Audio.setAudioModeAsync({
    playsInSilentModeIOS: true,
    interruptionModeIOS: INTERRUPTION_MODE_IOS_DO_NOT_MIX,
    interruptionModeAndroid: INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,
});

const { sound } = await Audio.Sound.createAsync({ uri });
await sound.setProgressUpdateIntervalAsync(100);

sound.setOnPlaybackStatusUpdate((data) => {
    if (data.isLoaded) {
        setCurrentPosition(data.positionMillis);
        setIsPlaying(data.isPlaying);
        setClipDuration(data.durationMillis || 0);

        if (data.didJustFinish && !data.isLooping) {
            sound.setPositionAsync(0);
            options.onPlaybackComplete();
        }
    }
});

On iOS, the callback simply is not called at all, so no statuses, etc. are set.

I'm using the current position to update a slider at a higher level in my component tree. Again - this all works exactly as expected in Android. Any idea what could be happening here?

0 Answers
Related