安卓设置亮度的时候,系统会在100%与0%反复横跳

先放代码

复制代码
    private fun saveBrightness(
        resolver: ContentResolver,
        brightness: Int,
        Exception: (() -> Unit)? = null
    ) {
        try {
            Settings.System.putInt(
                resolver, Settings.System.SCREEN_BRIGHTNESS,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
            )
            val uri =
                Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS)

            Settings.System.putInt(
                resolver,
                Settings.System.SCREEN_BRIGHTNESS,
                brightness
            )
            resolver.notifyChange(uri, null)
        } catch (e: Exception) {
            Exception!!.invoke()
        }

    }

问题根源:先切手动模式、再写亮度,时序反了 → 系统自动亮度服务抢值,来回 0/100% 反复弹跳
原理:
SCREEN_BRIGHTNESS_MODE_AUTOMATIC=0(自动) / MANUAL=1(手动)

(1).自动模式 (0):ALS 光感 + DisplayManagerService 持续轮询、自动刷新SCREEN_BRIGHTNESS,不停覆写数值;

(2).手动模式 (1):系统停止光感自动刷新,写入的值才锁死生效。如果先写 MODE_MANUAL,紧接着 putInt 亮度,部分 Android 系统定制 ROM (原厂平板 / 工控) 有系统异步刷新 bug:

切手动瞬间,自动亮度服务还在后台最后一次回写旧值 → 你的代码写入新值 ↔ 系统自动回写旧值 互相覆盖、来回拉锯 → 亮度 0/100 反复跳变

2 种方案,优先方案 1

复制代码
方案 1:先设亮度 → 再切手动(根治跳动,推荐)
kotlin
private fun saveBrightness(
    resolver: ContentResolver,
    brightness: Int,
    onError: (() -> Unit)? = null
) {
    try {
        // 顺序关键:先写入亮度,再切手动锁定
        Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, brightness)
        // 写完亮度再切换手动模式,阻断自动服务覆写
        Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS_MODE,
            Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
    } catch (e: Exception) {
        onError?.invoke()
    }
}

方案 2:切模式后短暂延时再写(适配顽固定制系统)
kotlin
// 切MANUAL后postDelay 30~50ms再put亮度,避开系统异步刷新窗口期
Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
handler.postDelayed({
    Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, brightness)
}, 50)

补充关键细节
权限必须齐全
AndroidManifest.xml添加:

复制代码
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
相关推荐
Bs_MoneyMagnet3 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
Mr YiRan6 小时前
网络请求API监控与网络切换埋点
android·网络
野生技术架构师8 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
香吧香9 小时前
java服务异常日志只打印异常类型,没有堆栈定位分析
java·jvm·异常
qq_2518364579 小时前
AI 疾病自查功能SpringbootAI项目实战 · 技术实现文档
java·ai·ai编程
逆境不可逃10 小时前
Pi Agent 学习笔记:对话太长以后,如何压缩上下文
java
MetaLite10 小时前
JDK 8~26 核心特性一览:从 Stream 到 Scoped Values
java
美狐美颜sdk10 小时前
直播APP开发技术栈详解:视频美颜SDK、人脸识别与实时渲染
android·人工智能·音视频·美颜sdk·直播美颜sdk
wno70410 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
君顾110 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房