Android14 用户两次打断息屏操作后,屏幕将会在10分钟内无法熄灭并持续点亮(关闭Android13新增的dim功能)

96 阅读1分钟

UndimDetectorWakeLock持锁导致屏幕不灭问题处理SOP 问题描述 在Android T版本中,系统新增了SCREEN_BRIGHT_WAKE_LOCK(UndimDetectorWakeLock)机制。当设备处于低亮度(dim)状态时,用户两次打断屏幕熄灭操作就会触发系统保持屏幕常亮10分钟,此行为符合系统设计预期。

解决方案 如需关闭该功能,请按以下步骤修改源码:

  1. 修改源码 文件路径: frameworks/base/services/core/java/com/android/server/power/ScreenUndimDetector.java

修改内容: 将DEFAULT_KEEP_SCREEN_ON_ENABLED默认值由true改为false:

private static final boolean DEFAULT_KEEP_SCREEN_ON_ENABLED = false; // 原值为true

操作过程: 屏幕快熄灭时再点亮屏幕,连续操作X次后,发现屏幕不灭屏

android13以后引入UndimDetector机制:屏幕超时灭屏会经历两个过程:Bright->Dim,Dim->ScreenOff;在这中间只要有用户交互,屏幕都会变为Bright状态,而当检测到用户undim超过x次(可配置),会获取唤醒锁保持屏幕处于常亮状态,但不会改变系统的超时灭屏时间。

1、执行adb shell dumpsys power > power.txt, 出现问题时有UndimDetectorWakeLock 锁,此为android13 Google新增机制,属于正常现象。

Wake Locks: size=1 SCREEN_BRIGHT_WAKE_LOCK 'UndimDetectorWakeLock' ON_AFTER_RELEASE ACQ=-1m2s441ms (uid=1000 pid=1187) AI运行代码 cpp 1 2 2、配置undim次数 frameworks/base/services/core/java/com/android/server/power/ScreenUndimDetector.java

  • static final int DEFAULT_UNDIMS_REQUIRED = 2;
  • static final int DEFAULT_UNDIMS_REQUIRED = 5; AI运行代码 cpp 1 2 参数介绍

mKeepScreenOnEnabled(feature开关,默认开启) mKeepScreenOnForMillis(保持屏幕打开持续时间,默认10min) mUndimsRequired(允许用户undim的次数,默认2次) mMaxDurationBetweenUndimsMillis(两次undim间隔的最长时间,默认5min)