Android 10 introduit 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
Spécification du fournisseur
Pour indiquer à l'UI des 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>
L'option Basé sur une routine devrait maintenant s'afficher sur le téléphone. Pour vérifier, compilez votre image, flashez-la sur un téléphone et accédez à Paramètres > Batterie > Économiseur de batterie > Programmation de l'économiseur de batterie. L'option Basé sur une routine devrait s'afficher.
Seuil de désactivation par défaut
Le nouveau champ config_dynamicPowerSavingsDefaultDisableThreshold
spécifie le niveau de batterie à partir duquel le système désactive l'économiseur de batterie, s'il a été activé par le planificateur basé sur les routines. La valeur par défaut du système est de 80 %, mais vous pouvez la modifier.
Configuration de l'application
Autorisations
Les API nécessaires pour que l'application active l'économiseur de batterie sont protégées par l'autorisation android.permission.POWER_SAVER
. Il s'agit d'une autorisation privilégiée/de signature. Accordez donc cette autorisation à l'application que vous souhaitez pouvoir déclencher l'économiseur de batterie dans votre privapp-whitelist
.
Exemple d'attribution de l'autorisation privapp
à une application :
<privapp-permissions package="com.google.android.apps.turbo">
<permission name="android.permission.POWER_SAVER"/>
</privapp-permissions>
Si vous n'accordez pas cette autorisation à la version de l'application sur l'image système, l'application ne pourra pas l'obtenir ni appeler correctement les API. Le système ne fournit aucun commentaire au-delà des erreurs d'autorisation habituelles. Vérifiez donc que vous pouvez 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 POWER_SAVER
qu'à une seule application et autorisez-la à contrôler les API basées sur les routines. Le comportement de la fonctionnalité lorsque plusieurs applications tentent d'utiliser l'autorisation et les API n'est pas pris en charge et n'est pas spécifié.
Déclencher l'économiseur de batterie
API
En supposant que la configuration ait réussi jusqu'à présent, l'application OEM spécifiée dans la configuration devrait pouvoir 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 planification de l'économiseur de batterie Basé sur 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
pour que, si l'application ne peut pas communiquer avec le système, celui-ci sache toujours à quel pourcentage de batterie il est sûr 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 globaux afin de vérifier que la valeur du paramètre sous-jacent a changé en fonction des appels d'API.
Par exemple, si l'utilisateur a sélectionné le mode Économiseur de batterie de routine et que l'application appelle setDynamicPowerSaveHint(true, 10)
, les paramètres généraux doivent avoir 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 doivent être 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 il est impossible de savoir quel comportement un OEM utilisera pour décider quand déclencher le mode Économie de batterie de routine. Les OEM sont donc responsables du test de leur intégration pour s'assurer que le comportement répond aux attentes. Vérifiez notamment que l'appareil peut effectuer les tâches suivantes :
- L'utilisateur sélectionne En fonction du pourcentage dans l'interface utilisateur de la programmation de l'économiseur de batterie et sélectionne 15 %. L'économiseur de batterie ne doit s'activer automatiquement que lorsque la batterie atteint 15 %.
- L'utilisateur sélectionne Basé sur une routine dans l'UI de planification de l'économiseur de batterie. Lorsque l'application appelle l'API avec
true
, l'économiseur de batterie s'active. De plus, l'économiseur de batterie se désactive automatiquement si l'appareil est rechargé jusqu'au seuil indiqué et débranché. - L'utilisateur sélectionne Aucun dans l'interface utilisateur de programmation de l'économiseur de batterie. L'économiseur de batterie ne doit JAMAIS s'activer automatiquement.
- Si l'application active l'économiseur de batterie et que l'utilisateur le désactive manuellement (à l'aide des paramètres rapides, des paramètres, etc.), il doit RESTER DÉSACTIVÉ jusqu'à ce que l'utilisateur le réactive manuellement ou branche l'appareil.