锁屏不显示专辑名因title、singer、coverimgurl三字段缺一不可,必须均为非空字符串且在play()前设置,仅用uni.getbackgroundaudiomanager()才有效。

锁屏控制中心不显示专辑名?检查 title 和 singer 是否都设了
iOS 锁屏界面只认三个字段:title、singer、coverImgUrl,缺一不可。哪怕 epname(专辑名)写了,但 title 或 singer 为空,系统就当“无媒体信息”,直接隐藏整个控件。
常见错误现象:调用 play() 后音频能播,但锁屏界面只有时间条、没有文字和封面;或者只显示“未知歌曲”。根本原因就是 title 或 singer 没赋值,或赋了空字符串、null、undefined。
-
title必须是非空字符串,建议用真实歌名,不能是占位符如"loading..." -
singer同样必须是非空字符串,不能留空或只填空格 -
coverImgUrl虽然可选,但 iOS 实际上强制要求——没图也会导致控件不显示(尤其 iOS 17+) - 所有字段必须在
play()前设置,且不能在播放中途异步覆盖(部分机型会忽略更新)
为什么设置了还是不显示?确认 uni.getBackgroundAudioManager() 是唯一入口
用 uni.createInnerAudioContext() 或 HTML5 <audio></audio> 标签,无论怎么设 title 都无效。它们没有系统音频会话权限,iOS 直接拒绝暴露到锁屏界面。
必须用 uni.getBackgroundAudioManager(),且仅此一个实例。多次调用它不会创建新实例,而是返回同一个管理器——所以字段设置只生效一次,别在不同页面重复初始化又覆盖。
- 不要在多个页面分别调用
uni.getBackgroundAudioManager()并设不同title,会导致状态混乱 - 推荐全局单例管理:在
main.js或store中初始化并暴露,所有播放逻辑复用该实例 - 设置字段后,务必调用
bgAudio.play()触发会话激活,否则系统不认为“正在播放”
Android 锁屏显示不一致?别只靠 JS 字段
Android 原生层依赖 MediaSession,仅靠 JS 设置 title/singer 不足以稳定触发锁屏控件。尤其华为、小米等定制系统,需要原生配合。
但 JS 层仍是基础门槛:如果这三个字段没设对,原生层根本收不到有效元数据。所以先确保 JS 正确,再排查原生适配问题。
- Android 端
coverImgUrl必须是 HTTPS 地址(HTTP 会被拦截,尤其 Android 9+) - 部分机型要求封面尺寸 ≥ 300×300px,过小图片可能被忽略
- 真机测试时,务必关闭“省电模式”或把 App 加入电池白名单,否则后台音频被杀,连带锁屏控件消失
manifest.json 配置错一个字符,锁屏功能就全失效
即使代码全对,manifest.json 里 iOS 的 UIBackgroundModes 写错位置或格式,iOS 就根本不允许后台音频会话——自然也不会显示任何锁屏信息。
这个配置不是“勾选项”,是硬性声明。云打包时若没生效,日志里不会有明显报错,只会静默失败。
- iOS 配置必须嵌套在
app-plus → distribute → ios下,写成:"ios": {"UIBackgroundModes": ["audio"]} - Android 的
permissions要写完整 XML 字符串:"<uses-permission android:name='\"android.permission.WAKE_LOCK\"'></uses-permission>",注意引号和转义 - 改完
manifest.json必须重新云打包,本地调试或热更新完全无效 - 打包日志里搜
background audio,确认有类似提示才算真正启用
最易被忽略的是:字段名大小写、JSON 缩进错误、数组误写成对象、漏掉逗号——这些都会让整个配置失效,但 HBuilderX 不校验,只能靠人工盯。











