Unterstützung batterieloser Geräte

Auf dieser Seite wird beschrieben, wie Android mit Produkten umgeht, die entweder über austauschbare oder keine internen Batterien verfügen. Letztere Geräte werden stattdessen an eine externe Stromquelle angeschlossen, beispielsweise an eine Wechselstromsteckdose oder einen USB-Anschluss eines anderen Geräts.

Ist eine Batterie vorhanden?

Der folgende Code kann von Anwendungen verwendet werden, um zu erkennen, ob das Gerät derzeit über einen Akku 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 für Ihr Produkt kein Akkugerät 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.

Batteriestatus Android 9 und höher Android 8.1 und niedriger
Gegenwärtig FALSCH WAHR
Status Unbekannt Aufladen
Restkapazität 0 100%
Gesundheit Unbekannt Gut
Online-Status des AC-Ladegeräts Nicht modifiziert gezwungen, wahr zu sein

Hersteller können die Standardeinstellungen mithilfe eines Kernel- Power_supply- Treibers 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 sei, zu 100 % geladen sei und sich in gutem Zustand befinde und eine normale Temperaturanzeige auf dem Thermistor aufweise.

Die meisten Framework-APIs, die diese Informationen verarbeiten, handhaben häufige Situationen weiterhin auf die gleiche Weise wie zuvor: Das System wird als geladen betrachtet (d. h. nicht mit Batteriestrom betrieben) und es wird nicht davon ausgegangen, dass die Batterie schwach ist. Wenn die Benutzeroberfläche das Batteriesymbol zeichnet, wird es mit einem Ausrufezeichen angezeigt und der Batterieprozentsatz wird als 0 % angezeigt. Das Gerät schaltet sich jedoch aufgrund einer schwachen Batterie nicht ab und es werden Jobs geplant, die aufgeladen werden müssen oder bei denen die Batterie gut ist.

Android 8.1 und niedriger

Da der Batteriestatus unbekannt ist, gehen die Android-Framework-APIs davon aus, dass das System geladen wird (oder nicht mit Batteriestrom läuft) und nicht davon ausgeht, 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 schaltet sich jedoch aufgrund einer schwachen Batterie nicht ab und es werden Jobs geplant, die aufgeladen werden müssen oder bei denen die Batterie gut ist.

Implementierung

Der Standardcode von Android 9 funktioniert möglicherweise ordnungsgemäß für Ihr Gerät. Es wird jedoch empfohlen, entweder eine Kernel- oder eine HAL-Änderung vorzunehmen, um den Strom- und Batteriestatus Ihres Produkts genau wiederzugeben, wie oben beschrieben. Wenn Android 9 und höher kein Ladegerät der Linux-Stromversorgungsklasse erkennt, haben alle Ladegerätetypen (AC, USB, Wireless) standardmäßig den Status „Offline“ . Wenn alle Ladegeräte offline sind, aber kein Batteriegerät erkannt wird, wird davon ausgegangen, dass das System weiterhin lädt, in dem Sinne, dass es mit externer Energie und nicht mit Batteriestrom betrieben wird, wie zuvor beschrieben.

Wenn Ihr Produkt über keinen Akku verfügt und immer an eine Stromquelle angeschlossen ist, implementieren Sie am besten einen Ladegerättreiber der Power_supply-Klasse des Linux-Kernels für die Wechselstrom- oder USB-Stromquelle, der sein Online- sysfs Attribut auf true setzt. Oder Sie können die Online-Eigenschaft des AC-Ladegeräts in einem Health-HAL für Ihr Gerät konfigurieren. Implementieren Sie dazu einen Health-HAL, wie unter „Implementieren von 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-Datei .