在 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
標誌),包括但不限於:
- 與觸控螢幕交互
- 按實體按鈕
- 來自外部配件的輸入事件(例如,連接的鍵盤、藍牙遙控器、紅外線遙控器)
- 語音交互
- 接收某些 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
(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
- 開始播放影片(以取得螢幕喚醒鎖定)。
- 驗證幾秒鐘後是否出現睡眠警告對話框。
- 驗證畫面在設定的逾時時間到期後是否關閉。