安卓设置亮度的时候,系统会在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"/>
相关推荐
迪康Defender3 分钟前
PHP 高危漏洞应急分析:从风险原理到端点侧纵深防护
运维·开发语言·安全·自动化·php·运维开发·远程工作
卓豪终端管理5 分钟前
【无标题】
java·服务器·前端
2601_966949659 分钟前
为什么不应该把 QuantDash API Key 直接写进公开代码仓库?从 Git 提交历史理解凭证泄露风险
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
智_永无止境11 分钟前
又找到一个纯Java的OCR项目,识别的格式还挺多
java·开发语言·ocr
小灰灰搞电子13 分钟前
Rust+Slint 实现动态流光边框源码分享
开发语言·前端·rust·流光边框
学编程就要猛17 分钟前
MCP(Model Context Protocol)
java·springai
用户0723670666027 分钟前
Apollo 配置热更新落地:让 Spring Boot @ConfigurationProperties Bean 不重启即时生效
java
包小黑28 分钟前
Python 转 EXE (实用工具)
开发语言·python
2601_9707038333 分钟前
中国除湿机与湿度控制行业研究报告
java·大数据·人工智能
我命由我1234542 分钟前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee