Android 10 propose une option de programmation de l'économiseur de batterie appelée Basé sur une routine. Cette option permet à une application choisie par l'OEM de fournir des signaux au système pour une planification plus intelligente de l'économiseur de batterie. Cette option nécessite une configuration et est facultative.
Configuration de l'appareil
Cette section explique comment configurer votre appareil pour l'option Basé sur une routine.
Spécification du fournisseur
Pour indiquer à l'interface utilisateur Paramètres que l'appareil est correctement configuré, utilisez votre superposition de configuration pour remplacer la valeur config_batterySaverScheduleProvider par le nom de package de votre application. Par exemple, si vous souhaitez que le package d'application com.google.android.apps.turbo contrôle le paramètre Basé sur une routine, définissez cette valeur de configuration :
<string name="config_batterySaverScheduleProvider" translatable="false">
com.google.android.apps.turbo</string>
Pour vérifier, créez votre image, flashez-la sur un appareil et accédez à Paramètres.
Batterie > Économiseur de batterie > Programmation de l'économiseur de batterie. L'option Basé sur une routine s'affiche.
Seuil de désactivation par défaut
Le champ config_dynamicPowerSavingsDefaultDisableThreshold spécifie un niveau de batterie à partir duquel le système désactive l'économiseur de batterie si le programmateur Basé sur une routine l'a activé. La valeur par défaut du système est de 80 %, mais vous pouvez la modifier.
Configuration de l'application
Cette section explique comment configurer votre application pour utiliser l'option Basé sur une routine.
Autorisations
Les API nécessaires pour qu'une application active l'économiseur de batterie de routine sont protégées par l'autorisation android.permission.POWER_SAVER. Il s'agit d'une autorisation de signature ou privilégiée. Cela signifie que l'application doit se trouver dans un répertoire priv-app sur l'image système et que vous devez accorder explicitement cette autorisation.
Pour les applications privilégiées, vous devez accorder des autorisations dans un fichier XML de configuration système dans le répertoire /etc/permissions/ sur la même partition que l'application. Par exemple, pour accorder l'autorisation android.permission.POWER_SAVER à une application dont le nom de package est com.google.android.apps.turbo :
<!-- 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 vous n'accordez pas cette autorisation à l'application sur l'image système, elle ne pourra pas l'obtenir ni appeler les API correctement. Le système ne fournit pas de commentaires au-delà des erreurs d'autorisation standards. Il est donc essentiel de vérifier que l'application peut appeler les API et observer leurs effets.
Installation
Pour que l'option Basé sur une routine fonctionne correctement, vous devez préinstaller l'application sur l'image système avec l'autorisation requise. N'accordez l'autorisation android.permission.POWER_SAVER qu'à une seule application et laissez-la contrôler les API Basé sur une routine. Le comportement de la fonctionnalité n'est pas pris en charge ni spécifié si plusieurs applications tentent d'utiliser l'autorisation et les API.
Déclencher la routine "Économiseur de batterie"
Cette section explique comment votre application peut déclencher l'économiseur de batterie basé sur une routine à l'aide des API fournies.
API
Si la configuration réussit, l'application OEM spécifiée dans la configuration peut appeler la méthode associée dans PowerManager pour déclencher l'économiseur de batterie :
public boolean setDynamicPowerSaveHint(boolean powerSaveHint, int disableThreshold)
Si l'option de programmation de l'économiseur de batterie Selon une routine est activée et que l'application appelle cette méthode avec une valeur true pour powerSaveHint, l'économiseur de batterie s'active. Spécifiez disableThreshold afin que, si l'application ne peut pas communiquer avec le système, celui-ci connaisse toujours le pourcentage de batterie à partir duquel il est possible de désactiver l'économiseur de batterie.
Cette API est soumise aux mêmes règles de remplacement par l'utilisateur et de mise en veille de l'économiseur de batterie que l'économiseur de batterie automatique basé sur un pourcentage. Pour en savoir plus, consultez la documentation de l'API.
Pour vérifier que les API sont appelées correctement, interrogez les paramètres généraux afin de confirmer que la valeur du paramètre sous-jacent a changé en fonction des appels d'API.
Par exemple, si vous sélectionnez le mode Économiseur de batterie Basé sur la routine et que l'application appelle setDynamicPowerSaveHint(true, 10), les paramètres généraux ont les valeurs suivantes :
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 10
dynamic_power_savings_enabled: 1
Si vous appelez ensuite setDynamicPowerSaveHint(false, 25), les valeurs sont les suivantes :
automatic_power_save_mode: 1
dynamic_power_savings_disable_threshold: 25
dynamic_power_savings_enabled: 0
Vous pouvez vérifier ces valeurs à l'aide de la commande adb suivante :
adb shell settings get global <setting-name>
Validation
Il n'existe aucun moyen automatisé de vérifier cette fonctionnalité, car l'OEM détermine le comportement qui déclenche le mode Économiseur de batterie Basé sur la routine. Les OEM doivent tester leur intégration pour vérifier que le comportement répond aux attentes. Plus précisément, vérifiez que l'appareil peut effectuer les tâches suivantes :
- Selon le pourcentage : si vous sélectionnez Selon le pourcentage dans l'interface utilisateur Paramétrage de l'économiseur de batterie et que vous choisissez 15 %, l'économiseur de batterie s'active automatiquement uniquement lorsque la batterie atteint 15 %.
- Selon une routine : si vous sélectionnez Selon une routine dans l'interface utilisateur Programmation de l'économiseur de batterie, l'économiseur de batterie s'active lorsque l'application appelle l'API avec
true. De plus, l'économiseur de batterie se désactive automatiquement si l'appareil se recharge jusqu'au niveau de seuil indiqué et est débranché. - Aucun : si vous sélectionnez Aucun dans l'UI Programmation de l'économiseur de batterie, l'économiseur de batterie ne s'active jamais automatiquement.
- Remplacement manuel : si l'application active l'économiseur de batterie et que vous le désactivez manuellement (à l'aide des Réglages rapides, des Paramètres ou d'autres méthodes), il reste désactivé jusqu'à ce que vous le réactiviez manuellement ou que vous branchiez l'appareil.