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

使用react-native-sound播放提示音永久静音用户后台音乐如何解决

解决方案

问题根源

你当前使用的Playback音频类别默认会抢占系统音频焦点,且不会主动释放,导致其他后台音乐应用被永久静音。要实现ducking(其他音频压低音量)或者播放后恢复其他音频,需要调整音频会话配置+正确管理音频焦点。


1. iOS 端配置

修改Sound.setCategory的参数,开启混播和ducking选项即可实现你要的理想效果:

// 替换原来的 Sound.setCategory('Playback')
Sound.setCategory('Playback', {
  mixWithOthers: true, // 允许和其他音频混播
  duckOthers: true // 播放当前音频时自动压低其他应用的音量
})

如果不需要ducking仅要求播放后其他音频恢复,只保留mixWithOthers: true配置即可。


2. Android 端配置

Android需要额外处理音频焦点的请求和释放逻辑,调整你的播放代码如下:

const playBackgroundTimer = useCallback(
  (timeInSeconds) => {
    const timeoutId = BackgroundTimer.setTimeout(() => {
      // 播放前先请求音频焦点
      Sound.setActive(true, () => {
        soundEnd.play((success) => {
          // 播放完成后主动释放音频焦点,其他应用的音频会自动恢复
          Sound.setActive(false)
          if (!success) {
            console.log('提示音播放失败')
          }
        })
      })
    }, (1000 * timeInSeconds) - 5000)

    return timeoutId
  },
  []
)

如果要实现Android端的ducking效果,先在android/app/src/main/AndroidManifest.xml添加权限:

<uses-permission android:name="android.permission.AUDIO_FOCUS" />

再添加一行配置Sound.setMode(Sound.MODE_RINGTONE),系统会自动处理其他音频的音量压低逻辑。


注意事项

你使用的0.11.1版本react-native-sound存在部分Android机型音频焦点释放异常的已知bug,如果修改后还是出现其他音频无法恢复的问题,可以升级到0.11.2修复版本,该版本不破坏现有API兼容性。


内容的提问来源于stack exchange,提问作者Gaylord.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:15:03