Compatibilité avec les appareils sans batterie

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.

Une batterie est-elle présente ?

Les applications peuvent utiliser le code suivant pour détecter si l'appareil dispose d'une batterie:

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

Comportement de l'appareil 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. Le tableau suivant 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 true
État inconnu en charge
Capacité restante 0 100 %
Santé inconnu bien
État de connexion du chargeur secteur non modifiées forcée sur "true"

Les fabricants peuvent modifier les paramètres par défaut à l'aide d'un pilote power_supply du noyau ou d'un HAL de 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 chargée à 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 dessine l'icône de la batterie, elle s'affiche avec un point d'exclamation, et le pourcentage de la batterie est affiché à 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 la batterie, elle s'affiche avec un point d'exclamation, et le pourcentage de la batterie est affiché à 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 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 la classe d'alimentation Linux, l'état de tous les types de chargeurs (CA, USB, sans fil) est hors connexion par défaut. Si tous les chargeurs sont hors connexion, mais qu'aucun appareil fonctionnant sur batterie n'est détecté, le système est toujours considéré comme en charge, car il fonctionne sur une alimentation externe, et non sur une 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 du chargeur secteur dans un HAL Santé pour votre appareil. Pour ce faire, implémentez un HAL Health comme décrit dans la section Implémenter Health 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.