uni.getBackgroundAudioManager() 仅微信小程序支持,是唯一能绕过锁屏回收的原生音频API;其他平台需适配对应方案,不可跨端复用。

uni.getBackgroundAudioManager() 是唯一能绕过锁屏回收的 API
锁屏后音频被静音或中断,不是代码写得不对,而是 uni.createInnerAudioContext() 本身就不支持后台存活——它绑定页面生命周期,一锁屏 JS 线程挂起,实例直接被系统销毁。只有微信小程序提供 uni.getBackgroundAudioManager(),它是原生级音频服务,不依赖页面、能响应锁屏控制、可接管系统音频焦点。
常见错误:在支付宝或字节小程序里硬套这个 API,结果返回 null 或报错;或在 App 端误用它(App 端该 API 实际无效,必须走 uni.createInnerAudioContext() + manifest 配置)。
- 仅限微信小程序平台可用,其他小程序平台无等效能力
- 必须在用户交互(如按钮点击)后调用
manager.play(),不能在onLoad自动触发 - 赋值
manager.src后,必须显式调用manager.play(),否则不加载也不播
锁屏信息不显示?缺字段或协议不合规
iOS 锁屏界面只显示“未知”,Android 通知栏缩略图模糊或空白,大概率是元数据没填全或封面地址不达标。
title、singer、epname 至少填两个,否则 iOS 锁屏控件直接隐藏;coverImgUrl 必须是 HTTPS 地址,且尺寸 ≥ 300×300,否则 Android 微信通知栏渲染糊成一片。
- 本地路径(如
/static/cover.jpg)在锁屏下不可用,必须传公网 HTTPS URL - 字段值不能为空字符串或纯空格,iOS 会当作未设置
- 微信开发者工具里看不到锁屏效果,必须真机测试
App 端锁屏失效?manifest.json 配置漏项或没重打包
App 端调用 uni.getBackgroundAudioManager() 后锁屏无声,90% 是 manifest.json 权限没配对或没生效。
iOS 和 Android 的配置位置、格式、关键词都不同,且改完必须重新云打包——热更新和本地调试完全不触发后台音频权限。
- iOS 配置路径:
app-plus.distribute.ios.UIBackgroundModes,值为["audio"](数组,不是字符串) - Android 需在
app-plus.permissions中加入"<uses-permission android:name=\"android.permission.WAKE_LOCK\" />"(注意 XML 转义) - 打包日志里要看到
background audio enabled才算成功
循环播放卡顿、iOS 静音无报错?音频源本身有问题
循环播放时出现 200ms 以上间隙,或 iOS 真机点播放后无声、onError 也不触发,问题不在 JS 层,而在音频文件编码或协议。
iOS 对 MP3 极其挑剔:只稳定支持 MPEG-1 Layer III 编码,VBR 变长码率或 MPEG-2 编码会被静默拒绝;HTTP 协议资源在 iOS 小程序中直接拦截,还不报错。
- 用
ffprobe -show_entries stream=codec_name,codec_tag_string audio.mp3检查编码,确认codec_name=mp3 - 重编码命令推荐:
ffmpeg -i in.mp3 -c:a libmp3lame -q:a 2 -ar 44100 -ac 2 out.mp3 - 本地音频必须放
/static/目录下,路径写成/static/song.mp3,不能用别名或相对路径
BackgroundAudioManager,其他小程序没有;App 端依赖原生配置,H5 根本不存在“锁屏音频”概念。别试图用一个方案打穿所有端。


















