You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo-av 后台音频中断问题求助:无法打断第三方音频播放

解决方案:后台触发提示音打断第三方音频

1. 配置iOS后台音频权限

Expo项目需在app.json中添加后台音频权限,让系统允许应用在后台操作音频:

{
  "expo": {
    "ios": {
      "infoPlist": {
        "UIBackgroundModes": ["audio"]
      }
    }
  }
}

2. 调整音频会话与代码逻辑

当前配置无法主动抢占后台音频焦点,需修改音频模式参数并优化执行顺序:

useEffect(() => {
  if(props.audio){
    (async () =>{
      // 先配置音频模式,再创建音频实例
      await Audio.setAudioModeAsync({
        allowsRecordingIOS: false,
        staysActiveInBackground: true,
        // iOS下强制打断其他音频并占据焦点
        interruptionModeIOS: InterruptionModeIOS.InterruptOthers,
        // 设置最高播放优先级,确保系统优先处理提示音
        playbackPriorityIOS: 1.0,
        playsInSilentModeIOS: true,
        shouldDuckAndroid: true,
        interruptionModeAndroid: InterruptionModeAndroid.InterruptOthers,
        playThroughEarpieceAndroid: false
      });

      // 主动向系统申请音频焦点
      const focusResult = await Audio.requestAudioFocusAsync({
        shouldDuck: false,
        priority: Audio.Priority.HIGH
      });

      if (focusResult.status === 'granted') {
        const { sound } = await Audio.Sound.createAsync(
          {uri: props.audio}
        );
        setSound(sound as any);
        if(props.autoPlay){
          await sound.playAsync();
          setPlaying(true);
          await sound.setOnPlaybackStatusUpdate(onPlaybackStatusUpdate);
        }
      }
    })();
  }

  // 组件卸载时释放音频资源与焦点,避免后台残留问题
  return async () => {
    if (sound) {
      await sound.unloadAsync();
    }
    await Audio.abandonAudioFocusAsync();
  };
}, [props.audio, props.autoPlay]);

3. 关键配置说明

  • interruptionModeIOS: InterruptionModeIOS.InterruptOthers:明确告知iOS系统,当前音频需要打断第三方播放,而非混合
  • playbackPriorityIOS: 1.0:设置最高优先级,确保提示音在后台能被系统优先处理
  • requestAudioFocusAsync:后台环境下必须主动申请焦点,这是抢占第三方音频的核心步骤

4. Android补充配置

若Android端也存在类似问题,需在app.json添加前台音频服务权限:

{
  "expo": {
    "android": {
      "permissions": ["FOREGROUND_SERVICE_AUDIO"]
    }
  }
}

内容的提问来源于stack exchange,提问作者Falzao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:38:31