Android Batterie Status

Category: 

Für einige Anwendungen mag es interessant sein, zu wissen wie der aktuelle Status der Batterie ist. Falls die Batterie nur noch wenig geladen ist, kann eine App beispielsweise in einen Spar Modus wechseln, welcher eine niedrigere Bildwiederholrate aufweist. Umgekehrt kann eine App, wenn sie erkennt, dass das Gerät gerade aufgeladen wird, auch mehr Resourcen und Leistung beanspruchen.

Ladestatus abfragen

Der BatteryManager verbreitet die Informationen des Ladezustands per Intent. Wenn man möchte kann man einen BroadcastReceiver registrieren, welcher bei eventuellen Änderungen automatisch benachrichtigt wird. Häufig reicht es jedoch in bestimmten Situationen einfach den aktuellen Zustand abzufragen.
Da der BatteryManager die Informationen in einem sogenannten sticky Intent speichert, muss man keinen Receiver angeben. Wenn man die Methode registerReceiver mit null als Receiver aufruft, so erhält man den aktuellen Intent zurück, welcher den Batteriestatus enthält.

IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

Aus diesem Intent kann man nun alle wichtigen Informationen auslesen.

// Wird gerade aufgeladen? Im Fehlerfall wird -1 zurückgegeben
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING
  || status == BatteryManager.BATTERY_STATUS_FULL;

// Wie wird geladen?
int plug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = plug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = plug == BatteryManager.BATTERY_PLUGGED_AC;

Wenn ein Android Gerät an einen PC angeschlossen ist, so ist die Datenleitung aktiv und um Störungen zu verhindern, wird mit maximal 500mA geladen. Bei reinen Ladegeräten existiert keine Datenleitung und somit kann mit bis zu 2 Amper geladen werden.

Batterie Level

In einigen Fällen ist es nicht nur nützlich zu wissen ob geladen wird, sondern auch wie voll die Batterie noch ist. Auch hier werden die entsprechenden Informationen aus dem Intent geholt.

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;

Der aktuelle Batteriestand liegt nun zwischen 0,0 (leer) und 1,0 (voll).