Ahorro de batería de rutina

Android 10 presenta una opción de programación de ahorro de batería llamada basada en la rutina . Esta opción permite que una aplicación elegida por el OEM proporcione señales al sistema para una programación de ahorro de batería más inteligente. Esta opción requiere configuración y su implementación es opcional.

Configuración del dispositivo

Especificación del proveedor

Para notificar a la interfaz de usuario de Configuración que el dispositivo está configurado correctamente, use su superposición de configuración para anular el valor config_batterySaverScheduleProvider con el nombre del paquete de su aplicación.

Por ejemplo, si desea que el paquete de la aplicación com.google.android.apps.turbo controle la configuración basada en la rutina , debe establecer este valor de configuración:

<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>

Ahora el teléfono debería mostrar la opción basada en la rutina . Para verificar, crea tu imagen, muéstrala a un teléfono y navega a Configuración > Batería > Ahorro de batería > Horario de ahorro de batería . Debería aparecer la opción basada en rutina .

Umbral desactivado predeterminado

El nuevo campo config_dynamicPowerSavingsDefaultDisableThreshold especifica un nivel de batería en el que el sistema desactiva el ahorro de batería, si lo activó el programador basado en rutinas . El valor predeterminado del sistema es 80 %, pero puede cambiarlo.

Configuración de la aplicación

permisos

Las API necesarias para que la aplicación active el ahorro de batería desde la aplicación están protegidas por el permiso android.permission.POWER_SAVER . Este es un permiso de firma/privilegiado, así que conceda a la aplicación que desea que pueda activar el ahorro de batería este permiso en su privapp-whitelist .

Un ejemplo de cómo otorgar el permiso privapp a una aplicación:

<privapp-permissions package="com.google.android.apps.turbo">
   <permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>

Si no otorga previamente este permiso a la versión de la aplicación en la imagen del sistema, la aplicación no puede adquirir el permiso ni llamar correctamente a las API. El sistema no proporciona ningún comentario más allá de los errores de permiso habituales, por lo tanto, compruebe que puede llamar a las API y observar sus efectos.

Instalación

Para que la rutina funcione correctamente, debe preinstalar la aplicación en la imagen del sistema con el permiso requerido. Otorgue a solo una aplicación el permiso POWER_SAVER y permita que controle las API basadas en rutinas . Comportamiento de la función cuando más de una aplicación intenta usar el permiso y las API no son compatibles ni están especificadas.

Activación del ahorro de batería

API

Suponiendo que la configuración se haya realizado correctamente hasta el momento, la aplicación OEM especificada en la configuración debería poder llamar con éxito al método asociado en PowerManager para activar el ahorro de batería:

public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)

Si la opción de programación de ahorro de batería basada en la rutina está habilitada y la aplicación llama a este método con un valor true para powerSaveHint , entonces se activa el ahorro de batería. Especifique disableThreshold para que, si la aplicación no puede comunicarse con el sistema, el sistema aún sepa en qué porcentaje de batería es seguro desactivar el ahorro de batería.

Esta API está sujeta a las anulaciones del usuario y la repetición del ahorro de batería de la misma manera que el ahorro de batería automático basado en porcentajes. Consulte la documentación de la API para obtener más información.

Para verificar que las API se llamen correctamente, consulte la configuración global para verificar que la configuración de respaldo cambió el valor de acuerdo con las llamadas a la API .

Por ejemplo, si el usuario seleccionó el modo de ahorro de batería de rutina y la aplicación llama a setDynamicPowerSaveHint(true, 10) , la configuración global debe tener estos valores:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

Si luego llama a setDynamicPowerSaveHint(false, 25) , los valores deberían ser:

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

Puede verificar estos valores usando este comando adb :

adb shell settings get global <setting-name>

Verificación

No hay una forma automatizada de verificar esta función porque no hay forma de saber qué comportamiento usará un OEM para decidir cuándo activar el modo de ahorro de batería de rutina. Por lo tanto, los OEM son responsables de probar su integración para asegurarse de que el comportamiento cumpla con las expectativas. En particular, verifique que el dispositivo pueda cumplir con las siguientes tareas:

  • El usuario selecciona en función del porcentaje en la interfaz de usuario del programa de ahorro de batería y selecciona el 15 %. El ahorro de batería debería activarse automáticamente SOLAMENTE cuando alcance el 15 % de la batería.
  • El usuario selecciona en función de la rutina en la interfaz de usuario del programa de ahorro de batería. Cuando la aplicación llama a la API con true , se activa el ahorro de batería. Además, el ahorro de batería se apaga automáticamente si el dispositivo se carga hasta el nivel de umbral indicado y se desconecta.
  • El usuario selecciona ninguno en la interfaz de usuario del programa de ahorro de batería. El ahorro de batería NUNCA debe encenderse automáticamente.
  • Si la aplicación activa el ahorro de batería y el usuario anula manualmente el ahorro de batería para que se vuelva a desactivar (usando Configuración rápida, Configuración, etc.), debe PERMANECER APAGADO hasta que el usuario lo vuelva a activar manualmente o conecte el dispositivo.