En Android 11, el modo de suspensión pasiva es una función de ahorro de energía.
que permite establecer un tiempo de espera de inactividad del usuario, tras el cual se apaga la pantalla, incluso
si las ventanas con FLAG_KEEP_SCREEN_ON
visibles o bloqueos de activación de nivel
FULL_WAKE_LOCK
:
SCREEN_BRIGHT_WAKE_LOCK
o
SCREEN_DIM_WAKE_LOCK
en la nube.
Los bloqueos de activación con nivel PARTIAL_WAKE_LOCK
no se ven afectados por esta función.
Poco antes de que venza el tiempo de espera, se puede mostrar un mensaje que le advierte al usuario que el dispositivo entrará en modo de suspensión si no interactúa con él.
En este contexto, la actividad del usuario se refiere a cualquier cosa que active una llamada a
PowerManager#userActivity
(sin el USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
marca), incluidos, sin limitaciones, los siguientes:
- Cómo interactuar con la pantalla táctil
- Presionar un botón físico
- Eventos de entrada de un accesorio externo (por ejemplo, un teclado conectado, un control remoto Bluetooth o un control remoto IR)
- Interacción de voz
- Recibir ciertos mensajes HDMI CEC, como One Touch Play
- Cómo iniciar una nueva sesión de transmisión
Personalización
Si la función está habilitada, el dispositivo muestra una advertencia en pantalla después de un tiempo determinado de inactividad del usuario. Si no se realiza ninguna acción, la pantalla se apagará. Puedes personalizar la función con estas opciones de configuración.
Configura el tiempo de espera
Para configurar el tiempo de espera, actualiza el siguiente elemento en frameworks/base/core/res/res/values/config.xml
:
config_attentiveTimeout
- Especifica el tiempo predeterminado en milisegundos de inactividad del usuario después del cual se apaga la pantalla (incluso si hay bloqueos de activación de la pantalla).
- Se establece en el tiempo de compilación.
- Si el valor está entre
0
yconfig_minimumScreenOffTimeout
, se establece el tiempo de espera enconfig_minimumScreenOffTimeout
para evitar que el dispositivo apaga la pantalla poco después de despertarse. - Valor predeterminado:
-1
, que inhabilita esta función.
Anular el tiempo de espera predeterminado
Para anular el parámetro de configuración de tiempo de espera predeterminado, actualiza el siguiente elemento.
Settings.Secure.ATTENTIVE_TIMEOUT
- Si está establecido, anula el tiempo de espera de suspensión inatenta predeterminado que establece
config_attentiveTimeout
. - Se puede configurar en el tiempo de ejecución.
Configura la duración para que aparezca la advertencia
Para configurar la duración, actualiza el siguiente elemento en frameworks/base/core/res/res/values/config.xml
:
config_attentiveWarningDuration
- Es el tiempo durante el cual se muestra un mensaje de advertencia al usuario antes de que se apague la pantalla después de un período prolongado de inactividad.
- El valor debe ser muy inferior al tiempo de espera de suspensión inatenta establecido. De lo contrario, el diálogo de advertencia se mostrará constantemente y no se podrá descartar.
- Valor predeterminado:
30000
(30 s).
Muestra las preferencias de tiempo de espera en TvSettings
Para mostrar las preferencias de tiempo de espera, actualiza el siguiente elemento en
packages/apps/TvSettings/Settings/res/values/config.xml
config_show_standby_timeout
- Indica si se debe mostrar un elemento de preferencia para permitir que se apague la pantalla durante la reproducción de contenido multimedia.
- Valor predeterminado:
false
.
Recursos para la IU de advertencia
- El diseño del cuadro de diálogo de advertencia se define en
frameworks/base/packages/SystemUI/res/layout/inattentive_sleep_warning.xml
- Las siguientes cadenas para el diálogo se definen en
frameworks/base/packages/SystemUI/res/values/strings.xml
yframeworks/base/packages/SystemUI/res-product/values/strings.xml
. inattentive_sleep_warning_title
inattentive_sleep_warning_message
Las superposiciones de recursos pueden cambiar los recursos y la configuración del tiempo de compilación.
Implementación
Habilita la función con lo siguiente.
- Anula el
config_attentiveTimeout
predeterminado. - Si usas
TvSettings
de AOSP, haz lo siguiente: - Para inhabilitar la función en la configuración, haz lo siguiente:
que anula
config_show_standby_timeout
. - Implementa tu propia configuración que establezca
Settings.Secure.ATTENTIVE_TIMEOUT
.
Validación
Las pruebas del CTS para la función se encuentran en
cts/hostsidetests/os/src/android/os/cts/InattentiveSleepTests.java
Ejemplos y fuente
frameworks/base/packages/SystemUI/src/com/android/systemui/power/InattentiveSleepWarningView.java
contiene la implementación predeterminada de la IU de advertencia.packages/apps/TvSettings
proporciona un ejemplo de cómo exponer la función en la configuración.
Ejemplo de caso de prueba manual
Asegúrate de que
stay_on_while_plugged_in
el parámetro de configuración del desarrollador estará desactivado si la HAL de estado del dispositivo informa que el dispositivo tiene (battery_present
estrue
), ya que esto podría impedir que función de apagado de la pantalla.
adb shell settings put global stay_on_while_plugged_in 0
- Establece un tiempo de espera de suspensión pasiva para que sea unos segundos más que la duración del diálogo de advertencia.
adb shell settings put secure attentive_timeout 32000
- Comienza a reproducir un video (para adquirir un bloqueo de activación de pantalla).
- Verifica que el cuadro de diálogo de advertencia de sueño aparezca después de unos segundos.
- Verifica que la pantalla se apague después de que venza el tiempo de espera establecido.