在Android 11中,不專心睡眠是一項節能功能,該功能允許設置用戶不活動超時,此後設備進入睡眠狀態(即使保持了喚醒鎖)。超時即將到期之前,會顯示一條消息,警告用戶如果設備不與設備交互,則設備將進入睡眠狀態。
在這種情況下,用戶活動是指觸發對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
。
警告UI的資源
- 警告對話框的佈局在
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
包含默認的警告UI實施。-
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
- 開始播放視頻(獲取喚醒鎖)。
- 驗證幾秒鐘後出現睡眠警告對話框。
- 設置超時後,驗證設備是否進入睡眠狀態。