TV-Standby

In Android 11 ist der unaufmerksame Schlaf eine Energiesparfunktion. über die ein Zeitlimit für Inaktivität festgelegt werden kann, nachdem der Bildschirm ausgeschaltet wird, auch wenn wenn Fenster mit FLAG_KEEP_SCREEN_ON sind sichtbare Wakelocks FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK oder SCREEN_DIM_WAKE_LOCK was zurückgehalten wird. Wakelocks mit dem Level PARTIAL_WAKE_LOCK sind von dieser Funktion nicht betroffen. Kurz vor Ablauf des Zeitlimits kann eine Warnung angezeigt werden Nutzer, dass das Gerät in den Ruhemodus wechselt, wenn sie nicht mit dem Gerät interagieren.

In diesem Kontext bezieht sich die Nutzeraktivität auf alles, was einen Aufruf an PowerManager#userActivity (ohne das USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS-Zeichen gekennzeichnet), einschließlich, aber nicht beschränkt auf:

  • Mit dem Touchscreen interagieren
  • Durch Drücken einer physischen Taste
  • Eingabeereignisse von externem Zubehör (z. B. angeschlossene Tastatur, Bluetooth-Fernbedienung, IR-Fernbedienung)
  • Sprachinteraktion
  • Empfang bestimmter HDMI-CEC-Nachrichten wie One Touch Play
  • Neue Streamsitzung starten

Personalisierung

Wenn die Funktion aktiviert ist, wird auf dem Gerät nach einer bestimmten Zeit der Nutzerinaktivität eine Warnung angezeigt. Wenn Sie nichts tun, wird das Display ausgeschaltet. Sie können die Funktion mithilfe dieser Konfigurationsoptionen anpassen.

Zeitlimit konfigurieren

Aktualisieren Sie zum Konfigurieren des Zeitlimits das folgende Element in frameworks/base/core/res/res/values/config.xml:

  • config_attentiveTimeout
    • Gibt die Standardzeit in Millisekunden an, nach der der Bildschirm nach der Nutzerinaktivität ausgeschaltet wird (auch wenn Bildschirm-Wakelocks aktiviert sind).
    • Wird zum Build-Zeitpunkt festgelegt.
    • Wenn der Wert zwischen 0 und config_minimumScreenOffTimeout liegt, Das Zeitlimit wird auf config_minimumScreenOffTimeout gestellt, um zu verhindern, dass das Gerät schaltet seinen Bildschirm kurz nach dem Aufwachen aus.
    • Standardeinstellung: -1, wodurch diese Funktion deaktiviert wird.

Standardzeitlimit überschreiben

Wenn Sie die standardmäßige Zeitüberschreitungseinstellung überschreiben möchten, aktualisieren Sie das folgende Element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Wenn festgelegt, wird das Standardzeitlimit für den inaktiven Ruhemodus überschrieben, das mit config_attentiveTimeout festgelegt wurde.
    • Kann zur Laufzeit festgelegt werden.

Dauer bis zur Warnung konfigurieren

Aktualisieren Sie zum Konfigurieren der Dauer das folgende Element in frameworks/base/core/res/res/values/config.xml:

  • config_attentiveWarningDuration
    • Gibt an, wie lange eine Warnung angezeigt wird, bevor das Display nach längerer Inaktivität des Nutzers ausgeschaltet wird.
    • Der Wert sollte deutlich unter dem festgelegten Zeitlimit für den Ruhemodus bei fehlender Aufmerksamkeit liegen, da sonst das Warndialogfeld ständig angezeigt wird und nicht geschlossen werden kann.
    • Standard: 30000 (30 Sek.)

Zeige die Timeout-Einstellungen in den TV-Einstellungen an

Aktualisieren Sie zum Anzeigen der Zeitlimiteinstellungen das folgende Element in packages/apps/TvSettings/Settings/res/values/config.xml:

  • config_show_standby_timeout
    • Gibt an, ob eine Einstellung angezeigt werden soll, mit der das Display während der Medienwiedergabe ausgeschaltet werden kann.
    • Standardeinstellung: false.

Ressourcen für die Warnungs-UI

  • Das Layout des Warndialogfelds wird in frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml definiert.
  • Die folgenden Strings für den Dialog sind in frameworks/base/packages/SystemUI/res/values/strings.xml und frameworks/base/packages/SystemUI/res-product/values/strings.xml definiert.
    • inattentive_sleep_warning_title
    • inattentive_sleep_warning_message

Die Buildzeitkonfigurationen und -ressourcen können durch Ressourcen-Overlays geändert werden.

Implementierung

Aktivieren Sie die Funktion mit dem folgenden Befehl:

  1. Überschreibe die Standardeinstellung config_attentiveTimeout.
  2. Wenn Sie die AOSP-TvSettings verwenden:
    • Deaktivieren Sie die Funktion in den Einstellungen, indem Sie config_show_standby_timeout wird überschrieben.
    • Eigene Einstellungen implementieren mit denen Settings.Secure.ATTENTIVE_TIMEOUT festgelegt wurde.

Zertifizierungsstufe

Die CTS-Tests für diese Funktion finden cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java

Beispiele und Quelle

  • frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java enthält die Standardimplementierung der Warn-UI.
  • packages/apps/TvSettings zeigt ein Beispiel dafür, wie die Funktion in Einstellungen.

Beispiel für einen manuellen Testlauf

  1. Achten Sie darauf, dass stay_on_while_plugged_in Die Entwicklereinstellung ist deaktiviert, wenn der HAL des Geräts meldet, dass das Gerät über (battery_present hat den Wert true), da dies den Akku wird das Display nicht ausgeschaltet.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Legen Sie ein Zeitlimit für den unaufmerksamen Ruhemodus fest, das einige Sekunden länger als die Dauer des Dialogfelds mit der Warnung ist.
    adb shell settings put secure attentive_timeout 32000
  3. Starte die Wiedergabe eines Videos, um einen Display-Wakelock zu aktivieren.
  4. Überprüfen Sie, ob die Warnung für den Ruhemodus nach einigen Sekunden angezeigt wird.
  5. Prüfen Sie, ob das Display nach Ablauf des festgelegten Zeitlimits ausgeschaltet wird.