uni.getbackgroundaudiomanager()是app端实现锁屏媒体控制的唯一有效入口,必须配合ios的uibackgroundmodes:["audio"]、android的wake_lock权限、https封面图及用户手势触发play(),缺一不可。

uni.getBackgroundAudioManager() 必须作为起点
锁屏媒体控制中心(即锁屏界面显示封面、进度条、播放/暂停按钮)在 uni-app App 端无法靠 CSS 或 JS 模拟实现,唯一有效入口是 uni.getBackgroundAudioManager()。它不是“可选方案”,而是系统级音频会话的唯一注册通道。调用 uni.createInnerAudioContext() 后即使能播音,切后台或锁屏后必然中断——iOS 尤其严格,几乎 100% 静音。
manifest.json 权限配置必须精确嵌套且重新云打包
配置写错位置、格式不合规、或未重新打包,会导致 API 完全失效,且无明确报错。常见失败点:
- iOS 配置必须放在
app-plus → distribute → ios下,写成:"ios": {"UIBackgroundModes": ["audio"]}—— 注意是数组,"audio"不能拼错、不能带空格、不能是字符串 - Android 配置在
app-plus → distribute → android → permissions,正确写法是:"permissions": ["<uses-permission android:name='\"android.permission.WAKE_LOCK\"'></uses-permission>"]—— XML 标签必须转义,斜杠不能省略 - 改完 manifest 后,**必须重新云打包**;本地调试、热更新、自定义基座均不生效;真机测试前确认打包日志含
background audio enabled提示
锁屏控件不显示?title/coverImgUrl/singer 缺一不可
iOS 锁屏界面只认这三个字段,任意一个为空或格式非法(如 coverImgUrl 不是 HTTPS 有效图片地址),系统就判定“无媒体信息”,直接隐藏整个控件区。Android 虽依赖原生 MediaSession,但这三字段是基础门槛:
-
title和singer必须是非空字符串(哪怕填 "未知") -
coverImgUrl必须是可公开访问的 HTTPS 图片 URL;本地路径如/static/cover.jpg需确保已打包进资源,且实际 URL 是https://yourdomain.com/static/cover.jpg或使用__APP_STATIC__/cover.jpg形式(需配合 HBuilderX 2.9.10+) - 设置顺序无关,但必须在调用
play()前全部赋值完毕;建议统一在onLoad或播放触发前集中设置
iPhone 系统侧开关和通知权限常被忽略
即使代码和配置全对,iOS 设备上锁屏控件仍不出现,大概率卡在系统层设置:
- 进入「设置 → 音乐」,打开
媒体与Apple Music和显示Apple Music两个开关 - 进入「设置 → 通知 → 你的 App 名称」,确保
允许通知和锁定屏幕均开启 - 若仍不显示,从控制中心长按媒体区域(当前歌曲名旁)触发刷新;或双杀 App 后重播一次再锁屏
真正容易被绕过的点是:iOS 要求音频播放必须由用户手势触发(如点击播放按钮),不能在 onLoad 自动调 play() —— 否则系统拒绝授予后台音频焦点,后续所有设置都白搭。











