Prise en charge des appareils sans batterie

Cette page décrit comment Android gère les produits qui ont des batteries amovibles ou pas 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 actuellement 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 relatives à 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 inférieur
Présent faux vrai
Statut inconnu mise en charge
Capacité restante 0 100%
Santé inconnu bon
Statut en ligne du chargeur CA non modifié forcé à vrai

Les fabricants peuvent modifier les paramètres par défaut en utilisant un noyau power_supply pilote ou la santé HAL .

Android 9 et supérieur

Android 9 supprime certains codes antérieurs pour les appareils sans batterie qui par défaut prétendaient 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 cadres qui traitent de ces informations continuent à gérer des situations communes les mêmes que précédemment: le système sera considéré comme la charge (qui est, 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 la batterie sera affiché comme 0 %. Mais l'appareil ne s'éteindra pas en raison d'une batterie faible et les tâches nécessitant une charge ou une bonne batterie seront planifiées.

Android 8.1 et inférieur

Parce que l'état de la batterie est inconnue, les API du framework Android considéreront le système à charge (ou, ne fonctionne pas sur batterie) et ne sera pas considéré comme 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é comme 0 %. Mais l'appareil ne s'éteindra pas en raison d'une batterie faible et les tâches nécessitant une charge ou une bonne batterie seront planifiées.

Mise en œuvre

Le code par défaut d'Android 9 peut fonctionner correctement pour votre appareil, mais il est recommandé de modifier le noyau ou HAL pour refléter avec précision l'état de l'alimentation et de la batterie de votre produit, comme décrit ci-dessus. Si Android 9 et plus ne détecte pas une classe d' alimentation Linux dispositif de chargeur, puis par défaut , tous les types de chargeur (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 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 de mettre en œuvre un pilote de chargeur de classe power_supply Linux pour la source d'alimentation secteur ou USB qui définit sa ligne sysfs attribut true . Ou vous pouvez configurer la propriété en ligne du chargeur CA dans un HAL de santé pour votre appareil. Pour ce faire , mettre en œuvre une HAL Santé comme décrit dans Mise en œuvre de la santé 2.0 .

Cette mesure HAL Santé met en œuvre une version personnalisée de la Health::getHealthInfo() qui modifie la valeur de BatteryProperties.chargerAcOnline = true .

Pour commencer, copier le fichier hardware/interfaces/health/2.0/default/Health.cpp à votre propre implémentation Santé HAL et le modifier selon le README Health 2.0 .