使用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
相关产品推荐
相关产品推荐

