In Android 11 ist der Inaktivmodus eine Energiesparfunktion, mit der ein Zeitlimit für die Inaktivität des Nutzers festgelegt werden kann, nach dem der Bildschirm ausgeschaltet wird, auch wenn Fenster mit FLAG_KEEP_SCREEN_ON
sichtbar sind oder Wakelocks der Ebenen FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
oder SCREEN_DIM_WAKE_LOCK
aktiv sind.
Wakelocks mit dem Level PARTIAL_WAKE_LOCK
sind von dieser Funktion nicht betroffen.
Kurz vor Ablauf der Zeitüberschreitung 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 „Nutzeraktivität“ auf alles, was einen Aufruf von PowerManager#userActivity
(ohne das Flag USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
) auslöst. Dazu gehören unter anderem:
- Mit dem Touchscreen interagieren
- Durch Drücken einer physischen Taste
- Ereignisse von externem Zubehör eingeben (z. B. verbundene Tastatur, Bluetooth-Fernbedienung oder Infrarot-Fernbedienung)
- Sprachinteraktion
- Empfang bestimmter HDMI-CEC-Nachrichten, z. B. „One Touch Play“
- Neue Übertragung 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 das folgende Element in frameworks/base/core/res/res/values/config.xml
, um das Zeitlimit zu konfigurieren:
config_attentiveTimeout
- Gibt die Standardzeit in Millisekunden an, nach der der Bildschirm ausgeschaltet wird, wenn der Nutzer inaktiv ist, auch wenn Wakelocks für den Bildschirm aktiviert sind.
- Wird zum Zeitpunkt der Erstellung festgelegt.
- Wenn der Wert zwischen
0
undconfig_minimumScreenOffTimeout
liegt, wird die Zeitüberschreitung aufconfig_minimumScreenOffTimeout
festgelegt, damit das Gerät den Bildschirm nicht kurz nach dem Aufwachen ausschaltet. - Standardeinstellung:
-1
, wodurch diese Funktion deaktiviert wird.
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 den unaufmerksamen Ruhemodus. - Kann zur Laufzeit festgelegt werden.
Dauer bis zur Warnung konfigurieren
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 Warnung angezeigt werden soll, 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.)
Zeitlimiteinstellungen in den TV-Einstellungen anzeigen
Wenn Sie die Zeitüberschreitungseinstellungen anzeigen lassen möchten, aktualisieren Sie das folgende Element in packages/apps/TvSettings/Settings/res/values/config.xml
:
config_show_standby_timeout
- Gibt an, ob ein Einstellungselement angezeigt werden soll, mit dem das Display während der Medienwiedergabe ausgeschaltet werden kann.
- Standard:
false
.
Ressourcen für die Warnungs-UI
- Das Layout des Dialogfelds „Warnung“ 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 den folgenden Schritten.
- Überschreiben Sie den Standardwert
config_attentiveTimeout
. - Bei Verwendung des AOSP-
TvSettings
: - Deaktivieren Sie die Funktion in den Einstellungen, indem Sie
config_show_standby_timeout
überschreiben. - Implementieren Sie eigene Einstellungen, die
Settings.Secure.ATTENTIVE_TIMEOUT
festlegen.
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 UI-Standardimplementierung mit Warnungen.packages/apps/TvSettings
zeigt ein Beispiel dafür, wie die Funktion in den Einstellungen angezeigt wird.
Beispiel für einen manuellen Testfall
Die Entwicklereinstellung
stay_on_while_plugged_in
muss deaktiviert sein, wenn die HAL für den Gerätestatus meldet, dass das Gerät einen Akku hat (battery_present
isttrue
), da die Funktion sonst möglicherweise nicht das Display ausschaltet.
adb shell settings put global stay_on_while_plugged_in 0
- Legen Sie für den Inaktivitäts-Ruhemodus ein Zeitlimit fest, das einige Sekunden länger ist als die Dauer des Warndialogfelds.
adb shell settings put secure attentive_timeout 32000
- Starten Sie die Wiedergabe eines Videos, um den Bildschirm zu aktivieren.
- Prüfen Sie, ob nach einigen Sekunden das Dialogfeld mit der Ruhemoduswarnung angezeigt wird.
- Vergewissere dich, dass sich der Bildschirm nach Ablauf des eingestellten Zeitlimits ausschaltet.