AudioSource.uri 带头部信息在屏幕锁定后不播放。
在这里你可以找到视频和重现此问题的确切步骤。
此问题仅发生在真实的 iOS 设备上(发布模式和配置文件模式)。在运行 iOS 模拟器时,问题不存在。
凭据是
- 邮箱: [email protected]
- 密码: asdfasdf
请忽略丢失的图片,根 API URL 已设置为测试版本。音频文件存在,这才是最重要的。
以下是视频中捕获的步骤
视频 1
- 登录应用
lib/screens/login.dart - 登录后,用户将被重定向到我的书籍屏幕
lib/screens/books/my_books.dart - 选择有声读物后,用户将被重定向到书籍详情屏幕
lib/screens/books/book.dart - 按播放按钮(浮动操作按钮),这会触发以下操作:
- 清除播放列表 (
lib/services/audio_player_state.dart:51) - 构建新的播放列表 (
lib/services/audio_player_state.dart:67) - 重定向到播放器屏幕 (
lib/screens/player.dart)
- 清除播放列表 (
- 音频开始播放,因为在播放器屏幕的
initState()方法中调用了myAudioPlayerState.play()方法(这会触发lib/services/audio_player_state.dart:33) - 通过按搜索器下方的暂停按钮来暂停音频,这会触发:
lib/services/audio_player_state.dart:35 - 锁定屏幕
RPReplay_Final1653914411.MP4
视频 2
- 锁定屏幕并保持锁定约 20 秒后,用户返回应用并按播放 - 音频开始播放(触发
lib/services/audio_player_state.dart:33) - 用户跳到下一章节 - 下一章节开始播放(触发
lib/services/audio_player_state.dart:41) - (这是问题所在) 当用户尝试跳到另一章节时
- 没有音频在播放
- 播放器索引快速遍历队列中的剩余项目
- 播放器状态卡在加载状态。
RPReplay_Final1653914522.MP4
当我从 AudioSource.uri 构造函数 (lib/services/audio_handler.dart:114) 中删除头部信息时,问题就消失了。