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 budzenia o poziomie PARTIAL_WAKE_LOCK
.
Krótko przed upływem limitu czasu może zostać wyświetlony komunikat z ostrzeżeniem, że jeśli użytkownik nie będzie korzystać z urządzenia, przejdzie ono w stan uśpienia.
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,
- zdarzenia wejściowe z zewnętrznego urządzenia peryferyjnego (np. podłączonej klawiatury, pilota Bluetooth lub pilota podczerwieni);
- 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 żadnego działania, ekran się wyłączy. Możesz dostosować tę funkcję, korzystając z tych opcji konfiguracji.
Konfigurowanie limitu czasu
Aby skonfigurować limit czasu, zaktualizuj w pliku 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).
- ustawiane w czasie kompilacji,
- Jeśli wartość mieści się w przedziale od
0
doconfig_minimumScreenOffTimeout
, czas oczekiwania jest ustawiony naconfig_minimumScreenOffTimeout
, aby urządzenie nie wyłączało ekranu zaraz 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 wykonywania.
Konfigurowanie czasu trwania, po którym pojawia się ostrzeżenie
Aby skonfigurować czas trwania, zaktualizuj w pliku frameworks/base/core/res/res/values/config.xml
ten element:
config_attentiveWarningDuration
- Czas wyświetlania komunikatu ostrzegawczego przed wyłączeniem ekranu po dłuższej nieaktywności użytkownika.
- 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 podczas odtwarzania multimediów ma być wyświetlany element ustawień umożliwiający wyłączenie ekranu.
- Domyślnie:
false
.
Materiały dotyczące interfejsu ostrzeżenia
- Układ okna z ostrzeżeniem jest zdefiniowany w pliku
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
. - Te ciągi tekstowe dialogu są zdefiniowane w plikach
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 używasz AOSP:
TvSettings
- Wyłącz 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 ostrzeżenia.packages/apps/TvSettings
zawiera przykład sposobu wyświetlania funkcji w ustawieniach.
Przykład testu ręcznego
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łączanie 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ć ekran).
- 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.