在 Android 11 中,無意識休眠是一種省電功能,可讓您設定使用者閒置逾時時間,系統會在該時間過後關閉螢幕,即使顯示含有 FLAG_KEEP_SCREEN_ON
的視窗,或已保留 FULL_WAKE_LOCK
、SCREEN_BRIGHT_WAKE_LOCK
或 SCREEN_DIM_WAKE_LOCK
等級的 Wake Lock 也一樣。等級為 PARTIAL_WAKE_LOCK
的喚醒鎖定功能不會受到這項功能的影響。在逾時期限到期前不久,系統可以顯示訊息,提醒使用者如果未與裝置互動,裝置將進入休眠狀態。
在此情況下,使用者活動是指會觸發對 PowerManager#userActivity
的呼叫 (不含 USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
標記) 的任何活動,包括但不限於:
- 與觸控螢幕互動
- 按下實體按鈕
- 外部配件的輸入事件 (例如已連線的鍵盤、藍牙遙控器、紅外線遙控器)
- 語音互動
- 接收特定 HDMI CEC 訊息,例如 One Touch Play
- 開始新的投放工作階段
自訂
如果啟用這項功能,裝置會在使用者閒置一段指定時間後,顯示螢幕警告。如果沒有採取任何行動,螢幕就會關閉。您可以使用這些設定選項自訂這項功能。
設定逾時時間
如要設定逾時值,請在 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
(30 秒)。
在 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
- 開始播放影片 (以取得螢幕喚醒鎖定)。
- 確認睡眠警告對話方塊在幾秒後顯示。
- 確認螢幕在設定的逾時時間到期後關閉。