Akku
In diesem Artikel wird beschrieben, wie Sie die .NET Multi-Platform App UI (.NET MAUI) IBattery-Schnittstelle verwenden können, um die Akkuinformationen des Geräts zu überprüfen und auf Änderungen zu überwachen. Diese Schnittstelle stellt auch Informationen zum Energiesparstatus des Geräts bereit, der angibt, ob sich das Gerät im Energiesparmodus befindet.
Die Standardimplementierung der IBattery
-Schnittstelle ist über die Battery.Default-Eigenschaft verfügbar. Die IBattery
-Schnittstelle sowie die Battery
-Klasse sind im Microsoft.Maui.Devices
-Namespace enthalten.
Erste Schritte
Für den Zugriff auf die Akku-Funktion ist die folgende plattformspezifische Einrichtung erforderlich.
Die Berechtigung BatteryStats
ist obligatorisch und muss im Android-Projekt konfiguriert werden. Sie können die Berechtigung auf folgende Weise konfigurieren:
Fügen Sie die assemblybasierte Berechtigung hinzu:
Öffnen Sie die Datei Platforms/Android/MainApplication.cs, und fügen Sie das folgende Assemblyattribut nach
using
-Direktiven hinzu:[assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
- oder -
Aktualisieren Sie das Android-Manifest:
Öffnen Sie die Datei Platforms/Android/AndroidManifest.xml, und fügen Sie die folgende Zeile zum Knoten
manifest
hinzu:<uses-permission android:name="android.permission.BATTERY_STATS" />
- oder -
Aktualisieren Sie das Android-Manifest im Manifest-Editor:
Doppelklicken Sie in Visual Studio auf die Datei Platforms/Android/AndroidManifest.xml, um den Android-Manifest-Editor zu öffnen. Überprüfen Sie dann unter Erforderliche Berechtigungen die Berechtigung BATTERY_STATS. Dadurch wird die Datei AndroidManifest.xml automatisch aktualisiert.
Überprüfen des Akkustands
Der Akkustatus kann durch Zugriff auf die Battery.Default
-Eigenschaft überprüft werden, bei der es sich um die Standardimplementierung der IBattery
-Schnittstelle handelt. Diese Schnittstelle definiert verschiedene Eigenschaften, um Informationen zum Zustand des Akkus bereitzustellen, z. B. ChargeLevel, um abzulesen, wie viel Akku übrig ist. Die ChargeLevel
-Eigenschaft gibt einen Wert zwischen 0,0 und 1,0 zurück, der den Ladestand des Akkus von leer bis vollständig angibt.
Das BatteryInfoChanged-Ereignis ist auch verfügbar und wird ausgelöst, wenn sich der Zustand des Akkus ändert. Im folgenden Beispiel wird veranschaulicht, wie das BatteryInfoChanged
-Ereignis verwendet und der Akkustand an Label-Steuerelemente gemeldet wird:
private void BatterySwitch_Toggled(object sender, ToggledEventArgs e) =>
WatchBattery();
private bool _isBatteryWatched;
private void WatchBattery()
{
if (!_isBatteryWatched)
{
Battery.Default.BatteryInfoChanged += Battery_BatteryInfoChanged;
}
else
{
Battery.Default.BatteryInfoChanged -= Battery_BatteryInfoChanged;
}
_isBatteryWatched = !_isBatteryWatched;
}
private void Battery_BatteryInfoChanged(object sender, BatteryInfoChangedEventArgs e)
{
BatteryStateLabel.Text = e.State switch
{
BatteryState.Charging => "Battery is currently charging",
BatteryState.Discharging => "Charger is not connected and the battery is discharging",
BatteryState.Full => "Battery is full",
BatteryState.NotCharging => "The battery isn't charging.",
BatteryState.NotPresent => "Battery is not available.",
BatteryState.Unknown => "Battery is unknown",
_ => "Battery is unknown"
};
BatteryLevelLabel.Text = $"Battery is {e.ChargeLevel * 100}% charged.";
}
Energiesparmodus mit geringem Stromverbrauch
Für Geräte, die mit Akku betrieben werden, lässt sich der Energiesparmodus aktivieren. Manchmal werden Geräte automatisch in diesen Modus umgeschaltet, z.B. wenn der Akku unter 20 % fällt. Das Betriebssystem reagiert auf den Energiesparmodus, indem Aktivitäten reduziert werden, die den Akku stark beanspruchen. Anwendungen können unterstützend wirken, indem sie Hintergrundverarbeitung oder andere Hochleistungsaktivitäten im Energiesparmodus vermeiden.
Wichtig
Anwendungen sollten Hintergrundverarbeitung vermeiden, wenn der Energiesparmodus des Geräts aktiviert ist.
Der Energiesparmodus des Geräts kann gelesen werden, indem auf die EnergySaverStatus-Eigenschaft zugegriffen wird, die entweder On, Off oder Unknown ist. Wenn der Status On
ist, sollte die Anwendung Hintergrundverarbeitung oder andere Aktivitäten vermeiden, die ggf. viel Energie verbrauchen.
Der Akku löst das EnergySaverStatusChanged-Ereignis aus, wenn der Akku in den Energiesparmodus wechselt oder ihn verlässt.
Sie können auch den aktuellen Energiesparstatus des Geräts über die statische EnergySaverStatus
-Eigenschaft ermitteln:
Im folgenden Codebeispiel wird der Energiesparmodus überwacht und eine Eigenschaft entsprechend festgelegt.
private bool _isBatteryLow = false;
private void BatterySaverSwitch_Toggled(object sender, ToggledEventArgs e)
{
// Capture the initial state of the battery
_isBatteryLow = Battery.Default.EnergySaverStatus == EnergySaverStatus.On;
BatterySaverLabel.Text = _isBatteryLow.ToString();
// Watch for any changes to the battery saver mode
Battery.Default.EnergySaverStatusChanged += Battery_EnergySaverStatusChanged;
}
private void Battery_EnergySaverStatusChanged(object sender, EnergySaverStatusChangedEventArgs e)
{
// Update the variable based on the state
_isBatteryLow = Battery.Default.EnergySaverStatus == EnergySaverStatus.On;
BatterySaverLabel.Text = _isBatteryLow.ToString();
}
Stromquelle
Die PowerSource-Eigenschaft gibt eine BatteryPowerSource-Aufzählung zurück, die angibt, wie das Gerät geladen wird. Wenn es nicht geladen wird, lautet der Status BatteryPowerSource.Battery. Die Werte BatteryPowerSource.AC, BatteryPowerSource.Usb und BatteryPowerSource.Wireless geben an, dass der Akku geladen wird.
Im folgenden Codebeispiel wird der Text eines Label-Steuerelements basierend auf der Energiequelle festgelegt.
private void SetChargeModeLabel()
{
BatteryPowerSourceLabel.Text = Battery.Default.PowerSource switch
{
BatteryPowerSource.Wireless => "Wireless charging",
BatteryPowerSource.Usb => "USB cable charging",
BatteryPowerSource.AC => "Device is plugged in to a power source",
BatteryPowerSource.Battery => "Device isn't charging",
_ => "Unknown"
};
}
Plattformunterschiede
In diesem Abschnitt werden die plattformspezifischen Unterschiede beim Akku beschrieben.
Keine Plattformunterschiede.