Auf dieser Seite wird beschrieben, wie Android mit Produkten umgeht, die entweder austauschbare Akkus oder keine internen Akkus haben. Diese Geräte werden stattdessen an eine externe Stromquelle angeschlossen, z. B. eine Steckdose oder einen USB-Anschluss an einem anderen Gerät.
Ist ein Akku vorhanden?
Der folgende Code kann von Anwendungen verwendet werden, um zu erkennen, ob das Gerät einen Akku hat:
```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));
return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```
Verhalten von Geräten ohne Akku
Wenn Android kein Akku-Gerät für Ihr Produkt erkennt, werden die folgenden akkubezogenen Standardwerte verwendet. Die Standardeinstellungen haben sich in Android 9 geändert. In dieser Tabelle sind die Unterschiede aufgeführt.
Akkustatus | Android 9 oder höher | Android 8.1 und niedriger |
---|---|---|
Präsentieren | false | true |
Status | unbekannt | wird geladen |
Verbleibende Kapazität | 0 | 100 % |
Gesundheit | unbekannt | good |
Onlinestatus des AC-Ladegeräts | nicht geändert | auf „true“ gesetzt |
Hersteller können die Standardeinstellungen mit einem power_supply-Treiber des Kernels oder dem Health HAL ändern.
Android 9 oder höher
In Android 9 wurde der bisherige Code für akkulose Geräte entfernt, bei denen standardmäßig ein Akku vorhanden war, der mit 100 % geladen wurde und sich in gutem Zustand befand. Außerdem wurde eine normale Temperatur am Thermistor gemessen.
Die meisten Framework-APIs, die sich mit diesen Informationen befassen, behandeln häufige Situationen weiterhin wie bisher: Das System gilt als wird geladen (d. h. es wird nicht mit Akkustrom betrieben) und hat keinen niedrigen Akkustand. Wenn auf der Benutzeroberfläche das Akkusymbol angezeigt wird, erscheint es mit einem Ausrufezeichen und der Akkustand wird als 0 % angezeigt. Das Gerät wird jedoch nicht aufgrund eines niedrigen Akkustands heruntergefahren und es werden Aufgaben geplant, für die das Gerät aufgeladen sein muss oder einen guten Akkustand haben muss.
Android 8.1 und niedriger
Da der Akkustatus unbekannt ist, wird das System von den Android-Framework-APIs als wird geladen (oder nicht mit Akkustrom betrieben) betrachtet und es wird nicht davon ausgegangen, dass der Akkustand niedrig ist. Wenn auf der Benutzeroberfläche das Akkusymbol angezeigt wird, ist es mit einem Ausrufezeichen versehen und der Akkustand wird als 0 % angezeigt. Das Gerät wird jedoch nicht aufgrund eines niedrigen Akkustands heruntergefahren und es werden Aufgaben geplant, für die das Gerät aufgeladen sein muss oder einen guten Akkustand haben muss.
Implementierung
Der Android 9-Standardcode funktioniert möglicherweise korrekt für Ihr Gerät. Es wird jedoch empfohlen, entweder eine Kernel- oder eine HAL-Änderung vorzunehmen, um den Strom- und Akkustatus für Ihr Produkt genau wiederzugeben, wie oben beschrieben. Wenn unter Android 9 und höher kein Ladegerät der Linux-Stromversorgungsgeräteklasse erkannt wird, haben standardmäßig alle Ladegerättypen (Wechselstrom, USB, kabellos) den Status offline. Wenn alle Ladegeräte offline sind, aber kein akkubetriebenes Gerät erkannt wird, gilt das System weiterhin als „wird geladen“, da es wie oben beschrieben über eine externe Stromquelle und nicht über den Akku betrieben wird.
Wenn Ihr Produkt keinen Akku hat und immer an eine Stromquelle angeschlossen ist, sollten Sie am besten einen Charger-Treiber der Linux-Kernel-Klasse „power_supply“ für die AC- oder USB-Stromquelle implementieren, der das Attribut online auf true
setzt.sysfs
Alternativ können Sie die Online-Eigenschaft des AC-Ladegeräts in einem Health HAL für Ihr Gerät konfigurieren. Informationen zum Konfigurieren der Online-Eigenschaft des AC-Ladegeräts in einer Health-HAL finden Sie unter Health AIDL HAL.
Dieses benutzerdefinierte Health HAL implementiert eine benutzerdefinierte Version von Health::getHealthInfo()
, die den Wert von BatteryProperties.chargerAcOnline = true
ändert.
Kopieren Sie dazu die Datei hardware/interfaces/health/aidl/default/Health.cpp
in Ihre eigene Health HAL-Implementierung und passen Sie sie gemäß der Health AIDL HAL an.