Files
ReelShort/docs/plans/2026-10-22-keep-awake-auto-resume.md

1.6 KiB

屏幕常亮与前台自动续播

目标

  • Android 与 iOS 前台保持屏幕常亮,不引入插件或依赖。
  • 用户主动暂停后切后台再回前台,在播放器与票据状态安全时自动续播。
  • 锁定、blocked、票据失败、错误态及浮层遮挡场景不得强制起播。

实施步骤

  1. Android MainActivity.onCreate 添加 FLAG_KEEP_SCREEN_ON,保留现有渠道逻辑。
  2. iOS AppDelegate 设置 UIApplication.shared.isIdleTimerDisabled = true。
  3. 为 PlaybackSession 增加无浮层、路线可见且 active 播放器可用的恢复判断。
  4. 调整 PlayerLogic.onLifecycle,在现有 PiP 复位和过期票据刷新流程后安全设置播放意图。
  5. 补用户暂停恢复、锁定/票据失败不恢复、后台保存并暂停测试。
  6. 执行 dart analyze lib test 与 flutter test --no-pub,回填 PROGRESS 后提交合并。

风险 / 待确认

  • 真机常亮和生命周期行为由 PM 验收,本次不启停服务、不操作设备。
  • PiP 继续沿用现有可见性策略,不额外修改后台播放行为。

执行结果

  • Android 主 Activity 已添加 FLAG_KEEP_SCREEN_ON,未改动 Flutter 渠道与 PiP 逻辑。
  • iOS AppDelegate 已设置 UIApplication.shared.isIdleTimerDisabled = true。
  • 用户主动暂停后回前台可安全恢复;过期票据会等待重取完成后再恢复。
  • locked、blocked、票据错误、会话错误、解锁/浮层遮挡和 PiP 场景均不会强制续播。
  • 后台仍先保存进度并暂停。
  • dart analyze lib test 零告警,flutter test --no-pub 580 项全过。
  • 未启停服务,未操作真机。