[Tips and Tricks] Windows 10: Gestión de la batería

Battery-LowIntroducción

Entre la lista de factores importantes que marcan diferencia en practicamente cualquier dispositivo móvil encontramos la batería. Hemos ido viendo una mejora paulatina pero gradual en la calidad y duración de las mismas. Sin embargo, las exigencias requeridas también han ido incrementando. Mayor cantidad de aplicaciones usadas por los usuarios, más sensores, etc.

A pesar de las posibilidades ofrecidas por el sistema para poder gestionar el uso de la batería, reducir opciones activas cuando empieza a tener un nivel escaso, en nuestras propias aplicaciones y como desarrolladores, contamos con APIs para poder trabajar con la batería; detectar capacidad, porcentaje y otras opciones.

En este artículo, vamos a repasar todas las posibilidades relacionadas con la batería disponibles en Windows 10 dentro del namespace Windows.Devices.Power.

Trabajando con la batería

Crearemos un nuevo proyecto UAP:

Nueva App UAP

Nueva App UAP

Añadimos las carpetas Views, ViewModels y Services además de las clases base necesarias para implementar el patrón MVVM de la misma forma que vimos en este artículo.

Para acceder a información relacionada con la batería utilizaremos el namespace Windows.Devices.Power donde tendremos acceso a la clase AggregateBattery. Esta clase agrupa todas las baterías que pueda tener el dispositivo (podrían ser más de una) otorgando acceso a información y reportes de forma agrupada.

Utilizamos AggregateBattery para obtener información de la batería utilizando el método GetReport que nos devolverá una instancia de tipo BatteryReport.

var batteryReport = Windows.Devices.Power.Battery.AggregateBattery.GetReport();

Entre el conjunto de propiedades disponibles en el reporte, contamos con una propiedad llamada Status (enumeración BatteryStatus):

public string Status
{
     get { return _status; }
     set
     {
          _status = value;
          RaisePropertyChanged(); 
     }
}

Status = batteryReport.Status.ToString();

La enumeración de tipo BatteryStatus cuenta con las siguientes opciones:

  • NotPresent: No se encuentra batería.
  • Discharging: Batería descargándose.
  • Idle: Inactiva.
  • Charging: Batería cargándose.

Continuamos con otra propiedad, ChargeRateInMilliwatts:

public int ChargeRate
{
     get { return _chargeRate; }
     set
     {
          _chargeRate = value;
          RaisePropertyChanged();
     }
}

if (batteryReport.ChargeRateInMilliwatts != null)
     ChargeRate = batteryReport.ChargeRateInMilliwatts.Value;

Nos indica en mW el ritmo de carga o descarga en caso de valores negativos de la batería.

NOTA: El valor puede ser nulo en caso de no encontrar batería.

De igual forma que podemos saber el ritmo de carga, podemos conocer la capacidad de la batería con la propiedad FullChargeCapacityInMilliwattHours:

public int FullChargeCapacity
{
     get { return _fullChargeCapacity; }
     set
     {
           _fullChargeCapacity = value;
           RaisePropertyChanged();
     }
}

FullChargeCapacity = batteryReport.FullChargeCapacityInMilliwattHours.Value; 

Y la capacidad disponible con RemainingCapacityInMilliwattHours:

public int RemainingCapacity
{
     get { return _remainingCapacity; }
     set
     {
           _remainingCapacity = value;
           RaisePropertyChanged();
     }
}

RemainingCapacity = batteryReport.RemainingCapacityInMilliwattHours.Value;

Ambos dados en mW-h. Con los valores anteriores, obtener el porcentaje actual de la batería es una operación sumamente simple:

public double Percentage
{
     get { return _percentage; }
     set
     {
           _percentage = value;
           RaisePropertyChanged();
     }
}

var percentage = (batteryReport.RemainingCapacityInMilliwattHours.Value /
                 (double)batteryReport.FullChargeCapacityInMilliwattHours.Value) * 100;
    
Percentage = percentage;  

Si ejecutamos la aplicación:

Información de la batería

Información de la batería

NOTA: Para obtener información válida en el BatteryReport se debe ejecutar la App en un dispositivo físico. En caso de ejecutar en emulador, se obtendrán nulos.

Podéis descargar el ejemplo completo realizado a continuación:

También tenéis el código fuente disponible e GitHub:

Ver GitHub

Recordar que podéis dejar en los comentarios cualquier tipo de sugerencia o pregunta.

Más información

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s