En Android 11, el sueño sin atención es una función de ahorro de energía que permite establecer 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
son visibles o se mantienen wakelocks de nivel FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
o SCREEN_DIM_WAKE_LOCK
. Los 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 se pondrá en modo de suspensión si no interactúa con él.
En este contexto, la actividad del usuario se refiere a cualquier cosa que desencadene una llamada a PowerManager#userActivity
(sin el indicador USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS
), incluido, entre otros:
- Interactuando con la pantalla táctil
- Pulsando un botón físico
- Ingrese eventos desde un accesorio externo (por ejemplo, teclado conectado, control remoto Bluetooth, control remoto IR)
- Interacción de voz
- Recibir ciertos mensajes HDMI CEC, como One Touch Play
- 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 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.
Configurar el 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 hay bloqueos de pantalla 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 su pantalla poco después de despertarse. - Valor predeterminado:
-1
, que desactiva 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.
Configurar el tiempo 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 se debe 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 por falta de atención establecido; de lo contrario, el cuadro de diálogo de advertencia se muestra constantemente y no se puede descartar.
- Predeterminado:
30000
(30s).
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
- Si se debe mostrar un elemento de preferencia para permitir apagar la pantalla durante la reproducción multimedia.
- Valor predeterminado:
false
.
Recursos para la interfaz de usuario 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 y los recursos del tiempo de compilación se pueden cambiar mediante superposiciones de recursos.
Implementación
Habilite la función usando lo siguiente.
- Anule el
config_attentiveTimeout
predeterminado. - Si utiliza AOSP
TvSettings
: - Deshabilite la función en la configuración anulando
config_show_standby_timeout
. - Implemente sus propias configuraciones que establezcan
Settings.Secure.ATTENTIVE_TIMEOUT
.
Validación
Las pruebas 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 la interfaz de usuario 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 del desarrollador
stay_on_while_plugged_in
esté desactivada si el HAL de estado del dispositivo informa que el dispositivo tiene batería (battery_present
estrue
), ya que esto podría impedir 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 diálogo de advertencia.
adb shell settings put secure attentive_timeout 32000
- Comience a reproducir un vídeo (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.