Condividi tramite


Batteria

Browse sample. Esplorare l'esempio

Questo articolo descrive come usare l'interfaccia dell'interfaccia dell'interfaccia dell'app multipiattaforma .NET (.NET MAUI) IBattery per controllare le informazioni sulla batteria del dispositivo e monitorare le modifiche. Questa interfaccia fornisce anche informazioni sullo stato di risparmio energia del dispositivo, che indica se il dispositivo è in esecuzione in modalità a basso consumo.

L'implementazione predefinita dell'interfaccia IBattery è disponibile tramite la Battery.Default proprietà . Sia l'interfaccia che Battery la IBattery classe sono contenute nello spazio dei Microsoft.Maui.Devices nomi .

Introduzione

Per accedere alla funzionalità Battery è necessaria la configurazione specifica della piattaforma seguente.

L'autorizzazione BatteryStats è obbligatoria e deve essere configurata nel progetto Android. È possibile configurare l'autorizzazione nei modi seguenti:

  • Aggiungere l'autorizzazione basata su assembly:

    Aprire il file Platforms/Android/MainApplication.cs e aggiungere l'attributo assembly seguente dopo using le direttive:

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

    - oppure -

  • Aggiornare il manifesto Android:

    Aprire il file Platforms/Android/AndroidManifest.xml e aggiungere la riga seguente nel manifest nodo:

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

    - oppure -

  • Aggiornare il manifesto Android nell'editor del manifesto:

    In Visual Studio fare doppio clic sul file Platforms/Android/AndroidManifest.xml per aprire l'editor del manifesto Android. Quindi, in Autorizzazioni necessarie controllare l'autorizzazione BATTERY_STATS . Il file AndroidManifest.xml verrà aggiornato automaticamente.

Controllare lo stato della batteria

È possibile controllare lo stato della batteria accedendo alla Battery.Default proprietà , ovvero l'implementazione predefinita dell'interfaccia IBattery . Questa interfaccia definisce varie proprietà per fornire informazioni sullo stato della batteria, ad esempio ChargeLevel per leggere la quantità di batteria lasciata. La ChargeLevel proprietà restituisce un valore compreso tra 0,0 e 1,0, che indica rispettivamente il livello di carica della batteria da vuoto a pieno.

L'evento BatteryInfoChanged è disponibile anche e viene generato quando lo stato della batteria cambia. L'esempio seguente illustra come usare il monitoraggio dell'evento BatteryInfoChanged e segnalare lo stato della batteria ai Label controlli:

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

Modalità risparmio energia a basso consumo

I dispositivi eseguiti a batteria possono essere messi in modalità di risparmio energia a basso consumo. A volte i dispositivi vengono spostati automaticamente in questa modalità, ad esempio quando la batteria scende al di sotto del 20% di capacità. Il sistema operativo risponde alla modalità di risparmio energia riducendo le attività che tendono a scaricare la batteria. Le applicazioni possono contribuire evitando l'elaborazione in background o altre attività con un consumo elevato di energia, quando è attiva la modalità di risparmio energia.

Importante

Le applicazioni dovrebbero evitare l'elaborazione in background se lo stato di risparmio energia del dispositivo è attivo.

Lo stato del risparmio energia del dispositivo può essere letto accedendo alla EnergySaverStatus proprietà , ovvero On, Offo Unknown. Se lo stato è On, l'applicazione deve evitare l'elaborazione in background o altre attività che potrebbero consumare molta potenza.

La batteria genera l'evento EnergySaverStatusChanged quando la batteria entra o lascia la modalità risparmio energia. È anche possibile ottenere lo stato corrente del risparmio energia del dispositivo usando la EnergySaverStatus proprietà :

Nell'esempio di codice seguente viene monitorato lo stato del risparmio energia e viene impostata una proprietà di conseguenza.

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

Fonte di alimentazione

La PowerSource proprietà restituisce un'enumerazione BatteryPowerSource che indica la modalità di addebito del dispositivo, se necessario. Se non viene addebitato, lo stato è BatteryPowerSource.Battery. I BatteryPowerSource.ACvalori , BatteryPowerSource.Usbe BatteryPowerSource.Wireless indicano che la batteria viene caricata.

Nell'esempio di codice seguente viene impostato il testo di un Label controllo basato sull'alimentazione.

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

Differenze tra le piattaforme

Questa sezione descrive le differenze specifiche della piattaforma con la batteria.

Non esistono differenze per questa piattaforma.