HarmonyOS鸿蒙Next中后台播放音频有啥需要注意的吗

HarmonyOS鸿蒙Next中后台播放音频有啥需要注意的吗 我想在鸿蒙设备上实现后台播放音频,有什么需要注意的吗?鸿蒙有没有什么管控,有的话我要如何适配呢?

4 回复

更多关于HarmonyOS鸿蒙Next中后台播放音频有啥需要注意的吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


尊敬的开发者,您好,

应用退至后台后,在后台需要长时间运行用户可感知的任务,如播放音乐、导航等。为防止应用进程被挂起,导致对应功能异常,可以申请长时任务,使应用在后台长时间运行。在长时任务中,支持同时申请多种类型的任务,也可以对任务类型进行更新。应用退至后台执行业务时,系统会做一致性校验,确保应用在执行相应的长时任务。应用在申请长时任务成功后,通知栏会显示与长时任务相关联的消息,用户删除通知栏消息时,系统会自动停止长时任务。

详细您可以参考:长时任务(ArkTS)-Background Tasks Kit(后台任务开发服务)-应用框架 - 华为HarmonyOS开发者

关于AUDIO_PLAYBACK(音视频播放)说明:

  • 音视频投播,是指将一台设备的音视频投至另一台设备播放。投播退至后台,长时任务会检测音视频播放和投屏两个业务,只要有其一正常运行,长时任务就不会终止。
  • 当应用需要在后台播放媒体类型(流类型为STREAM_USAGE_MUSIC、STREAM_USAGE_MOVIE和STREAM_USAGE_AUDIOBOOK)和游戏类型(流类型为STREAM_USAGE_GAME)时,必须接入媒体会话服务(AVSession)并申请AUDIO_PLAYBACK类型长时任务。
  • 除了上述播放类型,针对用户可感知的其他播放任务,如果应用需要在后台长时间运行该任务,必须申请AUDIO_PLAYBACK类型长时任务,无需接入AVSession。
  • 如果应用不满足上述接入规范,退至后台播放时会被系统静音并冻结,无法在后台正常播放,直到应用重新切回前台时,才会解除静音并恢复播放。
  • 从API version 20开始,申请AUDIO_PLAYBACK类型长时任务但不接入AVSession,申请长时任务成功后会在通知栏显示通知;接入AVSession后,后台任务模块不会发送通知栏通知,由AVSession发送通知。对于API version 19及之前的版本,后台任务模块不会在通知栏显示通知。
  • 应用申请AUDIO_PLAYBACK类型长时任务,退至后台时,如果设备没有有效音频播放,应用可能被系统冻结。

HarmonyOS Next 后台播放音频需配置ohos.permission.KEEP_BACKGROUND_RUNNING权限,并在模块配置文件module.json5中声明backgroundModesaudio。使用AVPlayerAudioRenderer时需绑定BackgroundTaskManager以保持后台存活,同时注意避免频繁唤醒系统,控制音频焦点占用。

实现HarmonyOS Next后台音频播放,需适配以下管控:

  1. 申请长时任务:调用 backgroundTaskManager.requestSuspendDelay 并指定类型为 audioPlayback,保证进程在后台可持续运行,避免被挂起。
  2. 创建AVSession:必须创建媒体会话(avSession.createAVSession)并注册 BackendSession,提供标题、封面、播放状态等元数据,这样锁屏卡片和播控中心才能显示与控制。
  3. 绑定音频焦点:监听 audio.AudioInterrupt 事件,处理音频打断(如来电、其他音乐抢占焦点时暂停或降低音量),并通过 audioRendererAVPlayer 设置 sessionId 与会话绑定,防止被系统静音。
  4. 使用合适播放器:推荐使用 AVPlayer 并绑定上述会话ID,其自动适配后台状态;若使用 AudioRenderer,需手动配置流类型为 STREAM_MUSIC
  5. 适配熄屏管控:熄屏后CPU可能降频,避免重度计算,仅维持音频解码和网络请求即可;电池优化模式下无额外限制,但长时任务保活是前提。
  6. 保持直播推流注意:若需长时间无声后台,应发送静音帧保持活跃,防止系统回收。

按此流程即可实现稳定的后台音频播放。

回到顶部