W Androidzie 11 uśpienie bez uwagi to funkcja oszczędzania energii, która pozwala ustawić czas bezczynności użytkownika, po którym ekran się wyłącza, nawet jeśli widoczne są okna z FLAG_KEEP_SCREEN_ON
lub blokady uśpienia na poziomieFULL_WAKE_LOCK
,SCREEN_BRIGHT_WAKE_LOCK
lubSCREEN_DIM_WAKE_LOCK
.
Ta funkcja nie ma wpływu na blokady wybudzania na poziomie PARTIAL_WAKE_LOCK
.
Krótko przed upływem czasu oczekiwania może wyświetlić się komunikat z ostrzeżeniem, że urządzenie przejdzie w tryb uśpienia, jeśli nie będzie z nim korzystać.
W tym kontekście aktywność użytkownika oznacza wszystko, co powoduje wywołanie funkcji PowerManager#userActivity
(bez flagi USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
), w tym m.in.:
- Interakcja z ekranem dotykowym
- naciśnięcie przycisku fizycznego,
- Wprowadzanie zdarzeń z akcesorium zewnętrznego (np. podłączonej klawiatury, pilota Bluetooth, pilota na podczerwień)
- Interakcja głosowa
- Odbieranie niektórych komunikatów HDMI-CEC, takich jak One Touch Play
- Rozpoczynanie nowej sesji przesyłania
Dostosowywanie
Jeśli funkcja jest włączona, po określonym czasie braku aktywności użytkownika urządzenie wyświetla ostrzeżenie na ekranie. Jeśli nie podejmiesz żadnych działań, ekran się wyłączy. Możesz dostosować funkcję, korzystając z tych opcji konfiguracji.
Konfigurowanie limitu czasu
Aby skonfigurować czas oczekiwania, zaktualizuj w frameworks/base/core/res/res/values/config.xml
ten element:
config_attentiveTimeout
- Określa domyślny czas w milisekundach, po którym ekran wyłącza się w przypadku braku aktywności użytkownika (nawet jeśli są ustawione blokady aktywacji ekranu).
- Ustaw w czasie kompilacji.
- Jeśli wartość należy do zakresu od
0
doconfig_minimumScreenOffTimeout
, limit czasu jest ustawiony naconfig_minimumScreenOffTimeout
. Dzięki temu urządzenie nie wyłączy ekranu tuż po wybudzeniu. - Wartość domyślna:
-1
, która wyłącza tę funkcję.
Zastępowanie domyślnego limitu czasu
Aby zastąpić domyślne ustawienie limitu czasu, zaktualizuj ten element.
Settings.Secure.ATTENTIVE_TIMEOUT
- Jeśli jest ustawiony, zastępuje domyślny limit czasu nieaktywnego snu określony przez
config_attentiveTimeout
. - Może być ustawiany w czasie działania.
Konfigurowanie czasu trwania, po którym pojawia się ostrzeżenie
Aby skonfigurować czas trwania, zaktualizuj w frameworks/base/core/res/res/values/config.xml
ten element:
config_attentiveWarningDuration
- Czas wyświetlania użytkownikowi komunikatu z ostrzeżeniem przed wyłączeniem ekranu po dłuższej nieaktywności.
- Wartość powinna być znacznie niższa od ustawionego limitu czasu bezczynności, w przeciwnym razie okno z ostrzeżeniem będzie się wyświetlać stale i nie będzie można go zamknąć.
- Wartość domyślna:
30000
(30 s).
Wyświetlanie ustawień limitu czasu w ustawieniach TV
Aby wyświetlić ustawienia limitu czasu, zaktualizuj w pliku packages/apps/TvSettings/Settings/res/values/config.xml
ten element:
config_show_standby_timeout
- Określa, czy wyświetlać element preferencji umożliwiający wyłączenie ekranu podczas odtwarzania multimediów.
- Domyślnie:
false
.
Zasoby interfejsu ostrzegawczego
- Układ okna ostrzeżenia jest zdefiniowany w
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
. - Te ciągi znaków odpowiadające dialogowi w oknie są zdefiniowane w
frameworks/base/packages/SystemUI/res/values/strings.xml
iframeworks/base/packages/SystemUI/res-product/values/strings.xml
. inattentive_sleep_warning_title
inattentive_sleep_warning_message
Konfiguracje i zasoby w czasie kompilacji można zmieniać za pomocą nakładek zasobów.
Implementacja
Aby włączyć tę funkcję, wykonaj te czynności.
- Zastąp domyślną wartość
config_attentiveTimeout
. - Jeśli korzystasz z AOSP:
TvSettings
- Wyłącz tę funkcję w ustawieniach, zastępując
config_show_standby_timeout
. - Wprowadź własne ustawienia, które mają być używane w przypadku
Settings.Secure.ATTENTIVE_TIMEOUT
.
Weryfikacja
Testy CTS dotyczące tej funkcji znajdują się na stronie cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java
.
Przykłady i źródło
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
zawiera domyślną implementację interfejsu ostrzegawczego.packages/apps/TvSettings
zawiera przykład sposobu wyświetlania funkcji w ustawieniach.
Przykład ręcznego przypadku testowego
Upewnij się, że ustawienie dla deweloperów
stay_on_while_plugged_in
jest wyłączone, jeśli HAL stanu urządzenia informuje, że urządzenie ma baterię (battery_present
totrue
), ponieważ może to uniemożliwić funkcji wyłączenie ekranu.
adb shell settings put global stay_on_while_plugged_in 0
- Ustaw czas bezczynności w trybie uśpienia na kilka sekund dłuższy niż czas trwania okna z ostrzeżeniem.
adb shell settings put secure attentive_timeout 32000
- Zacznij odtwarzać film (aby włączyć blokadę ekranu).
- Sprawdź, czy po kilku sekundach pojawia się okno z ostrzeżeniem dotyczącym snu.
- Sprawdź, czy ekran wyłącza się po upływie ustawionego czasu.