微信小程序后台播放需用uni.getbackgroundaudiomanager(),其他平台无此能力;app端需manifest配置+uni.createinneraudiocontext();h5无后台概念,须按平台差异化实现。

微信小程序能后台播放,其他平台(支付宝、字节、H5)做不到——这不是代码问题,是平台能力边界。想绕开,得先分清平台,再选对 API。
微信小程序必须用 uni.getBackgroundAudioManager()
它和页面生命周期无关,是微信原生提供的独立音频服务,才能响应锁屏控制、耳机键、通知栏操作。而 uni.createInnerAudioContext() 是页面级的,切后台 JS 一停,监听器全失效,iOS 甚至直接销毁实例。
- 必须在用户点击等交互后调用
manager.play(),不能在onLoad或onShow自动触发 -
title、singer、epname至少填两个,否则 iOS 锁屏界面只显示“未知” -
coverImgUrl必须是 HTTPS 地址,尺寸建议 ≥ 300×300,Android 微信通知栏才显示清晰缩略图 - 赋值
src后必须显式调用manager.play(),光设 src 不会加载也不播放
支付宝/字节/快应用等平台根本没后台音频能力
它们没提供类似微信 BackgroundAudioManager 的稳定接口。用 uni.createInnerAudioContext() 切后台必停,且无法通过任何 manifest 配置、权限声明或事件监听恢复。
- 不要尝试在
onHide里手动audio.pause()再onShow恢复——用户从锁屏点播放,完全无响应 - 别在非微信平台硬套微信方案,
uni.getBackgroundAudioManager()在支付宝里返回空对象或报错 - 降级策略只能是:切后台时暂停 + 前台恢复时提示“继续播放”,或直接隐藏控制条
iOS App 端要用 uni.createInnerAudioContext() + 正确 manifest 配置
微信小程序的 BackgroundAudioManager 在 App 端不生效;App 真机后台播放唯一可靠路径是 uni.createInnerAudioContext() 配合系统级声明。
-
manifest.json中必须配{"app-plus": {"distribute": {"ios": {"UIBackgroundModes": ["audio"]}}}} - 音频源必须是 HTTPS URL,本地路径(如
/static/song.mp3)在 iOS 真机后台大概率静音或中断 - 循环播放不能只设
loop = true,需监听onEnded手动seek(0)+play(),并加try/catch兜底 - 锁屏控制信息(标题、封面)仅支持原生渲染模式,且必须用本地绝对路径,调用
plus.audio.setLockScreenControl()要包裹在#ifdef APP-PLUS中
最容易被忽略的是平台差异的硬边界:微信有 BackgroundAudioManager,其他小程序没有;App 端依赖系统配置,H5 根本没有“后台”概念。写一套代码跑通所有端,只会反复踩坑。按平台拆逻辑,比堆配置重要得多。











