uni-app屏幕亮度调节 uni-app如何设置和获取屏幕亮度

老婷姑娘_8764

老婷姑娘_8764

2026-03-28

1008人浏览

原创

uni.setscreenbrightness 和 uni.getscreenbrightness 可用但受限:微信小程序 ios 端 get 静默失败、set 可能被拦截;鸿蒙不支持;安卓 app 需 manifest 声明 write_settings 权限并动态申请;两者均为异步,亮度范围 0~1,需用 promise/await;安全还原须在全屏退出回调中 get+set,而非 onhide;setkeepscreenon 仅防息屏,不控亮度。

uni-app屏幕亮度调节 uni-app如何设置和获取屏幕亮度

uni.setScreenBrightness 和 uni.getScreenBrightness 能不能直接用

能,但必须注意平台限制和异步特性——这两个 API 在微信小程序(安卓)、App(Android/iOS)、H5 均支持,但在微信小程序 iOS 端 uni.getScreenBrightness 会静默失败(不报错也不返回值),uni.setScreenBrightness 则可能被系统拦截;鸿蒙暂未开放系统级亮度控制权限,调用无效。

  • 安卓 App 必须在 manifest.json 中声明 "android.permission.WRITE_SETTINGS" 权限(非 WAKE_LOCK),否则设置亮度无反应且无提示
  • uni.getScreenBrightness 是纯异步接口,不能直接写 let b = uni.getScreenBrightness(...),必须用 Promise 或 async/await 封装
  • 亮度值范围固定为 0~1,传 1.2 或 -0.1 会被截断,但不会报错,容易误以为“设成功了”

怎么安全地“先记亮度、再调高、退出时还原”

这是扫码、投屏、视频全屏等场景的刚需逻辑,核心是避免用户退出后屏幕仍过亮或过暗。关键不在“设”,而在“记”和“时机”。

  • 别用 uni.setStorageSync 存原始 res.value —— 某些低端安卓机返回值可能是 undefined 或 NaN,应 fallback 到 0.5 并显式判断:const saved = Number(res.value) || 0.5
  • 还原动作不能放在 onHide,而要放在全屏退出回调或 video 的 @fullscreenchange 事件里(微信小程序中 onHide 触发太晚,系统已锁屏)
  • 如果用户手动滑动系统亮度条修改了值,你的 setScreenBrightness 不会覆盖该操作,但下次调用 getScreenBrightness 会读到新值——所以“还原”本质是读取并重设,不是回滚

为什么 setKeepScreenOn 不能替代 setScreenBrightness

uni.setKeepScreenOn 控制的是“是否息屏”,和“亮度高低”完全无关。它只是阻止系统自动锁屏,屏幕依然可以是 0.1 的暗度,甚至被用户手动调成 0。

  • 两者权限不同:setKeepScreenOn 只需 WAKE_LOCK,setScreenBrightness 在 Android 需 WRITE_SETTINGS(运行时动态申请,iOS/HarmonyOS 不支持)
  • 常见错误:把 keepScreenOn: true 当作“让屏幕变亮”,结果用户看到的是黑乎乎的常亮屏
  • 组合使用才合理:比如播放页同时调用 uni.setKeepScreenOn({keepScreenOn: true}) 和 uni.setScreenBrightness({value: 0.9})

安卓上 video 全屏后亮度异常,退出就卡死最低亮度

这是安卓微信小程序特有 bug:全屏 video 手势调低亮度 → 退出全屏 → 整个小程序所有页面亮度锁定在最低,且系统亮度条灰掉。根本原因是微信未重置系统亮度状态。

  • 唯一有效解法:监听 video 的 @fullscreenchange="onFullscreenChange",当 detail.fullscreen === false 时,立刻执行一次 uni.getScreenBrightness + uni.setScreenBrightness 组合(哪怕只是设回当前值)
  • 不要依赖 onUnload 或 onHide,它们在微信里触发不稳定,尤其从全屏退出时经常不执行
  • 实测发现,即使只调一次 setScreenBrightness({value: 0.5}) 也能“唤醒”系统亮度控制,无需先 get —— 但为了兼容性,还是建议先 get 再 set
实际开发中最容易漏掉的,是 Android 上 WRITE_SETTINGS 权限没动态申请——打包时加了权限,但没在 JS 里调 uni.authorize({scope: 'scope.writeSettings'}),结果 API 静默失效,连 console 都不报错。
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

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

下载

相关标签:

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

相关专题

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

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

2023.08.11

2543

5

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

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

2023.10.09

5503

6

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

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

2024.03.19

6530

13

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

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

2024.03.22

6158

10

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

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

2024.05.22

883

5

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

60

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

20

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

20

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

20

15

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.8万人学习