Batería
En este artículo se describe cómo puedes usar la interfaz IBattery de .NET Multi-platform App UI (.NET MAUI) para comprobar la información de la batería del dispositivo y supervisar los cambios. Esta interfaz también proporciona información sobre el estado de ahorro de energía del dispositivo, que indica si este se ejecuta en modo de bajo consumo energético.
La implementación predeterminada de la interfaz IBattery
está disponible a través de la propiedad Battery.Default. Tanto la interfaz IBattery
como la clase Battery
están contenidas en el espacio de nombres Microsoft.Maui.Devices
.
Introducción
Para acceder a la funcionalidad de Battery, se requiere la siguiente configuración específica para la plataforma.
El permiso BatteryStats
es necesario y se debe configurar en el proyecto Android. Puedes establecer el permiso de las maneras siguientes:
Agrega el permiso basado en ensamblados:
Abre el archivo Platforms/Android/MainApplication.cs y agrega el siguiente atributo de ensamblado después
using
de las directivas:[assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
- o -
Actualiza el manifiesto de Android:
Abre el archivo Platforms/Android/AndroidManifest.xml y agrega la siguiente línea en el nodo
manifest
:<uses-permission android:name="android.permission.BATTERY_STATS" />
- o -
Actualiza el manifiesto de Android en el editor de manifiestos:
En Visual Studio, haz doble clic en el archivo Platforms/Android/AndroidManifest.xml para abrir el editor de manifiestos de Android. Después, en Permisos necesarios, comprueba el permiso BATTERY_STATS . Esto actualizará automáticamente el archivo AndroidManifest.xml.
Comprueba el nivel de la batería
El estado de la batería se puede comprobar accediendo a la propiedad Battery.Default
, que es la implementación predeterminada de la interfaz IBattery
. Esta interfaz define varias propiedades para proporcionar información sobre el estado de la batería, como ChargeLevel para leer la cantidad de batería que queda. La propiedad ChargeLevel
devuelve un valor entre 0,0 y 1,0, que indica el nivel de carga de la batería de vacío a lleno, respectivamente.
El evento BatteryInfoChanged también está disponible y se genera cuando cambia el estado de la batería. En el ejemplo siguiente se muestra cómo usar el monitor del evento BatteryInfoChanged
y notificar el estado de la batería a los controles Label:
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 ahorro de energía de bajo consumo
Es posible poner los dispositivos que usan baterías en el modo de ahorro en caso de baja energía. A veces, los dispositivos cambian automáticamente a este modo, por ejemplo, cuando la batería cae por debajo del 20 % de su capacidad. El sistema operativo responde al modo de ahorro de energía reduciendo las actividades que tienden a agotar la batería. Para ayudar, las aplicaciones pueden evitar el procesamiento en segundo plano u otras actividades de alta potencia cuando el modo de ahorro de energía está activado.
Importante
Las aplicaciones deben evitar el procesamiento en segundo plano si el estado de ahorro de energía del dispositivo está activado.
El estado del ahorro de energía del dispositivo se puede leer accediendo a la propiedad EnergySaverStatus, que es On, Off o Unknown. Si la propiedad devuelve On
, la aplicación debe evitar el procesamiento en segundo plano o cualquier otra actividad que pueda tener un consumo energético grande.
La batería genera el evento EnergySaverStatusChanged cuando la batería entra en el modo de ahorro de energía o sale de este.
También puedes conocer el estado de ahorro de energía actual del dispositivo con la propiedad EnergySaverStatus
:
En el ejemplo de código siguiente se supervisa el estado del ahorro de energía y se establece una propiedad en función de este.
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();
}
Fuente de alimentación
La propiedad PowerSource devuelve una enumeración BatteryPowerSource que indica cómo se está cargando el dispositivo, en caso de estar haciéndose. Si no se está cargando, el estado es BatteryPowerSource.Battery. Los valores BatteryPowerSource.AC, BatteryPowerSource.Usb y BatteryPowerSource.Wireless indican que la batería se está cargando.
En el ejemplo de código siguiente se establece el texto de un control Label basado en la fuente de alimentación.
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"
};
}
Diferencias entre plataformas
En esta sección se describen las diferencias específicas de la plataforma con la batería.
No hay diferencias entre las plataformas.