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

Flutter iOS端后台音频仅能播放一次问题求助

问题排查方案

1. 修复iOS权限缺失问题

控制台报错[MRNowPlaying] Ignoring setPlaybackState because application does not contain entitlement com.apple.mediaremote.set-playback-state for platform是核心诱因,需完成以下配置:

  • 打开iOS项目Info.plist,确保UIBackgroundModes数组包含audio(对应后台音频模式)。
  • 在苹果开发者后台为App ID启用com.apple.mediaremote.set-playback-state权限,更新Provisioning Profile后导入Xcode;或在Xcode的Signing & Capabilities中,添加Background Modes并勾选Audio, AirPlay, and Picture in Picture,若自动配置未生成对应权限,手动添加到entitlements文件。

2. 排查FlutterVolumeController的干扰

该包可能与audio_service的音频会话管理冲突:

  • 临时注释所有FlutterVolumeController调用,测试恢复App后的播放状态。若问题消失,说明两者存在会话管理冲突。
  • 调整音频会话权限:让audio_service全权管理音频会话,在AudioHandler初始化时配置好会话参数,禁止FlutterVolumeController修改会话状态。

3. 定位依赖冲突

因示例App功能正常,需排查现有项目的依赖冲突:

  • 执行flutter pub deps导出所有依赖版本,与示例App的依赖版本对比,重点核对audio_service、just_audio、FlutterVolumeController的版本兼容性。
  • 逐步移除非核心依赖,每次移除后测试恢复App的情况,定位引发问题的包。
  • 检查是否有其他操作音频会话、通知栏或后台任务的包(如推送、其他媒体类包),这类包可能与audio_service的后台播放逻辑冲突。

4. 校验AudioHandler状态恢复逻辑

确保App从后台恢复时能正确重建播放状态与通知控件:

  • 确认AudioHandler实现了onTaskRemoved、onPlaybackStateChanged等回调,在App恢复时能主动更新播放状态。
  • 检查bloc中调用audioHandler的逻辑,确保App恢复时触发了播放状态更新,避免通知栏控件未重新生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:57:17