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
undconfig_minimumScreenOffTimeout
liegt, Das Zeitlimit wird aufconfig_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
undframeworks/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:
- Überschreibe die Standardeinstellung
config_attentiveTimeout
. - 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
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 Werttrue
), da dies den Akku wird das Display nicht ausgeschaltet.
adb shell settings put global stay_on_while_plugged_in 0
- 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
- Starte die Wiedergabe eines Videos, um einen Display-Wakelock zu aktivieren.
- Überprüfen Sie, ob die Warnung für den Ruhemodus nach einigen Sekunden angezeigt wird.
- Prüfen Sie, ob das Display nach Ablauf des festgelegten Zeitlimits ausgeschaltet wird.