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
0undconfig_minimumScreenOffTimeoutliegt, wird das Zeitlimit aufconfig_minimumScreenOffTimeoutfestgelegt, 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_attentiveTimeoutfestgelegte 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.xmldefiniert. - Die folgenden Strings für den Dialog werden in
frameworks/base/packages/SystemUI/res/values/strings.xmlundframeworks/base/packages/SystemUI/res-product/values/strings.xmldefiniert. inattentive_sleep_warning_titleinattentive_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.
- Überschreiben Sie den Standardwert
config_attentiveTimeout. - Wenn Sie das AOSP-
TvSettingsverwenden: - Deaktivieren Sie die Funktion in den Einstellungen, indem Sie
config_show_standby_timeoutüberschreiben. - Implementieren Sie eigene Einstellungen, mit denen
Settings.Secure.ATTENTIVE_TIMEOUTfestgelegt 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.javaenthält die standardmäßige Implementierung der Warnungs-UI.packages/apps/TvSettingsenthält ein Beispiel dafür, wie die Funktion in den Einstellungen verfügbar gemacht wird.
Beispiel für einen manuellen Testlauf
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_presentisttrue), da dies verhindern kann, dass das Display durch die Funktion ausgeschaltet wird.
adb shell settings put global stay_on_while_plugged_in 0- 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 - Starten Sie die Wiedergabe eines Videos, um einen Screen-Wakelock zu erhalten.
- Prüfen Sie, ob das Dialogfeld mit der Schlafwarnung nach einigen Sekunden angezeigt wird.
- Prüfen Sie, ob sich das Display nach Ablauf des eingestellten Zeitlimits ausschaltet.