Assurer la compatibilité avec les appareils sans batterie

Cette page explique comment Android gère les produits qui ont ou pas de piles internes. 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 dispose 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 batterie pour votre produit : les valeurs par défaut liées à la batterie sont utilisées. Notez que les valeurs par défaut ont changé dans le 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 secteur non modifié forcé 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 une partie du code précédent pour les solutions sans batterie appareils qui, par défaut, prétendaient disposer d'une batterie, étaient en charge 100%, et qu'il était en bonne santé et que la température relevée était normale. thermistor.

La plupart des API de framework qui gèrent ces informations continuent de gérer des les mêmes situations qu'auparavant: le système est considéré en cours de recharge (ne fonctionne pas sur batterie), et ne sera pas prise en compte d'avoir une batterie faible. Si l'interface utilisateur affiche l'icône de 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'un faible niveau de batterie, et les tâches nécessitant une recharge ou une bonne batterie sont planifiées.

Android 8.1 ou version antérieure

L'état de la batterie étant inconnu, les API du framework Android tiennent compte que le système se charge (ou ne fonctionne pas sur batterie) et ne se comme ayant une batterie 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%. Mais l'appareil ne s'éteindra pas en raison d'une batterie faible et des tâches qui doivent être rechargées ou dont la batterie est en bonne charge.

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 n'a pas de batterie et qu'il est toujours branché à une source d'alimentation il est préférable de mettre en œuvre un chargeur de classe power_supply pour le noyau Linux. pilote de la source d'alimentation secteur ou USB qui définit son attribut sysfs en ligne à true. Vous pouvez également configurer la propriété en ligne "Chargeur secteur" dans une HAL Santé pour votre appareil. Pour ce faire, implémentez un HAL Health comme décrit dans la section Implémenter Health 2.0.

Cette HAL Santé personnalisée 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.