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

Flutter Android:停止自身音频后无法恢复其他应用音频播放

问题原因及解决方案

问题根源

你遇到的问题核心在于:使用AndroidAudioFocusGainType.gainTransientMayDuck请求音频焦点后,调用stop()仅会终止自身音频播放,但并不会自动释放音频焦点。系统只有在检测到你的应用主动放弃焦点,或者应用进程被销毁时,才会恢复其他应用的音频音量。

解决步骤

要修复这个问题,只需在调用播放器的stop()方法后,手动调用AudioSession的setActive(false)来主动释放音频焦点,触发系统恢复其他应用的音频状态。

代码示例

  1. 初始化并配置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,
));
  1. 播放停止时手动释放焦点:
// 停止自身音频播放
await player.stop();
// 主动释放音频焦点,触发系统恢复其他应用音量
await audioSession.setActive(false);

额外注意事项

  • 若使用pause()暂停播放,无需释放焦点(因为只是临时暂停,还可能恢复播放);但stop()会重置播放器状态,必须主动释放焦点。
  • 确保释放焦点的代码没有被异常捕获逻辑拦截,比如如果stop()抛出异常,后续的setActive(false)可能不会执行。
  • 在应用退到后台或销毁前,也建议调用setActive(false)确保焦点被正确释放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:22:08