電視待機

在 Android 11 中,無人看管睡眠模式是一項省電功能,可讓使用者設定閒置逾時時間,時間一到螢幕就會關閉,即使顯示含有 FLAG_KEEP_SCREEN_ON 的視窗,或持有 FULL_WAKE_LOCKSCREEN_BRIGHT_WAKE_LOCKSCREEN_DIM_WAKE_LOCK 層級的 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
    • 指定使用者閒置的預設時間長度 (以毫秒為單位),如果使用者在這段時間內沒有任何動作,系統就會關閉螢幕 (即使螢幕喚醒鎖定已就位)。
    • 在建構時間設定。
    • 如果值介於 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. 確認螢幕會在設定的逾時時間到期後關閉。