uni-app安卓版如何常驻锁屏控制栏

大杰吖_4207

大杰吖_4207

2026-08-22

601人浏览

原创

安卓锁屏控制栏需前台服务+媒体通知+权限配置,uni.setkeepscreenon无效;必须用原生插件(如xzh-musicnotification)实现mediasession,配置manifest权限,适配厂商省电策略。

uni-app安卓版如何常驻锁屏控制栏

uni-app 安卓版无法真正“常驻锁屏控制栏”——这是系统级限制,不是代码能绕过的。你能做的,是让音频播放在锁屏后继续、并在状态栏显示可控的媒体通知(即“锁屏控制栏”),但必须依赖前台服务 + 媒体通知模板 + 正确权限配置。

为什么直接调 uni.setKeepScreenOn 不行

这个 API 只管屏幕亮灭,和锁屏后的控制栏完全无关。锁屏时系统会销毁 Activity 上下文,uni.setKeepScreenOn 调用失效,且 Android 8.0+ 对后台服务有严格限制,没前台服务支撑,音频一锁屏就停。

  • 常见错误现象:uni.getBackgroundAudioManager() 在锁屏后静音、onHide 触发后播放中断、状态栏无播放控件
  • 根本原因:没有前台服务绑定媒体会话(MediaSession),系统认为 App 已退到后台,按策略回收资源
  • 性能影响:不加前台服务,锁屏 1–3 分钟内音频必然被杀;加了则可稳定运行数小时(取决于厂商省电策略)

必须用原生插件实现前台媒体服务

uni-app 官方 API 不提供 MediaSession 和前台服务封装,必须引入支持 Android 前台服务的原生插件,例如 XZH-musicNotification 或 uni-app-audio-foreground。纯 JS 方案在 Android 9+ 全面失效。

uni-app
uni-app

uni-app 是基于 Vue 的跨端开发框架,适合开发 H5、App、小程序、鸿蒙和多端业务应用。

下载
  • 插件需在 manifest.json 的 "nativePlugins" 节点注册,并确保离线打包时启用
  • AndroidManifest.xml 必须声明以下权限(缺一不可):android.permission.FOREGROUND_SERVICE、android.permission.POST_NOTIFICATIONS(Android 13+)、android.permission.WAKE_LOCK
  • 离线打包时,插件的 dcloud_uniplugins.json 需正确配置 service 类路径和 intent-filter,否则前台服务无法启动
  • 真机调试必须用正式 APK,HBuilderX 模拟器不触发前台服务生命周期

JS 层调用必须配合生命周期和媒体会话

插件只是载体,JS 层调用逻辑错一步,通知栏控件就不显示或无法响应点击。

  • 播放开始时立即调用插件初始化方法(如 audioPlugin.startForegroundService()),不能等 onShow 或用户操作后再调
  • 必须调用 uni.getBackgroundAudioManager() 并设置 title、epname、singer 等字段,否则通知栏只显示默认文字或空白
  • 监听 onPlay、onPause、onStop 后同步更新插件的播放状态,否则锁屏后点击暂停按钮无响应
  • 退出播放页时,必须显式调用 audioPlugin.stopForegroundService(),否则通知栏残留、服务持续耗电

厂商适配是最大坑点

小米、华为、OPPO 等对前台服务拦截极严,同一套代码在不同机型表现差异极大。

  • 小米 HyperOS:需手动开启“后台弹出界面”+“自启动”+“锁屏显示”,否则通知栏控件不出现
  • 华为 EMUI/鸿蒙:必须在 AppInfo → 电池优化中设为“不受限制”,否则前台服务 2 分钟后被杀
  • vivo/Realme:需关闭“熄屏后停止网络”和“后台高耗电提醒”,否则音频流断开
  • 所有厂商都要求用户首次启动时主动弹窗申请 POST_NOTIFICATIONS 权限,拒绝即无通知栏控件

锁屏控制栏不是“写段 JS 就出来”的功能,它本质是 Android 媒体会话与前台服务的协同结果,任何环节缺失都会导致白屏、无声、无控件。最易被忽略的是离线打包时插件未生效,以及厂商权限未手动开启——这两点占线上问题的 70% 以上。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2323

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5023

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6090

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5618

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

803

5

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

2026.10.08

0

20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习