Bateria

Browse sample. Navegue pelo exemplo

Este artigo descreve como você pode usar a interface .NET Multi-platform App UI (.NET MAUI) IBattery para verificar as informações de bateria do dispositivo e monitorar se há alterações. Essa interface também fornece informações sobre o status de economia de energia do dispositivo, que indica se o dispositivo está sendo executado em um modo de baixo consumo de energia.

A implementação padrão da interface está disponível por meio da IBatteryBattery.Default propriedade. A interface e Battery a IBattery classe estão contidas no Microsoft.Maui.Devices namespace.

Introdução

Para acessar a funcionalidade Bateria, é necessária a seguinte configuração específica da plataforma.

A permissão BatteryStats é necessária e deve ser configurada no projeto do Android. Você pode configurar a permissão das seguintes maneiras:

  • Adicione a permissão baseada em assembly:

    Abra o arquivo Platforms/Android/MainApplication.cs e adicione o seguinte atributo assembly após using as diretivas:

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

    - ou -

  • Atualize o manifesto do Android:

    Abra o arquivo Platforms/Android/AndroidManifest.xml e adicione a seguinte linha no manifest nó:

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

    - ou -

  • Atualize o manifesto do Android no editor de manifesto:

    No Visual Studio, clique duas vezes no arquivo Platforms/Android/AndroidManifest.xml para abrir o editor de manifesto do Android. Em seguida, em Permissões necessárias, verifique a permissão BATTERY_STATS . Isso atualizará automaticamente o arquivo AndroidManifest.xml.

Verifique o status da bateria

O status da bateria pode ser verificado acessando a propriedade, que é a Battery.Default implementação padrão da IBattery interface. Essa interface define várias propriedades para fornecer informações sobre o estado da bateria, como ChargeLevel ler quanta bateria resta. A ChargeLevel propriedade retorna um valor entre 0,0 e 1,0, indicando o nível de carga da bateria de vazia para cheia, respectivamente.

O BatteryInfoChanged evento também está disponível e é gerado quando o estado da bateria muda. O exemplo a seguir demonstra como usar o evento monitorar o e relatar o BatteryInfoChanged status da bateria aos Label controles:

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

Modo de economia de energia de baixo consumo de energia

Os dispositivos que funcionam com baterias podem ser colocados em um modo de baixo consumo de energia. Às vezes, os dispositivos são alternados para esse modo automaticamente, como quando a bateria cai abaixo de 20% da capacidade. O sistema operacional responde ao modo de economia de energia reduzindo atividades que tendem a esgotar a bateria. Os aplicativos podem ajudar evitando o processamento em segundo plano ou outras atividades que consomem muita energia quando o modo de economia de energia está ativado.

Importante

Os aplicativos devem evitar o processamento em segundo plano se o status da economia de energia do dispositivo estiver ativado.

O status de economia de energia do dispositivo pode ser lido acessando a EnergySaverStatus propriedade, que é On, Offou Unknown. Se o status for On, o aplicativo deve evitar o processamento em segundo plano ou outras atividades que possam consumir muita energia.

A bateria aumenta o EnergySaverStatusChanged evento quando a bateria entra ou sai do modo de economia de energia. Você também pode obter o status atual de economia de energia do dispositivo usando a EnergySaverStatus propriedade:

O exemplo de código a seguir monitora o status de economia de energia e define uma propriedade de acordo.

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 de alimentação

A PowerSource propriedade retorna uma BatteryPowerSource enumeração que indica como o dispositivo está sendo carregado, se houver. Se não estiver sendo cobrado, o status é BatteryPowerSource.Battery. Os BatteryPowerSource.ACvalores , BatteryPowerSource.Usbe BatteryPowerSource.Wireless indicam que a bateria está sendo carregada.

O exemplo de código a seguir define o texto de um Label controle com base na fonte de energia.

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

Diferenças de plataforma

Esta seção descreve as diferenças específicas da plataforma com a bateria.

Sem diferenças entre plataformas.