電視待機

在 Android 11 中,非專心睡眠是一項省電功能,允許設置用戶不活動超時,然後屏幕關閉,即使具有FLAG_KEEP_SCREEN_ON的窗口可見或FULL_WAKE_LOCKSCREEN_BRIGHT_WAKE_LOCKSCREEN_DIM_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
    • 指定用戶不活動的默認時間(以毫秒為單位),之後屏幕關閉(即使屏幕喚醒鎖已到位)。
    • 在構建時設置。
    • 如果該值介於0config_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.xmlframeworks/base/packages/SystemUI/res-product/values/strings.xml中定義。
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

構建時配置和資源可以通過資源覆蓋進行更改。

執行

使用以下功能啟用該功能。

  1. 覆蓋默認的config_attentiveTimeout
  2. 如果使用 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提供瞭如何在設置中公開該功能的示​​例。

手動測試用例示例

  1. 如果設備的運行狀況 HAL 報告設備有電池( battery_presenttrue ),請確保stay_on_while_plugged_in開發人員設置已關閉,因為這可能會阻止該功能關閉屏幕。
    adb shell settings put global stay_on_while_plugged_in 0

  2. 將疏忽睡眠超時設置為比警告對話持續時間多幾秒鐘。
    adb shell settings put secure attentive_timeout 32000
  3. 開始播放視頻(以獲取屏幕喚醒鎖)。
  4. 確認幾秒鐘後出現睡眠警告對話框。
  5. 驗證設置的超時時間到期後屏幕是否關閉。