该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
锁屏控制(通知栏媒体控制、锁屏界面上一曲/下一曲/暂停按钮)在 uni-app 里必须依赖原生能力,uni-app 官方只提供了 JS 层的 uni.getBackgroundAudioManager(),真正的锁屏 UI 与事件分发仍需要原生插件补足。
目前社区里兼容性做得最好、且持续维护的有两条路线,您可以优先尝试:
-
插件市场现成的「通用型」插件
搜索关键字:锁屏控制、通知栏音乐、media-style-notification
推荐插件:
- [DCloud 官方推荐] 原生通知栏音乐控制器(Android)
https://ext.dcloud.net.cn/plugin?id=1820
- 锁屏控制 & 蓝牙媒体键(Android + iOS)
https://ext.dcloud.net.cn/plugin?id=6714
这两个插件都提供了 uts 源码,支持 uni-app 4.x,Android 端用 MediaStyle Notification + MediaSessionCompat,iOS 端用 MPNowPlayingInfoCenter + MPRemoteCommandCenter,基本能覆盖 95% 机型。接入时只要在 manifest.json → app-plus → distribute → ios 里加 "UIBackgroundModes": ["audio"],Android 端把插件勾上即可。
-
自己写 uts 插件(核心思路)
如果上面插件仍不能满足需求,可以 fork 它们的源码做二次开发。关键代码片段:
- Android(uts)
val session = MediaSessionCompat(context, "music")
session.setCallback(object : MediaSessionCompat.Callback() {
override fun onPlay() { emit("play") }
override fun onPause() { emit("pause") }
override fun onSkipToNext() { emit("next") }
override fun onSkipToPrevious() { emit("prev") }
})
val style = androidx.media.app.NotificationCompat.MediaStyle()
.setMediaSession(session.sessionToken)
val notification = NotificationCompat.Builder(context, "music")
.setStyle(style)
.setSmallIcon(R.drawable.ic_music)
.build()
NotificationManagerCompat.from(context).notify(1, notification)
- iOS(uts)
let center = MPRemoteCommandCenter.shared()
center.playCommand.addTarget { _ in
UniApp.emit("play"); return .success
}
center.pauseCommand.addTarget { _ in
UniApp.emit("pause"); return .success
}
center.nextTrackCommand.addTarget { _ in
UniApp.emit("next"); return .success
}
center.previousTrackCommand.addTarget { _ in
UniApp.emit("prev"); return .success
}
然后在 uni-app 里监听这些事件即可。
-
常见坑 & 规避方案
- Android 8.0+ 必须带 NotificationChannel,否则通知不显示。
- iOS 16+ 需要在 Info.plist 里声明
NSAppleMusicUsageDescription。
- 部分国产 ROM(小米/华为)需要在设置里手动打开「锁屏显示」权限,可在插件里引导用户跳转。
- 如果长音频出现 buffered 不再增长导致播放中断,参考官方 issue 的临时方案:在 onTimeUpdate 里判断剩余缓冲 < 10 秒时手动
pause() 再 play() 触发二次缓冲。
总结:先用插件市场已有的成熟插件,能省 90% 工作量;确实需要定制,再基于 uts 插件自己扩展。
1 个回复
Ask小助手 - Ask社区AI助手
锁屏控制(通知栏媒体控制、锁屏界面上一曲/下一曲/暂停按钮)在 uni-app 里必须依赖原生能力,uni-app 官方只提供了 JS 层的
uni.getBackgroundAudioManager(),真正的锁屏 UI 与事件分发仍需要原生插件补足。目前社区里兼容性做得最好、且持续维护的有两条路线,您可以优先尝试:
插件市场现成的「通用型」插件
搜索关键字:
锁屏控制、通知栏音乐、media-style-notification推荐插件:
https://ext.dcloud.net.cn/plugin?id=1820
https://ext.dcloud.net.cn/plugin?id=6714
这两个插件都提供了 uts 源码,支持 uni-app 4.x,Android 端用 MediaStyle Notification + MediaSessionCompat,iOS 端用 MPNowPlayingInfoCenter + MPRemoteCommandCenter,基本能覆盖 95% 机型。接入时只要在 manifest.json → app-plus → distribute → ios 里加
"UIBackgroundModes": ["audio"],Android 端把插件勾上即可。自己写 uts 插件(核心思路)
如果上面插件仍不能满足需求,可以 fork 它们的源码做二次开发。关键代码片段:
然后在 uni-app 里监听这些事件即可。
常见坑 & 规避方案
NSAppleMusicUsageDescription。pause()再play()触发二次缓冲。总结:先用插件市场已有的成熟插件,能省 90% 工作量;确实需要定制,再基于 uts 插件自己扩展。
要回复问题请先登录或注册
公告
更多>相关问题