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 aktywacji o poziomie PARTIAL_WAKE_LOCK
.
Krótko przed upływem czasu oczekiwania może wyświetlić się komunikat z ostrzeżeniem
użytkownik, że urządzenie przejdzie w tryb uśpienia, jeśli nie będzie z nim korzystać.
W tym kontekście aktywność użytkownika odnosi się do wszystkiego, co wyzwala wywołanie
PowerManager#userActivity
(bez USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
flagę), w tym między innymi:
- 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 określonych komunikatów HDMI CEC, takich jak odtwarzanie za pomocą jednego dotknięcia.
- Rozpoczynam nową sesję przesyłania
Dostosowywanie
Jeśli ta funkcja jest włączona, na ekranie urządzenia wyświetla się ostrzeżenie po upływie określonego czasu braku aktywności użytkownika. Jeśli nie podejmiesz żadnego działania, ekran się wyłączy. Możesz dostosować tę funkcję za pomocą 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ą zastosowane blokady aktywacji ekranu).
- Ustaw w momencie kompilacji.
- Jeśli wartość mieści się w przedziale od
0
doconfig_minimumScreenOffTimeout
, czas oczekiwania jest ustawiany naconfig_minimumScreenOffTimeout
, aby urządzenie nie wyłączało 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 ustawione, zastępuje domyślny limit czasu nieświadomego uśpienia ustawiony przez
config_attentiveTimeout
- Można ustawić w czasie działania.
Skonfiguruj czas wyświetlania ostrzeżenia
Aby skonfigurować czas trwania, zaktualizuj w pliku frameworks/base/core/res/res/values/config.xml
ten element:
config_attentiveWarningDuration
- Po jakim czasie ma być wyświetlany komunikat z ostrzeżeniem, zanim ekran wyłączy się przez długi czas braku aktywności użytkowników.
- Wartość powinna być znacznie poniżej ustawionego czasu oczekiwania w przypadku braku uwagi. W przeciwnym razie pojawia się cały czas i nie można go zamknąć.
- Wartość domyślna:
30000
(30 s).
Pokaż preferencje czasu oczekiwania 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
.
Materiały dotyczące interfejsu ostrzeżenia
- Układ okna ostrzeżenia jest zdefiniowany w
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
- Poniższe 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 czasu kompilacji można zmieniać za pomocą nakładek zasobów.
Implementacja
Włącz tę funkcję za pomocą poniższych sposobów.
- Zastąp domyślną wartość
config_attentiveTimeout
. - Jeśli korzystasz z AOSP:
TvSettings
- Wyłącz funkcję w ustawieniach, zastępując ją
config_show_standby_timeout
. - Wdrażanie własnych ustawień
z wartością
Settings.Secure.ATTENTIVE_TIMEOUT
.
Weryfikacja
Trwają testy CTS tej funkcji
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 użytkownika ostrzeżenia.packages/apps/TvSettings
zawiera przykład sposobu wyświetlania funkcji w ustawieniach.
Przykład testu ręcznego
Jeśli funkcja HAL stanu urządzenia zgłasza, że urządzenie ma baterię (
battery_present
totrue
), upewnij się, że ustawienie dla deweloperówstay_on_while_plugged_in
jest wyłączone, 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
- Rozpocznij odtwarzanie filmu (aby uzyskać blokadę wybudzania ekranu).
- Sprawdź, czy po kilku sekundach wyświetli się okno dialogowe z ostrzeżeniem o uśpieniu.
- Sprawdź, czy ekran wyłącza się po upływie ustawionego czasu.