Freigeben über


Akku

Browse sample. Durchsuchen Sie das Beispiel

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.