Ahorro de batería de rutina

Android 10 introduce una opción de programación de ahorro de batería llamada basada en 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 , entonces deberá 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 rutina . Para verificarlo, cree su imagen, muéstrela en un teléfono y navegue hasta Configuración > Batería > Ahorro de batería > Programación de ahorro de batería . Debería aparecer la opción basada en rutina .

Umbral de desactivación predeterminado

El nuevo campo config_dynamicPowerSavingsDefaultDisableThreshold especifica un nivel de batería en el que el sistema desactiva el ahorro de batería, si fue activado por el programador de rutina basado . El valor predeterminado del sistema es 80%, pero puedes 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 otorgue este permiso a la aplicación que desea que pueda activar el ahorro de batería en su privapp-whitelist .

Un ejemplo de cómo otorgar permiso de 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 podrá adquirir el permiso ni llamar correctamente a las API. El sistema no proporciona ningún comentario más allá de los errores de permisos habituales, así que verifique que pueda llamar a las API y observar sus efectos.

Instalación

Para que la rutina basada en 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 permítale controlar las API basadas en rutinas . El comportamiento de la función cuando más de una aplicación intenta utilizar el permiso y las API no es compatible ni está especificado.

Activar el 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 correctamente 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 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 anulaciones por parte del usuario y a posponer el ahorro de batería de la misma manera que el ahorro de batería automático basado en porcentaje. 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 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 existe una forma automática de verificar esta función porque no hay forma de saber qué comportamiento utilizará 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 las siguientes tareas:

  • El usuario selecciona según el porcentaje en la interfaz de usuario del programa de ahorro de batería y selecciona 15%. El ahorro de batería debería activarse automáticamente SÓLO cuando se alcanza el 15% de batería.
  • El usuario selecciona según 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 desactiva automáticamente si el dispositivo se carga hasta el nivel de umbral indicado y se desconecta.
  • El usuario no selecciona ninguno en la interfaz de usuario del programa de ahorro de batería. El ahorro de batería NUNCA debe activarse automáticamente.
  • Si la aplicación activa el ahorro de batería y el usuario anula manualmente el ahorro de batería para desactivarlo nuevamente (usando Configuración rápida, Configuración, etc.), debe PERMANECER APAGADO hasta que el usuario lo vuelva a activar manualmente o conecte el dispositivo.