Cette page décrit comment Android gère les produits qui disposent de batteries amovibles ou qui n'en ont pas. Ces derniers sont plutôt connectés à Une source d'alimentation externe, telle qu'une prise secteur ou un port USB d'un autre appareil.
Une batterie est-elle présente ?
Les applications peuvent utiliser le code suivant pour détecter si l'appareil a une batterie présente:
```
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 sont utilisées. Notez que les valeurs par défaut ont changé dans la version Android 9. Ce tableau présente les différences.
État de la batterie | Android 9 ou version ultérieure | Android 8.1 ou version antérieure |
---|---|---|
Présent | faux | vrai |
État | inconnu | en charge |
Capacité restante | 0 | 100 % |
Santé | inconnu | bien |
État de connexion du chargeur secteur | non modifié | forcée sur "true" |
Les fabricants peuvent modifier les paramètres par défaut à l'aide d'un noyau alimentation_alimentation pilote ou HAL Santé.
Android 9 ou version ultérieure
Android 9 supprime du code précédent pour les appareils sans batterie qui, par défaut, prétendaient qu'une batterie était présente, qu'elle était en charge à 100 % et qu'elle était en bon état, avec une température normale sur son thermistance.
La plupart des API de framework qui traitent de ces informations continuent de gérer les situations courantes de la même manière que précédemment : 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, avec un point d'exclamation et le pourcentage de batterie est indiqué à 0%. Toutefois, l'appareil ne s'arrête pas en raison d'une batterie faible, et les tâches nécessitant une recharge ou une batterie en bon état sont planifiées.
Android 8.1 ou version antérieure
É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 ne fonctionne pas sur batterie) et ne considéreront pas que la batterie est faible. Si l'interface utilisateur affiche le niveau de batterie s'affiche avec un point d'exclamation, et le pourcentage de batterie est affiché sous la forme 0%. Toutefois, l'appareil ne s'arrête pas en raison d'un faible niveau de batterie, et les tâches nécessitant une recharge ou une batterie en bon état sont planifiées.
Implémentation
Le code par défaut d'Android 9 peut fonctionner correctement pour votre mais il est recommandé d'effectuer une modification du noyau ou du HAL refléter précisément la puissance et l'état de la batterie de votre produit, conformément à la description ci-dessus. Si Android 9 ou version ultérieure ne détecte pas de alimentation Linux cours chargeur, tous les types de chargeurs (secteur, USB, sans fil) sont dotés par défaut état hors connexion. Si tous les chargeurs sont hors connexion, mais qu'il n'y a pas de batterie le système est toujours considéré comme en charge, au sens il fonctionne sur une source 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 de chargeur de la classe power_supply du kernel Linux pour la source d'alimentation CA ou USB qui définit son attribut sysfs
en ligne sur true
. Vous pouvez également configurer la propriété en ligne "Chargeur secteur" dans une HAL Santé
pour votre appareil. Pour ce faire, implémentez une HAL Santé comme décrit dans la section Implémentation
Santé 2.0.
Ce HAL de santé personnalisé 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/2.0/default/Health.cpp
à votre propre mise en œuvre de l'HAL Health et la modifier en fonction de la norme Health 2.0
LISEZ-MOI.