Udostępnij za pośrednictwem


Akumulator

Browse sample. Przeglądanie przykładu

W tym artykule opisano sposób używania interfejsu użytkownika aplikacji wieloplatformowej platformy .NET (.NET MAUI) IBattery do sprawdzania informacji o baterii urządzenia i monitorowania pod kątem zmian. Ten interfejs zawiera również informacje o stanie oszczędzania energii urządzenia, co wskazuje, czy urządzenie jest uruchomione w trybie niskiego zasilania.

Domyślna implementacja interfejsu IBattery jest dostępna za pośrednictwem Battery.Default właściwości . Zarówno interfejs, jak IBattery i Battery klasa są zawarte w Microsoft.Maui.Devices przestrzeni nazw.

Rozpocznij

Aby uzyskać dostęp do funkcji baterii , wymagana jest następująca konfiguracja specyficzna dla platformy.

Uprawnienie BatteryStats jest wymagane i musi być skonfigurowane w projekcie systemu Android. Uprawnienie można skonfigurować na następujące sposoby:

  • Dodaj uprawnienie oparte na zestawie:

    Otwórz plik Platforms/Android/MainApplication.cs i dodaj następujący atrybut zestawu po using dyrektywach:

    [assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
    

    - lub -

  • Zaktualizuj manifest systemu Android:

    Otwórz plik Platforms/Android/AndroidManifest.xml i dodaj następujący wiersz w węźlemanifest:

    <uses-permission android:name="android.permission.BATTERY_STATS" />
    

    - lub -

  • Zaktualizuj manifest systemu Android w edytorze manifestu:

    W programie Visual Studio kliknij dwukrotnie plik Platforms/Android/AndroidManifest.xml , aby otworzyć edytor manifestu systemu Android. Następnie w obszarze Wymagane uprawnienia sprawdź uprawnienia BATTERY_STATS . Spowoduje to automatyczne zaktualizowanie pliku AndroidManifest.xml .

Sprawdzanie stanu baterii

Stan baterii można sprawdzić, korzystając Battery.Default z właściwości , która jest domyślną implementacją interfejsu IBattery . Ten interfejs definiuje różne właściwości, aby zapewnić informacje o stanie baterii, takie jak ChargeLevel odczytywanie ilości baterii. Właściwość ChargeLevel zwraca wartość z zakresu od 0,0do 1,0, co wskazuje odpowiednio poziom naładowania baterii z pustego na pełny.

Zdarzenie BatteryInfoChanged jest również dostępne i jest wywoływane po zmianie stanu baterii. W poniższym przykładzie pokazano, jak użyć monitora BatteryInfoChanged zdarzenia i zgłosić stan baterii do Label sterowania:

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.";
}

Tryb oszczędzania energii o niskiej mocy

Urządzenia, które działają na bateriach, można umieścić w trybie oszczędzania energii o niskiej mocy. Czasami urządzenia są przełączane do tego trybu automatycznie, na przykład gdy bateria spadnie poniżej 20% pojemności. System operacyjny reaguje na tryb oszczędzania energii, zmniejszając działania, które mają tendencję do wyczerpania baterii. Aplikacje mogą pomóc, unikając przetwarzania w tle lub innych działań o wysokiej mocy, gdy jest włączony tryb oszczędzania energii.

Ważne

Aplikacje powinny unikać przetwarzania w tle, jeśli stan oszczędzania energii urządzenia jest włączony.

Stan oszczędzania energii urządzenia można odczytać, korzystając EnergySaverStatus z właściwości , czyli On, Offlub Unknown. Jeśli stan to On, aplikacja powinna unikać przetwarzania w tle lub innych działań, które mogą zużywać dużo mocy.

Bateria podnosi EnergySaverStatusChanged zdarzenie, gdy bateria wchodzi lub opuszcza tryb oszczędzania energii. Możesz również uzyskać bieżący stan oszczędzania energii urządzenia przy użyciu EnergySaverStatus właściwości :

Poniższy przykład kodu monitoruje stan oszczędzania energii i ustawia odpowiednio właściwość.

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();
}

Źródło zasilania

Właściwość PowerSource zwraca BatteryPowerSource wyliczenie wskazujące sposób naliczania opłat za urządzenie, jeśli w ogóle. Jeśli nie są naliczane opłaty, stan to BatteryPowerSource.Battery. Wartości BatteryPowerSource.AC, BatteryPowerSource.Usbi BatteryPowerSource.Wireless wskazują, że bateria jest ładowana.

Poniższy przykład kodu ustawia tekst kontrolki Label na podstawie źródła zasilania.

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"
    };
}

Różnice między platformami

W tej sekcji opisano różnice specyficzne dla platformy dotyczące baterii.

Brak różnic między platformami.