Auf dieser Seite wird beschrieben, wie Android mit Produkten umgeht, die entweder austauschbare Batterien oder keine internen Batterien haben. Die letztgenannten Geräte werden stattdessen an eine externe Stromquelle angeschlossen, z. B. eine Wechselstromsteckdose oder einen USB-Anschluss an einem anderen Gerät.
Ist eine Batterie vorhanden?
Der folgende Code kann von Anwendungen verwendet werden, um zu erkennen, ob das Gerät derzeit über eine Batterie verfügt:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
Verhalten des batterielosen Geräts
Wenn Android kein Batteriegerät für Ihr Produkt erkennt, werden die folgenden batteriebezogenen Standardwerte verwendet. Beachten Sie, dass sich die Standardeinstellungen in der Android 9-Version geändert haben. Diese Tabelle zeigt die Unterschiede.
Batteriezustand | Android 9 und höher | Android 8.1 und niedriger |
---|---|---|
Gegenwärtig | falsch | wahr |
Status | Unbekannt | aufladen |
Verbleibende Kapazität | 0 | 100% |
Die Gesundheit | Unbekannt | gut |
Online-Status des AC-Ladegeräts | Nicht modifiziert | zur Wahrheit gezwungen |
Hersteller können die Standardeinstellungen mit einem Kernel- Power_supply- Treiber oder Health HAL ändern.
Android 9 und höher
Android 9 entfernt einige frühere Codes für batterielose Geräte, die standardmäßig vorgaben, dass eine Batterie vorhanden war, zu 100 % aufgeladen wurde und bei guter Gesundheit mit einer normalen Temperaturanzeige auf ihrem Thermistor war.
Die meisten Framework-APIs, die sich mit diesen Informationen befassen, handhaben weiterhin häufige Situationen wie zuvor: Das System wird als aufgeladen betrachtet (d. h. nicht mit Akkustrom betrieben) und nicht als schwacher Akku betrachtet. Wenn die Benutzeroberfläche das Batteriesymbol zeichnet, wird es mit einem Ausrufezeichen angezeigt und der Batterieprozentsatz wird als 0 % angezeigt. Das Gerät wird jedoch aufgrund eines niedrigen Akkustands nicht heruntergefahren, und Aufträge, die aufgeladen werden müssen oder einen guten Akku benötigen, werden geplant.
Android 8.1 und niedriger
Da der Batteriestatus unbekannt ist, gehen die Android-Framework-APIs davon aus, dass das System aufgeladen wird (oder nicht mit Batteriestrom betrieben wird) und es wird nicht davon ausgegangen, dass die Batterie schwach ist. Wenn die Benutzeroberfläche das Batteriesymbol darstellt, wird es mit einem Ausrufezeichen angezeigt, und der Batterieprozentsatz wird als 0 % angezeigt. Das Gerät wird jedoch aufgrund eines niedrigen Akkustands nicht heruntergefahren, und Aufträge, die aufgeladen werden müssen oder einen guten Akku benötigen, werden geplant.
Implementierung
Der Standardcode von Android 9 funktioniert möglicherweise ordnungsgemäß für Ihr Gerät, aber es wird empfohlen, entweder eine Kernel- oder eine HAL-Änderung vorzunehmen, um den Energie- und Batteriestatus für Ihr Produkt wie oben beschrieben genau widerzuspiegeln. Wenn Android 9 und höher kein Ladegerät der Linux-Netzteilklasse erkennt, haben alle Ladegerättypen (AC, USB, Wireless) standardmäßig den Status Offline . Wenn alle Ladegeräte offline sind, aber kein Batteriegerät erkannt wird, wird das System immer noch als aufladend betrachtet, in dem Sinne, dass es mit externem Strom und nicht mit Batteriestrom betrieben wird, wie zuvor beschrieben.
Wenn Ihr Produkt keinen Akku hat und immer an eine Stromquelle angeschlossen ist, ist es am besten, einen Linux-Kernel-Ladetreiber der Power_supply -Klasse für die Wechselstrom- oder USB-Stromquelle zu implementieren, der sein Online -Attribut sysfs
auf true
setzt. Oder Sie können die Online-Eigenschaft des AC-Ladegeräts in einer Health-HAL für Ihr Gerät konfigurieren. Implementieren Sie dazu eine Health-HAL, wie in Implementing Health 2.0 beschrieben.
Diese benutzerdefinierte Health-HAL implementiert eine benutzerdefinierte Version von Health::getHealthInfo()
, die den Wert von BatteryProperties.chargerAcOnline = true
ändert.
Kopieren Sie zunächst die Datei hardware/interfaces/health/2.0/default/Health.cpp
in Ihre eigene Health HAL-Implementierung und ändern Sie sie gemäß der Health 2.0 README .