Prise en charge des appareils sans batterie

Cette page décrit comment Android gère les produits dotés de batteries amovibles ou dépourvus de batteries internes. Ces derniers appareils sont plutôt 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 ?

Le code suivant peut être utilisé par les applications pour détecter si l'appareil dispose d'une batterie actuellement :

```
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 liées à la batterie sont utilisées. Notez que les valeurs par défaut ont changé dans la version Android 9. Ce tableau montre les différences.

État de la batterie Android 9 et supérieur Android 8.1 et versions antérieures
Présent FAUX vrai
Statut inconnu mise en charge
Capacité restante 0 100%
Santé inconnu bien
État en ligne du chargeur CA non modifié forcé à vrai

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 et supérieur

Android 9 supprime certains codes précédents pour les appareils sans batterie qui prétendaient par défaut qu'une batterie était présente, était chargée à 100 % et était en bonne santé avec une lecture de 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 que précédemment : le système sera considéré comme étant en charge (c'est-à-dire qu'il ne fonctionne pas sur batterie) et ne sera pas considéré comme ayant une batterie faible. Si l'interface utilisateur dessine l'icône de la batterie, elle apparaîtra avec un point d'exclamation et le pourcentage de batterie sera affiché à 0 %. Mais l'appareil ne s'éteindra pas en raison d'une batterie faible et les tâches nécessitant une charge ou une batterie en bon état seront 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 ne fonctionne pas sur batterie) et ne seront pas considérées comme ayant une batterie faible. Si l'interface utilisateur affiche l'icône de la batterie, elle apparaîtra avec un point d'exclamation et le pourcentage de batterie sera affiché à 0 %. Mais l'appareil ne s'éteindra pas en raison d'une batterie faible et les tâches nécessitant une charge ou une batterie en bon état seront planifiées.

Mise en œuvre

Le code par défaut d'Android 9 peut fonctionner correctement pour votre appareil, mais il est recommandé d'effectuer une modification du noyau ou d'un HAL pour refléter avec précision l'alimentation et l'état de la batterie de votre produit, comme décrit ci-dessus. Si Android 9 et versions ultérieures ne détectent pas un chargeur de classe d'alimentation Linux , alors par défaut, tous les types de chargeurs (AC, USB, sans fil) auront le statut hors ligne . Si tous les chargeurs sont hors ligne mais qu'aucun dispositif de batterie n'est détecté, le système sera toujours considéré comme étant en charge dans le sens où il fonctionne sur une 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 de chargeur de 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 un Health HAL pour votre appareil. Pour ce faire, implémentez un Health HAL comme décrit dans Implémentation de Health 2.0 .

Ce Health HAL 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 Health HAL et modifiez-le conformément au README Health 2.0 .