在 Android 11 中,强制休眠是一种省电功能,可以在设备闲置超时时间过后关闭屏幕,即使显示设置为 FLAG_KEEP_SCREEN_ON
的窗口或持有 FULL_WAKE_LOCK
、SCREEN_BRIGHT_WAKE_LOCK
或 SCREEN_DIM_WAKE_LOCK
级别的唤醒锁也会关闭屏幕。PARTIAL_WAKE_LOCK
级的唤醒锁不受此功能的影响。在即将超过超时时间时,系统会显示一条警告消息,提示用户如果不与设备互动,设备会进入休眠状态。
在这种情况下,用户活动是指任何触发调用 PowerManager#userActivity
(不含 USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
标志)的行为,包括但不限于:
- 与触摸屏交互
- 按实体按钮
- 从外部配件(例如,连接的键盘、蓝牙遥控器、IR 遥控器)提供的输入事件
- 语音互动
- 接收某些 HDMI CEC 消息,例如一键式播放
- 开始新的投射会话
自定义
如果启用此功能,设备将在指定的设备闲置时间过后显示屏幕警告。如果不执行任何操作,屏幕将关闭。您可以使用以下配置选项来自定义该功能。
配置超时时间
如需配置超时时间,请更新 frameworks/base/core/res/res/values/config.xml
中的以下元素:
config_attentiveTimeout
- 以毫秒为单位指定设备默认闲置多久后会关闭屏幕(即使设置了屏幕唤醒锁)。
- 在构建时设置。
- 如果该值介于
0
和config_minimumScreenOffTimeout
之间,则超时时间设置为config_minimumScreenOffTimeout
,以防止设备在唤醒后立即关闭屏幕。 - 默认值:
-1
,表示停用此功能。
替换默认超时时间
要替换默认超时设置,请更新以下元素。
Settings.Secure.ATTENTIVE_TIMEOUT
- 如果设置,则会替换由
config_attentiveTimeout
设置的默认休眠休眠超时。 - 可在运行时设置。
配置经过多长时间后显示警告
如需配置持续时间,请更新 frameworks/base/core/res/res/values/config.xml
中的以下元素:
config_attentiveWarningDuration
- 在设备长时间处于闲置状态多长时间后,系统会向用户显示警告信息,提示用户屏幕即将关闭。
- 该值应远低于已设置的强制休眠超时时间,否则警告对话框会不断显示且无法关闭。
- 默认值:
30000
(30s).
在 TvSettings 中显示超时偏好设置
如需显示超时偏好设置,请更新 packages/apps/TvSettings/Settings/res/values/config.xml
中的以下元素:
config_show_standby_timeout
- 显示是否允许在媒体播放期间关闭屏幕。
- 默认值:
false
。
警告界面的资源
- 警告对话框的布局在
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
中定义。 - 该对话框的以下字符串是在
frameworks/base/packages/SystemUI/res/values/strings.xml
和frameworks/base/packages/SystemUI/res-product/values/strings.xml
中定义的。 inattentive_sleep_warning_title
inattentive_sleep_warning_message
构建时配置和资源可以通过资源叠加层更改。
实现
使用以下命令启用该功能。
- 替换默认的
config_attentiveTimeout
。 - 如果使用 AOSP
TvSettings
: - 替换
config_show_standby_timeout
以在设置中停用该功能。 - 实现您自己的设置
Settings.Secure.ATTENTIVE_TIMEOUT
的设置。
验证
相应功能的 CTS 测试位于 cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java
。
示例和来源
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
包含默认警告界面实现。packages/apps/TvSettings
提供了一个如何在设置中公开此功能的示例。
手动测试用例示例
确保设备的运行状况 HAL 报告设备电池电量正常(
battery_present
为true
)时关闭stay_on_while_plugged_in
开发者设置,否则可能会阻止该功能关闭屏幕。
adb shell settings put global stay_on_while_plugged_in 0
- 将强制休眠超时时间设置为比警告对话框持续时间多几秒钟。
adb shell settings put secure attentive_timeout 32000
- 开始播放视频(以获取屏幕唤醒锁)。
- 验证睡眠警告对话框是否会在几秒钟后显示。
- 验证屏幕是否会在设置的超时时间过后关闭。