Cette page décrit comment Android gère les produits qui disposent de batteries amovibles ou qui n'en ont pas. Ces derniers sont connectés à une source d'alimentation externe, telle qu'une prise secteur ou un port USB sur un autre appareil.
Y a-t-il une batterie ?
Les applications peuvent utiliser le code suivant 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 dispositif de batterie pour votre produit, les valeurs par défaut suivantes concernant la batterie sont utilisées. Notez que les valeurs par défaut ont changé dans la version d'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ésenter | faux | vrai |
État | inconnu | en charge |
Capacité restante | 0 | 100 % |
Santé | inconnu | bien |
État de connexion du chargeur CA | non modifiées | forcé 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 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 ces informations continuent à gérer les situations courantes de la même manière qu'auparavant: le système est considéré comme en chargement (c'est-à-dire qu'il ne fonctionne pas sur batterie) et n'a pas de batterie faible. Si l'interface utilisateur affiche l'icône de batterie, elle apparaît 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 l'icône de batterie, elle apparaît avec un point d'exclamation et le pourcentage de batterie est indiqué à 0%. Toutefois, l'appareil ne s'éteint pas en raison d'une batterie faible, et les tâches nécessitant une charge ou une batterie de bonne qualité sont planifiées.
Implémentation
Le code par défaut d'Android 9 peut fonctionner correctement pour votre appareil, mais il est recommandé d'apporter une modification du noyau ou du HAL pour refléter précisément l'état de l'alimentation et de la batterie de votre produit, comme décrit ci-dessus. 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) affichent par défaut l'état hors connexion. Si tous les chargeurs sont hors connexion, mais qu'aucune batterie n'est détectée, le système est toujours considéré comme en charge dans le sens où 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 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 Health pour votre appareil. Pour ce faire, implémentez une HAL d'état comme décrit dans la section Implémenter l'état 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
dans votre propre implémentation du HAL Health et modifiez-le conformément au README Health 2.0.