Akku- und Ladestatus überwachen

Wenn Sie die Häufigkeit der Hintergrundaktualisierungen ändern, um die Auswirkungen dieser Updates Updates zur Akkulaufzeit, das Überprüfen des aktuellen Akkuladestands und des Ladestatus sind ein guter Ort, beginnen.

Die Auswirkungen von App-Updates auf die Akkulaufzeit hängen vom Akkuladestand und des Ladezustands des Geräts. Auswirkungen von Updates, während das Gerät über die Stromversorgung geladen wird ist vernachlässigbar. Du kannst die Aktualisierungsrate also in den meisten Fällen maximieren, wenn das Gerät mit dem Internet verbunden ist. an eine Steckdose anschließen. Wenn sich das Gerät hingegen entlädt, hilft es, die Aktualisierungsrate zu reduzieren, um die Akkulaufzeit zu verlängern.

Ebenso können Sie den Akkuladestand überprüfen und so die Häufigkeit der Die Aktualisierung erfolgt sogar, wenn der Akku fast leer ist.

Aktuellen Ladestatus ermitteln

Ermitteln Sie zuerst den aktuellen Gebührenstatus. Das BatteryManager überträgt alle Akku- und Ladedetails in einem fixierten Intent, das Folgendes enthält: den Ladestatus.

Da es sich um einen fixierten Intent handelt, müssen Sie kein BroadcastReceiver registrieren. Rufen Sie einfach registerReceiver auf und übergeben Sie null als Empfänger verwenden (siehe nächstes Snippet), ist der aktuelle Intent für den Akkustatus zurückgegeben. Sie könnten hier ein echtes BroadcastReceiver-Objekt übergeben, Wir behandeln Aktualisierungen in einem späteren Abschnitt, daher ist es nicht erforderlich.

Kotlin

val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
    context.registerReceiver(null, ifilter)
}

Java

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

Du kannst sowohl den aktuellen Ladestatus abrufen als auch, wenn das Gerät geladen wird, wird über USB oder Wechselstrom aufgeladen:

Kotlin

val status: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1
val isCharging: Boolean = status == BatteryManager.BATTERY_STATUS_CHARGING
        || status == BatteryManager.BATTERY_STATUS_FULL

// How are we charging?
val chargePlug: Int = batteryStatus?.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) ?: -1
val usbCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_USB
val acCharge: Boolean = chargePlug == BatteryManager.BATTERY_PLUGGED_AC

Java

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                     status == BatteryManager.BATTERY_STATUS_FULL;

// How are we charging?
int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;

Normalerweise sollten Sie die Aktualisierungsrate im Hintergrund maximieren, falls das Gerät an ein AC-Ladegerät angeschlossen ist, reduzieren Sie die Laderate, wenn sie über USB geladen wird, und senken Sie sie wenn sich der Akku entlädt.

Änderungen des Ladestatus überwachen

Der Ladestatus kann sich genauso leicht ändern, wie ein Gerät angeschlossen werden kann. Daher ist es wichtig, Überwachen Sie den Ladestatus auf Änderungen und ändern Sie die Aktualisierungsrate entsprechend.

BatteryManager überträgt eine Aktion immer dann, wenn das Gerät verbunden ist oder nicht mit Strom versorgt. Es ist wichtig, dass du diese Ereignisse erhältst, auch wenn deine App vor allem, weil sich diese Ereignisse darauf auswirken sollten, wie oft Sie Ihre App starten, ein Hintergrundupdate initiieren. Daher sollten Sie ein BroadcastReceiver in Ihrem Manifest registrieren, um auf beide Ereignisse zu warten, indem Sie das Ereignis ACTION_POWER_CONNECTED und ACTION_POWER_DISCONNECTED in einem Intent-Filter.

<receiver android:name=".PowerConnectionReceiver">
  <intent-filter>
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
  </intent-filter>
</receiver>

Aktuellen Akkustand ermitteln

In einigen Fällen ist es auch hilfreich, den aktuellen Akkuladestand zu ermitteln. Sie können sich dafür entscheiden, Damit wird die Aktualisierungsgeschwindigkeit im Hintergrund aktualisiert, wenn der Akkustand unter einem bestimmten Niveau liegt.

Du kannst den aktuellen Akkustand ermitteln, indem du den aktuellen Akkuladestand entnimmst den Intent für den Akkustatus aus:

Kotlin

val batteryPct: Float? = batteryStatus?.let { intent ->
    val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
    val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
    level * 100 / scale.toFloat()
}

Java

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

float batteryPct = level * 100 / (float)scale;

Auf erhebliche Änderungen des Akkustands reagieren

Sie können den Akkustatus nicht ohne Weiteres ständig überwachen, das ist aber nicht erforderlich.

Generell sind die Auswirkungen der Überwachung des Akkuladestands stärker. als das normale Verhalten Ihrer App hat. Die Registrierung einer BroadcastReceiver im Manifest, um bei niedrigem Akkustand ausstehende Arbeiten abzubrechen, dienen in erster Linie dazu, den Akku stärker zu entladen. unmöglich, weil Android 8.0) Stattdessen können Sie Arbeitsbeschränkungen festlegen, die beschreiben, wann sie ausgeführt werden soll, So kann das System eine Entscheidung treffen, ohne dass Ihre App gestartet werden muss.

Es ist generell empfehlenswert, die Hintergrundupdates nicht auszuführen, wenn der Akku geladen ist. extrem niedrig. Es spielt keine Rolle, wie aktuell Ihre Daten sind, wenn das Smartphone sich selbst ausschaltet, bevor Sie die Sie nutzen können. Gehen Sie dazu wie folgt vor: WorkManager-Bibliothek verwenden mit einem BatteryNotLow-Einschränkung um anzugeben, dass die Arbeit nicht durchgeführt werden soll, wenn die Batterie schwach ist (zusätzlich zu NetworkType-Einschränkungen).

In vielen Fällen geschieht das Aufladen eines Geräts zusammen mit dem Einlegen in ein Dock. Die nächste erfahren Sie, wie Sie den aktuellen Status des Docks ermitteln und Änderungen am Gerät überwachen können. andocken.