uni.getbackgroundaudiomanager()是app端息屏持续播放的唯一可靠api,需配合ios的uibackgroundmodes:["audio"]和android的wake_lock权限,正确配置manifest.json并重新云打包,设置title/singer/coverimgurl后调用play()方可实现锁屏播放与控制。

uni.getBackgroundAudioManager() 是唯一靠谱的起点
App端实现息屏后持续播放,uni.getBackgroundAudioManager() 不是“可选方案”,而是必须用的 API。它专为后台音频设计,iOS 和 Android 都能触发系统级音频会话,让系统知道“这 app 正在播音乐”,从而延长存活时间、允许锁屏控制。别用 uni.createInnerAudioContext() 去硬扛——它在切后台后大概率被系统静音或中断,尤其 iOS 上几乎必然失效。
常见错误现象:调用 play() 后一切正常,一锁屏/切后台就无声;或者锁屏界面完全不显示歌曲信息。根本原因就是没走对入口,误用了前台音频上下文。
- iOS 必须搭配
UIBackgroundModes: ["audio"]才生效,否则连后台播放资格都没有 - Android 虽然不强制要求权限声明,但没加
WAKE_LOCK会导致部分机型(尤其华为、小米)锁屏几秒后自动暂停 - 该 API 在 H5 端完全无效,调用后无报错但也不起作用,务必用条件编译隔离
manifest.json 的权限配置不是“勾一下就行”
很多项目卡在这一步:写了配置却不起作用,以为是代码问题,其实是 manifest 写错了位置或格式不对。这个 JSON 必须精确嵌套在 app-plus → distribute 下,且 iOS 和 Android 配置不能混写、不能漏项。
实操建议:
- iOS 配置要完整写成:
"ios": {"UIBackgroundModes": ["audio"]},注意是数组,不是字符串;"audio" 不能拼错,也不能加空格 - Android 配置中,
permissions是字符串数组,正确写法是:"permissions": ["<uses-permission android:name='\"android.permission.WAKE_LOCK\"'></uses-permission>"]—— 注意 XML 标签必须带转义,且不能省略斜杠 - 改完 manifest 后必须**重新云打包**,热更新和本地调试无法生效;真机测试前务必确认打包日志里有 “background audio enabled” 类似提示
锁屏界面信息不显示?title/coverImgUrl 缺一不可
iOS 锁屏界面只认 title、singer、coverImgUrl 这三个字段,缺任意一个,系统就当“无媒体信息”处理,直接不显示控件。Android 则更依赖原生层的 MediaSession,仅靠 JS 设置这三个字段往往不够,但它是基础门槛。
容易踩的坑:
-
coverImgUrl必须是 HTTPS 地址(iOS 强制),本地路径如/static/cover.jpg会被忽略;建议提前上传到 CDN 并用固定 URL -
title和singer不能为空字符串或纯空格,否则某些 Android 机型(如 OPPO)会判定为无效而隐藏通知栏控件 - 设置顺序很重要:必须先赋值
title等字段,再赋src,最后调play();反过来可能导致锁屏信息未同步
示例关键片段:
const bgAudio = uni.getBackgroundAudioManager(); bgAudio.title = '晚风'; bgAudio.singer = '陈绮贞'; bgAudio.coverImgUrl = 'https://cdn.example.com/cover.jpg'; bgAudio.src = 'https://cdn.example.com/wanfeng.mp3'; bgAudio.play();
锁屏控制按钮没反应?得靠原生插件补全
uni.getBackgroundAudioManager() 只负责“播”,不负责“控”。锁屏界面上的上一曲、下一曲、暂停按钮点击后,JS 层默认收不到事件——这是系统限制,不是 UniApp 漏洞。想响应这些操作,必须引入原生插件,比如 DCloud 插件市场上的 media-style-notification(ID: 1820)。
为什么绕不开原生:
- iOS 需要
MPRemoteCommandCenter注册回调,JS 无法直接调用 - Android 需要
MediaSessionCompat+NotificationCompat.MediaStyle构建带控件的通知,纯 JS 无权创建这类系统级 UI - 插件安装后,仍需在 manifest 中开启对应平台配置,否则插件功能被禁用
复杂点在于:不同厂商对 MediaSession 的支持程度不一,vivo、华为部分新机型可能只响应“播放/暂停”,跳过曲目事件。上线前务必拿主力测试机逐个验证,别只信文档。











