Cette page décrit comment Android gère les produits qui ont des batteries amovibles ou pas de batterie interne. Ces derniers sont plutôt connectés à une source d'alimentation externe, comme une prise secteur ou un port USB d'un autre appareil.
Une batterie est-elle présente ?
Le code suivant peut être utilisé par les applications pour détecter si l'appareil est équipé d'une batterie :
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
Comportement des appareils sans batterie
Si Android ne détecte pas de batterie pour votre produit, les valeurs par défaut suivantes liées à la batterie sont utilisées. Notez que les valeurs par défaut ont changé dans la version Android 9. Le tableau ci-dessous présente les différences.
État de la batterie | Android 9 ou version ultérieure | Android 8.1 et versions antérieures |
---|---|---|
Présenter | false | true |
État | inconnu | en charge |
Capacité restante | 0 | 100 % |
Santé | inconnu | bien |
État en ligne du chargeur secteur | non modifiée | forced sur "true" |
Les fabricants peuvent modifier les paramètres par défaut à l'aide d'un pilote power_supply du noyau ou de Health HAL.
Android 9 ou version ultérieure
Android 9 supprime une partie du code précédent pour les appareils sans batterie qui, par défaut, simulaient la présence d'une batterie, en charge à 100 %, en bon état et avec une température normale sur sa thermistance.
La plupart des API de framework qui traitent ces informations continuent de gérer les situations courantes de la même manière qu'auparavant : le système est considéré comme en charge (c'est-à-dire qu'il ne fonctionne pas sur batterie) et n'est pas considéré comme ayant une batterie faible. Si l'interface utilisateur affiche l'icône de la batterie, elle sera accompagnée d'un point d'exclamation et le pourcentage de la batterie sera indiqué comme étant de 0 %. Toutefois, l'appareil ne s'éteint pas en raison du faible niveau de batterie, et les tâches qui nécessitent une recharge ou une batterie en bon état sont planifiées.
Android 8.1 et versions antérieures
Étant donné que l'état de la batterie est inconnu, les API du framework Android considéreront que le système est en charge (ou qu'il n'est pas alimenté par la batterie) et ne sera pas considéré comme ayant une batterie faible. Si l'interface utilisateur affiche l'icône de batterie, elle sera accompagnée d'un point d'exclamation et le pourcentage de batterie sera indiqué comme étant de 0 %. Toutefois, l'appareil ne s'éteint pas en raison du faible niveau de batterie, et les tâches qui nécessitent une recharge ou une bonne batterie sont planifiées.
Implémentation
Le code par défaut d'Android 9 peut fonctionner correctement pour votre appareil, mais il est recommandé de modifier le noyau ou la HAL pour refléter précisément l'état de l'alimentation et de la batterie de votre produit, comme décrit précédemment. Si Android 9 ou version ultérieure ne détecte pas de chargeur de classe d'alimentation Linux, tous les types de chargeurs (secteur, USB, sans fil) auront par défaut l'état hors connexion. Si tous les chargeurs sont hors connexion, mais qu'aucun appareil à batterie n'est détecté, le système sera toujours considéré comme en charge, car il fonctionne sur une source d'alimentation externe et non sur batterie, comme décrit précédemment.
Si votre produit ne dispose pas de batterie et est toujours connecté à une source d'alimentation, il est préférable d'implémenter un pilote charger de la classe power_supply du noyau Linux pour la source d'alimentation CA ou USB qui définit son attribut online sysfs
sur true
. Vous pouvez également configurer la propriété en ligne du chargeur CA dans une interface HAL Health pour votre appareil. Pour configurer la propriété en ligne du chargeur CA dans une interface HAL Health, consultez Health AIDL HAL.
Cette HAL Health personnalisée implémente une version personnalisée de Health::getHealthInfo()
qui modifie la valeur de BatteryProperties.chargerAcOnline = true
.
Pour commencer, copiez le fichier hardware/interfaces/health/aidl/default/Health.cpp
dans votre propre implémentation Health HAL et modifiez-le en fonction de Health AIDL HAL.