Flutter Android:停止自身音频后无法恢复其他应用音频播放
问题原因及解决方案
问题根源
你遇到的问题核心在于:使用AndroidAudioFocusGainType.gainTransientMayDuck请求音频焦点后,调用stop()仅会终止自身音频播放,但并不会自动释放音频焦点。系统只有在检测到你的应用主动放弃焦点,或者应用进程被销毁时,才会恢复其他应用的音频音量。
解决步骤
要修复这个问题,只需在调用播放器的stop()方法后,手动调用AudioSession的setActive(false)来主动释放音频焦点,触发系统恢复其他应用的音频状态。
代码示例
- 初始化并配置AudioSession(确保播放前已执行):
final audioSession = await AudioSession.instance; await audioSession.configure(AudioSessionConfiguration( avAudioSessionCategory: AVAudioSessionCategory.playback, androidAudioAttributes: const AndroidAudioAttributes( contentType: AndroidAudioContentType.music, usage: AndroidAudioUsage.media, ), androidAudioFocusGainType: AndroidAudioFocusGainType.gainTransientMayDuck, ));
- 播放停止时手动释放焦点:
// 停止自身音频播放 await player.stop(); // 主动释放音频焦点,触发系统恢复其他应用音量 await audioSession.setActive(false);
额外注意事项
- 若使用
pause()暂停播放,无需释放焦点(因为只是临时暂停,还可能恢复播放);但stop()会重置播放器状态,必须主动释放焦点。 - 确保释放焦点的代码没有被异常捕获逻辑拦截,比如如果
stop()抛出异常,后续的setActive(false)可能不会执行。 - 在应用退到后台或销毁前,也建议调用
setActive(false)确保焦点被正确释放。
内容的提问来源于stack exchange,提问作者Ahsan Sarwar
相关产品推荐
相关产品推荐

