En Android 11, la suspensión por falta de atención es una función de ahorro de energía que permite configurar un tiempo de espera de inactividad del usuario después del cual la pantalla se apaga, incluso si las ventanas con FLAG_KEEP_SCREEN_ON
están visibles o se mantienen los wakelocks de nivel FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
o SCREEN_DIM_WAKE_LOCK
. Wakelocks con nivel PARTIAL_WAKE_LOCK
no se ven afectados por esta característica. Poco antes de que expire el tiempo de espera, se puede mostrar un mensaje que advierte al usuario que el dispositivo entrará en suspensión si no interactúa con el dispositivo.
En este contexto, la actividad del usuario se refiere a todo lo que desencadena una llamada a PowerManager#userActivity
(sin el indicador USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
), incluidos, entre otros, los siguientes:
- Interactuando con la pantalla táctil
- Presionando un botón físico
- Entrada de eventos desde un accesorio externo (por ejemplo, teclado conectado, control remoto bluetooth, control remoto IR)
- Interacción de voz
- Recepción de ciertos mensajes HDMI CEC, como One Touch Play
- Iniciar una nueva sesión de reparto
personalización
Si la función está habilitada, el dispositivo muestra una advertencia en pantalla después de un tiempo específico de inactividad del usuario. Si no se realiza ninguna acción, la pantalla se apaga. Puede personalizar la función utilizando estas opciones de configuración.
Configuración del tiempo de espera
Para configurar el tiempo de espera, actualice 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 la pantalla se apaga (incluso si los bloqueos de pantalla están activados).
- Establecer en el momento de la construcción.
- Si el valor está entre
0
yconfig_minimumScreenOffTimeout
, el tiempo de espera se establece enconfig_minimumScreenOffTimeout
para evitar que el dispositivo apague la pantalla poco después de activarse. - Predeterminado:
-1
, que deshabilita esta función.
Anular el tiempo de espera predeterminado
Para anular la configuración de tiempo de espera predeterminada, actualice el siguiente elemento.
-
Settings.Secure.ATTENTIVE_TIMEOUT
- Si se establece, anula el tiempo de espera de suspensión por falta de atención predeterminado establecido por
config_attentiveTimeout
. - Se puede configurar en tiempo de ejecución.
Configuración de la duración antes de que aparezca la advertencia
Para configurar la duración, actualice el siguiente elemento en frameworks/base/core/res/res/values/config.xml
:
-
config_attentiveWarningDuration
- Cuánto tiempo para mostrar un mensaje de advertencia al usuario antes de que la pantalla se apague después de una inactividad prolongada del usuario.
- El valor debe estar muy por debajo del tiempo de espera de suspensión inatento establecido; de lo contrario, el cuadro de diálogo de advertencia se muestra constantemente y no se puede descartar.
- Predeterminado:
30000
(30 s).
Mostrar las preferencias de tiempo de espera en TvSettings
Para mostrar las preferencias de tiempo de espera, actualice el siguiente elemento en packages/apps/TvSettings/Settings/res/values/config.xml
:
-
config_show_standby_timeout
- Ya sea para mostrar un elemento de preferencia para permitir apagar la pantalla durante la reproducción de medios.
- 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 cuadro de 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 configuraciones de tiempo de compilación y los recursos se pueden cambiar mediante superposiciones de recursos.
Implementación
Habilite la característica usando lo siguiente.
- Anule el
config_attentiveTimeout
predeterminado. - Si usa AOSP
TvSettings
: - Deshabilite la función en la configuración anulando
config_show_standby_timeout
. - Implemente su propia configuración que establezca
Settings.Secure.ATTENTIVE_TIMEOUT
.
Validación
Las pruebas de 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 de IU de advertencia predeterminada. -
packages/apps/TvSettings
proporciona un ejemplo de cómo exponer la función en la configuración.
Ejemplo de caso de prueba manual
Asegúrese de que la configuración de desarrollador
stay_on_while_plugged_in
esté desactivada si la HAL de estado del dispositivo informa que el dispositivo tiene batería (battery_present
estrue
), ya que esto podría evitar que la función apague la pantalla.
adb shell settings put global stay_on_while_plugged_in 0
- Establezca un tiempo de espera de suspensión por falta de atención para que sea unos segundos más que la duración del cuadro de diálogo de advertencia.
adb shell settings put secure attentive_timeout 32000
- Comience a reproducir un video (para adquirir un wakelock de pantalla).
- Verifique que el cuadro de diálogo de advertencia de suspensión aparezca después de unos segundos.
- Verifique que la pantalla se apague después de que expire el tiempo de espera establecido.