Ahorro de batería de rutina

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

Configuración del dispositivo

Especificación del proveedor

Para notificar a la IU de Configuración que el dispositivo está configurado correctamente, usa tu superposición de configuración para anular el valor config_batterySaverScheduleProvider con el nombre del paquete de tu app.

Por ejemplo, si quieres que el paquete de la app com.google.android.apps.turbo controle el parámetro de configuración basado en la rutina, debes 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 Basado en la rutina. Para verificarlo, compila la imagen, flasheala en un teléfono y navega a Configuración > Batería > Ahorro de batería > Programación del ahorro de batería. Debería aparecer la opción Basado en la 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 el programador basado en la rutina lo activó. El valor predeterminado del sistema es del 80%, pero puedes cambiarlo.

Configuración de la app

Permisos

Las APIs necesarias para que la app active el ahorro de batería están protegidas por el permiso android.permission.POWER_SAVER. Este es un permiso de firma o privilegiado, por lo que debes otorgarle a la app que quieras que pueda activar el ahorro de batería este permiso en tu privapp-whitelist.

Ejemplo de cómo otorgar el permiso privapp a una app:

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

Si no otorgas previamente este permiso a la versión de la app en la imagen del sistema, la app no podrá adquirir el permiso ni llamar a las APIs de forma correcta. El sistema no proporciona ningún comentario más allá de los errores de permiso habituales, por lo que debes verificar que puedas llamar a las APIs y observar sus efectos.

Instalación

Para que Basado en la rutina funcione correctamente, debes preinstalar la app en la imagen del sistema con el permiso requerido. Otorga el permiso POWER_SAVER a una sola app y permite que controle las APIs basadas en rutinas. Comportamiento de la función cuando más de una app intenta usar el permiso y las APIs no son compatibles ni están especificadas.

Cómo activar el Ahorro de batería

APIs

Si la configuración se realizó correctamente hasta el momento, la app del 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 la rutina está habilitada y la app llama a este método con un valor true para powerSaveHint, se activa el ahorro de batería. Especifica disableThreshold para que, si la app no puede comunicarse con el sistema, este sepa con qué porcentaje de batería es seguro desactivar el ahorro de batería.

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

Para verificar que las APIs se llamen correctamente, consulta la configuración global para verificar que el valor de la configuración de respaldo haya cambiado según las llamadas a la API.

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

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1

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

automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0

Puedes verificar estos valores con el siguiente comando adb:

adb shell settings get global <setting-name>

Verificación

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

  • El usuario selecciona Basado en porcentaje en la IU de programación del ahorro de batería y elige el 15%. El Ahorro de batería debería activarse automáticamente SOLO cuando la batería llegue al 15%.
  • El usuario selecciona En función de la rutina en la IU de programación del ahorro de batería. Cuando la app 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 selecciona ninguno en la IU de programación del Ahorro de batería. El Ahorro de batería NUNCA debería activarse automáticamente.
  • Si la app activa el ahorro de batería y el usuario anula manualmente el ahorro de batería para que se vuelva a desactivar (con Configuración rápida, Configuración, etcétera), DEBE PERMANECER DESACTIVADO hasta que el usuario lo vuelva a activar manualmente o conecte el dispositivo.