Android 10 incluye una opción de programación de Ahorro de batería llamada En función de 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
En esta sección, se describe cómo configurar tu dispositivo para la opción Según tu 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 de configuración Basado en 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, cárgala en un dispositivo y navega a Configuración.
Batería > Ahorro de batería > Programa de Ahorro de batería. Aparecerá la opción Según tu 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 Basado en 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 que use la opción Basado en 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 con privilegios. Esto significa que la app debe estar en un directorio priv-app en la imagen del sistema y que debes otorgar este permiso de forma explícita.
En el caso de las apps con privilegios, 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 de 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 permisos estándar, por lo que es fundamental verificar que la app pueda 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 android.permission.POWER_SAVER a una sola app y permite que controle las APIs de Basado en 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.
Cómo activar 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.
APIs
Si la configuración se realiza correctamente, 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 Basado en la rutina está habilitada y la app llama a este método con un valor true para powerSaveHint, se activará 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. 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 confirmar que el valor de configuración de respaldo cambió según las llamadas a la API.
Por ejemplo, si seleccionas el modo Ahorro de batería Basado en la rutina y la app llama a setDynamicPowerSaveHint(true, 10), la configuración global tendrá los siguientes 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, ya que el OEM determina el comportamiento que activa el modo de Ahorro de batería Basado en la rutina. Los OEM deben probar su integración para verificar que el comportamiento cumpla con las expectativas. Específicamente, verifica que el dispositivo pueda realizar las siguientes tareas:
- Según el porcentaje: Si seleccionas Según el porcentaje en la IU de Programa de Ahorro de batería y eliges el 15%, el Ahorro de batería se activará automáticamente solo cuando la batería llegue al 15%.
- Basada en la rutina: Si seleccionas Basada en la rutina en la IU de Programación del Ahorro de batería, el Ahorro de batería se activará cuando la app llame a la API con
true. 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. - Ninguno: Si seleccionas Ninguno en la IU de Programa de Ahorro de batería, el Ahorro de batería nunca se activará automáticamente.
- Anulación manual: Si la app activa el Ahorro de batería y lo anulas manualmente para desactivarlo (con la Configuración rápida, la Configuración o cualquier otro método), permanecerá desactivado hasta que lo vuelvas a activar manualmente o enchufes el dispositivo.