锁屏界面无法添加自定义循环开关,只能在App内UI提供循环模式切换并由App主动控制逻辑;需用playMode字段维护状态,手动处理切歌越界、同步元数据、防抖监听及iOS元数据更新。

锁屏界面本身不支持添加自定义开关
系统锁屏控件(iOS 控制中心 / Android 媒体通知栏)只暴露标准播放控制项:播放/暂停、上一首/下一首、进度条、封面、标题、歌手。你无法往里面塞一个“循环开关”按钮,uni.getBackgroundAudioManager() 也不提供注册自定义动作的接口。所谓“在锁屏界面添加开关”,本质是误解——真正能做的,是在 App 内 UI 提供循环模式切换,并让后台音频逻辑响应这个状态。
循环逻辑必须由 App 主动控制,不能依赖锁屏按钮
用户点锁屏界面上的“下一首”,触发的是 bgAudio.next();点“上一首”触发 bgAudio.prev()。但“循环”没有对应系统事件,iOS/Android 都不广播 onRepeatToggle 这类回调。所以:
- 必须用 data 字段(如
playMode)维护当前循环策略:"order"(顺序)、"repeat"(单曲循环)、"shuffle"(随机) - 每次调用
bgAudio.next()或bgAudio.prev()后,要手动判断是否越界,并根据playMode决定是停止、跳回开头,还是换到随机曲目 - 切歌时需同步更新
bgAudio.title/bgAudio.singer等元数据,否则锁屏界面显示残留旧信息
监听锁屏操作后仍需校验播放状态
用户在锁屏界面点“下一首”,会触发 bgAudio.onEnded 吗?不会。它只触发 bgAudio.onNext(如果已监听),但这个事件不是所有端都稳定支持。更可靠的做法是:
- 始终监听
bgAudio.onPlay和bgAudio.onPause,用于同步 UI 播放按钮状态 - 对
onNext和onPrev做防抖(clearTimeout+setTimeout),避免快速连点导致索引错乱 - 每次切换前检查
bgAudio.src是否已加载完成(可监听onCanplay),否则play()可能静音失败 - Android 上若未配置
app-plus.background.mode: "audio",onNext可能根本不会触发
循环图标和文案需在 App 内显式同步
锁屏界面不会自动反映你的循环模式。用户点了“单曲循环”,锁屏上依然只显示通用播放控件。所以:
- 在页面中用 icon(如
icon-repeat/icon-repeat-one)和文字(“列表循环”/“单曲循环”)明确标识当前状态 - 点击该图标时,更新
playMode并立即生效:比如当前是"repeat",再点就切到"order" - 不要等用户去锁屏界面找开关——那里没有,也永远不会有
playMode 切换了,如果没重新赋值 bgAudio.title 和 bgAudio.coverImgUrl,锁屏界面就可能卡在旧封面、旧标题上,看起来像“没生效”。


















