TV-Standby

In Android 11 ist der inaktive Ruhemodus eine Energiesparfunktion, mit der ein Zeitlimit für die Inaktivität des Nutzers festgelegt werden kann, nach dem sich das Display ausschaltet, auch wenn Fenster mit FLAG_KEEP_SCREEN_ON sichtbar sind oder Wakelocks der Stufe FULL_WAKE_LOCK, SCREEN_BRIGHT_WAKE_LOCK oder SCREEN_DIM_WAKE_LOCK gehalten werden. Wakelocks mit dem Level PARTIAL_WAKE_LOCK sind von dieser Funktion nicht betroffen. Kurz vor Ablauf des Zeitlimits kann eine Meldung angezeigt werden, die den Nutzer warnt, dass das Gerät in den Ruhemodus wechselt, wenn er nicht mit dem Gerät interagiert.

In diesem Zusammenhang bezieht sich die Nutzeraktivität auf alles, was einen Aufruf von PowerManager#userActivity (ohne das Flag USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS) auslöst, einschließlich, aber nicht beschränkt auf:

  • Mit dem Touchscreen interagieren
  • Physische Taste drücken
  • Eingabeereignisse von einem externen Zubehörgerät (z. B. angeschlossene Tastatur, Bluetooth-Fernbedienung, IR-Fernbedienung)
  • Sprachinteraktion
  • Bestimmte HDMI‑CEC-Nachrichten empfangen, z. B. „One Touch Play“
  • Neue Cast-Sitzung starten

Personalisierung

Wenn die Funktion aktiviert ist, wird auf dem Gerät nach einer bestimmten Zeit der Inaktivität des Nutzers eine Warnung auf dem Bildschirm angezeigt. Wenn keine Aktion erfolgt, schaltet sich das Display aus. Sie können die Funktion mit den folgenden Konfigurationsoptionen anpassen.

Zeitlimit konfigurieren

Um das Zeitlimit zu konfigurieren, aktualisieren Sie das folgende Element in frameworks/base/core/res/res/values/config.xml:

  • config_attentiveTimeout
    • Gibt den Standardzeitraum in Millisekunden an, nach dem der Bildschirm ausgeschaltet wird, wenn der Nutzer inaktiv ist (auch wenn Screen-Wakelocks vorhanden sind).
    • Wird zur Build-Zeit festgelegt.
    • Wenn der Wert zwischen 0 und config_minimumScreenOffTimeout liegt, wird das Zeitlimit auf config_minimumScreenOffTimeout festgelegt, damit das Display des Geräts nicht kurz nach dem Aufwachen ausgeschaltet wird.
    • Standard: -1. Dadurch wird diese Funktion deaktiviert.

Standardzeitlimit überschreiben

Wenn Sie die Standardeinstellung für das Zeitlimit überschreiben möchten, aktualisieren Sie das folgende Element.

  • Settings.Secure.ATTENTIVE_TIMEOUT
    • Überschreibt das von config_attentiveTimeout festgelegte Standardzeitlimit für unaufmerksamen Schlaf.
    • Kann zur Laufzeit festgelegt werden.

Dauer konfigurieren, bevor eine Warnung angezeigt wird

Aktualisieren Sie das folgende Element in frameworks/base/core/res/res/values/config.xml, um die Dauer zu konfigurieren:

  • config_attentiveWarningDuration
    • Gibt an, wie lange eine Warnmeldung für den Nutzer angezeigt werden soll, bevor sich der Bildschirm nach längerer Inaktivität des Nutzers ausschaltet.
    • Der Wert sollte deutlich unter dem festgelegten Zeitlimit für unaufmerksamen Schlaf liegen, da sonst das Warndialogfeld ständig angezeigt wird und nicht geschlossen werden kann.
    • Standard: 30000 (30 Sekunden).

Zeitüberschreitungseinstellungen in TvSettings anzeigen

Aktualisieren Sie das folgende Element in packages/apps/TvSettings/Settings/res/values/config.xml, um die Einstellungen für das Zeitlimit anzuzeigen:

  • config_show_standby_timeout
    • Gibt an, ob ein Einstellungselement angezeigt werden soll, mit dem das Ausschalten des Displays während der Medienwiedergabe erlaubt wird.
    • Standard: false.

Ressourcen für die Warnungs-UI

  • Das Layout des Warnhinweisdialogfelds wird in frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml definiert.
  • Die folgenden Strings für den Dialog werden 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 Build-Time-Konfigurationen und ‑Ressourcen können durch Ressourcen-Overlays geändert werden.

Implementierung

Aktivieren Sie das Feature mit den folgenden Schritten.

  1. Überschreiben Sie den Standardwert config_attentiveTimeout.
  2. Wenn Sie das AOSP-TvSettings verwenden:
    • Deaktivieren Sie die Funktion in den Einstellungen, indem Sie config_show_standby_timeout überschreiben.
    • Implementieren Sie eigene Einstellungen, mit denen Settings.Secure.ATTENTIVE_TIMEOUT festgelegt wird.

Zertifizierungsstufe

Die CTS-Tests für die Funktion finden Sie unter 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 standardmäßige Implementierung der Warnungs-UI.
  • packages/apps/TvSettings enthält ein Beispiel dafür, wie die Funktion in den Einstellungen verfügbar gemacht wird.

Beispiel für einen manuellen Testlauf

  1. Achte darauf, dass die stay_on_while_plugged_in-Entwicklereinstellung deaktiviert ist, wenn das Health-HAL des Geräts meldet, dass das Gerät einen Akku hat (battery_present ist true), da dies verhindern kann, dass das Display durch die Funktion ausgeschaltet wird.
    adb shell settings put global stay_on_while_plugged_in 0

  2. Das Zeitlimit für unaufmerksamen Schlaf sollte einige Sekunden länger sein als die Dauer des Warnungsdialogfelds.
    adb shell settings put secure attentive_timeout 32000
  3. Starten Sie die Wiedergabe eines Videos, um einen Screen-Wakelock zu erhalten.
  4. Prüfen Sie, ob das Dialogfeld mit der Schlafwarnung nach einigen Sekunden angezeigt wird.
  5. Prüfen Sie, ob sich das Display nach Ablauf des eingestellten Zeitlimits ausschaltet.