Ahorro de batería de rutina

Android 10 presenta una opción de programación del Ahorro de batería llamada Según 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 es opcional para implementar.

Configuración del dispositivo

En esta sección, se describe cómo configurar tu dispositivo para la opción Según la rutina.

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 Según la rutina, establece este valor de configuración:

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

Para verificarlo, compila tu imagen, escribe en la memoria flash un dispositivo y navega a Configuración

Batería > Ahorro de batería > Programación del Ahorro de batería. Aparecerá la opción Según la rutina.

Umbral de desactivación predeterminado

El campo config_dynamicPowerSavingsDefaultDisableThreshold especifica un nivel de batería en el que el sistema desactiva el Ahorro de batería si el programador Según la rutina lo activó. El valor predeterminado del sistema es del 80%, pero puedes cambiarlo.

Configuración de la app

En esta sección, se describe cómo configurar tu app para usar la opción Según la rutina.

Permisos

Las APIs necesarias para que una app habilite el Ahorro de batería de rutina están protegidas por el permiso android.permission.POWER_SAVER. Este es un permiso de firma o privilegiado. Esto significa que la app debe estar en un directorio priv-app en la imagen del sistema, y debes otorgar este permiso de forma explícita.

En el caso de las apps privilegiadas, debes otorgar permisos en un archivo XML de configuración del sistema en el directorio /etc/permissions/ de la misma partición que la app. Por ejemplo, para otorgar el permiso android.permission.POWER_SAVER a una app con el nombre del paquete com.google.android.apps.turbo, haz lo siguiente:

<!-- File located at /etc/permissions/privapp-permissions-DEVICE_NAME.xml -->
<permissions>
    <privapp-permissions package="com.google.android.apps.turbo">
        <permission name="android.permission.POWER_SAVER"/>
    </privapp-permissions>
</permissions>

Si no otorgas previamente este permiso a la app en la imagen del sistema, la app no podrá adquirir el permiso ni llamar a las APIs correctamente. El sistema no proporciona comentarios más allá de los errores de permiso estándar, por lo que es fundamental verificar que la app pueda llamar a las APIs y observar sus efectos.

Instalación

Para que Según la rutina funcione correctamente, debes instalar previamente la app en la imagen del sistema con el permiso requerido. Otorga el permiso android.permission.POWER_SAVER a una sola app y permite que controle las APIs Según la rutina. El comportamiento de la función no es compatible ni está especificado si más de una app intenta usar el permiso y las APIs.

Activa el Ahorro de batería de rutina

En esta sección, se describe cómo tu app puede activar el Ahorro de batería Según la rutina con las APIs proporcionadas.

API

Si la configuración es correcta, la app del OEM especificada en la configuración puede 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 del Ahorro de batería Según 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 siga conociendo el porcentaje de batería en el que 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. Consulta la documentación de la API para obtener más información.

Para verificar que se llame a las APIs correctamente, consulta la configuración global para confirmar que el valor de configuración de respaldo cambió según las llamadas a la API. Por ejemplo, si seleccionas el modo de Ahorro de batería Según la rutina y la app llama a setDynamicPowerSaveHint(true, 10), la configuración global tiene 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 son 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 porque el OEM determina el comportamiento que activa el modo de Ahorro de batería Según la rutina. Los OEMs deben probar su integración para verificar que el comportamiento cumpla con las expectativas. En particular, verifica que el dispositivo pueda realizar las siguientes tareas:

  • Según el porcentaje: Si seleccionas Según el porcentaje en la IU de Programación del Ahorro de batería y seleccionas el 15%, el Ahorro de batería se activa automáticamente solo cuando la batería llega al 15%.
  • Según la rutina: Si seleccionas Según la rutina en la IU de Programación del Ahorro de batería, el Ahorro de batería se activa cuando la app llama a la API con true. Además, el Ahorro de batería se desactiva automáticamente si el dispositivo se carga al nivel de umbral indicado y se desconecta.
  • Ninguno: Si seleccionas Ninguno en la IU de Programación del Ahorro de batería , el Ahorro de batería nunca se activa automáticamente.
  • Anulación manual: Si la app activa el Ahorro de batería y lo anulas manualmente para desactivarlo (con Configuración rápida, Configuración o cualquier otro método), permanecerá desactivado hasta que lo vuelvas a activar manualmente o conectes el dispositivo.