目录

后台播放状态异常

问题现象

当应用从前台切换到后台或进入锁屏状态后,媒体的播放可能会出现不符合用户预期的情况,比如意外暂停等问题。

背景知识

问题定位

  1. 明确应用是否有后台播放的使用诉求并接入AVSession。通常长音频应用、听书类应用、长视频应用、VOIP类应用等都需要接入AVSession,可参考应用接入AVSession场景介绍。
  2. 对于有后台播放使用诉求的应用,检查对应音频是否创建(createAVSession)并激活(activate)AVSession会话对象,明确AVSession的接入情况。
  3. 检查module.json文件的requestPermissions标签是否配置ohos.permission.KEEP_BACKGROUND_RUNNING权限。
  4. 检查申请长时任务的实现,BackgroundTasks Kit的startBackgroundRunning和stopBackgroundRunning方法分别是申请和取消后台运行任务,长时任务类型选择AUDIO_PLAYBACK,表示音视频后台播放,可参考后台播放音乐。
  5. 检查应用自身音频播放状态和AVSession播放状态的同步逻辑,参考背景知识的播控中心与应用的交互进行分析。

分析结论

修改建议

[h2]场景一

应用接入AVSession的流程:

  1. 确定应用需要创建的会话类型,创建对应的会话,不同类型决定了播控中心展示的控制模板样式。
  2. 按需创建后台任务。
  3. 设置必要的元数据(Metadata),以在播控中心展示相应的信息,包括不限于:当前媒体的ID(assetId),上一首媒体的ID(previousAssetId),下一首媒体的ID(nextAssetId),标题(title),专辑作者(author),专辑名称(album),词作者(writer),媒体时长(duration)等属性。
  4. 设置播放相关的状态,包括不限于:当前媒体的播放状态(state)、播放位置(position)、播放倍速(speed)、缓冲时间(bufferedTime)、循环模式(loopMode)、是否收藏(isFavorite)、正在播放的媒体Id(activeItemId)、自定义媒体数据(extras)等属性。
  5. 按需注册不同的控制命令,包括不限于:播放/暂停、上下一首、快进快退、收藏、循环模式、进度条。
  6. 应用退出或者无对应业务时,注销会话。

[h2]场景二

申请AUDIO_PLAYBACK的长时任务,详情可参考后台播放音乐。

[h2]场景三

检查音频状态和AVSession状态的实现逻辑,保持一致,可参考播控中心控制应用播放。