微信小程序中真后台音频必须用 backgroundAudioManager,uni.createInnerAudioContext() 不支持;应全局初始化 uni.getBackgroundAudioManager() 并规范设置元数据与事件监听。

微信小程序里 backgroundAudioManager 不能直接用 uni.createInnerAudioContext()
uni-app 的 uni.createInnerAudioContext() 在微信小程序平台实际调用的是 InnerAudioContext,它**不支持后台播放**(切到后台或锁屏即暂停),而真后台音频必须用小程序原生的 backgroundAudioManager。uni-app 官方未封装该 API,所以不能靠 uni. 前缀直接调用。
实操建议:
- 在微信小程序平台下,直接使用
uni.getSystemInfoSync().platform === 'ios' || 'android'判断环境后,用uni.$nextTick或onReady阶段访问全局uni.getBackgroundAudioManager()(这是 uni-app 为微信平台提供的兼容入口) - 注意:该方法仅在微信小程序中存在,其他平台会返回
undefined,需提前 guard - 不要试图用
uni.createInnerAudioContext()设置showCenterControl: true来“伪装”后台播放——它在微信里根本无效,且 iOS 上会被系统强制静音
如何让 backgroundAudioManager 正确响应播放/暂停/进度更新
微信的 backgroundAudioManager 是单例,事件监听必须在首次使用前绑定,且不能重复绑定(否则事件触发多次)。常见错误是每次页面 onLoad 都重新赋值 src 并重绑 onPlay,导致状态混乱。
实操建议:
- 全局只初始化一次:推荐在
App.vue的onLaunch中获取并缓存uni.getBackgroundAudioManager()实例,挂到uni.$bgm上 - 播放前必须设置
title、epname、singer、coverImgUrl(至少前三项),否则控制中心不显示信息,iOS 下甚至无法触发播放 -
onTimeUpdate触发频率低(约每 250ms 一次),别用它做高精度进度条拖动;拖动时应调用seek(),而非反复currentTime赋值 - 切后台后,
onStop不一定会触发(尤其 Android),应监听onPause和onPlay做状态同步
uni-app 页面跳转或 onHide 时音频意外中断的修复
微信小程序中,页面 onHide 时若当前页持有 backgroundAudioManager 的引用但未主动 play(),部分安卓机型(如华为 EMUI)会强制暂停音频;另外,navigateTo 到新页面后旧页面被销毁,若没清理事件监听,可能引发内存泄漏或状态错乱。
name wechat-article-writer-pro description 微信公众号文章完整生成技能(专业版)。输入主题即自动完成:信息调研、文章撰写(含章节配图)、5个备选爆款标题、封面图生成、带格式排版的DOCX文档输出。触发词:写公众号文章、生成公众号内容、做微信推文、公众号文章完整版。 agent_created true 微信公众号文章完整生成技能(专业版) 概述 本技能提供微信公众号文章从主题到成品的完整生成流程,在基础版之上增加:章节配图、DOCX 格式输出(含彩色重点文字和表格
实操建议:
- 在页面
onHide中不调用pause(),除非你明确要暂停;保持播放状态即可 - 在
onUnload中解绑所有事件(offPlay、offPause等),但不要调用stop()—— 否则用户切回来还得手动点播放 - 如果需要跨页面控制(比如从播放页跳到歌词页),确保所有页面都读写同一个
uni.$bgm实例,而不是各自create - 避免在
onShow中自动play():微信不允许非用户主动触发的播放,会静音且报错setSrc:fail api not allowed to be called
封面图加载失败、控制中心不显示信息的排查点
即使设置了 coverImgUrl,控制中心仍显示默认图标,大概率是资源问题或字段缺失。微信对背景音频元数据校验严格,任意一项不合法都会降级。
实操建议:
-
coverImgUrl必须是 HTTPS 地址,且服务器返回头含Access-Control-Allow-Origin: *(否则 iOS 直接不加载) -
title和singer不能为空字符串或纯空格,长度建议 ≤32 字符;epname可选,但设为空字符串会出问题,不填就直接 omit - 首次设置
src后,必须等待onCanplay触发后再调用play(),否则元数据可能未加载完成,控制中心空白 - 真机调试时打开微信「设置 → 新消息通知 → 音频播放」确认未被关闭(部分用户误关会导致控制中心完全不出现)
最易被忽略的是:iOS 微信要求音频资源本身必须带 ID3 v2 标签(哪怕只是空标签),否则即使封面和标题都对,控制中心也只显示“未知歌曲”。用 ffmpeg 补一个轻量标签即可:ffmpeg -i in.mp3 -c copy -id3v2_version 3 -metadata title="xxx" out.mp3。


















