mercredi 15 août 2012

Accéder aux informations sur la batterie avec Windows Phone 8

Lorsque l’on développe une application pour téléphone mobile gourmande en énergie (jeu, lecture de vidéos, etc.) il est intéressant de disposer d’informations sur la batterie du téléphone. Cela permet d’optimiser l’application (désactivation de fonctionnalités non essentielles) ou informer l’utilisateur qu’il est peut-être temps qu’il sauvegarde sa partie en cours avant de tomber en panne de batterie.

Source d'alimentation

Windows Phone 7 n’aidait guère à la réalisation de ce genre de scénarios. La seule information disponible indiquait si le téléphone fonctionnait sur batterie ou était branché à une source d’alimentation. Cette information était fournie par la propriété PowerSource de la classe static DeviceStatus. L’évènement PowerSourceChanged nous informait du changement de valeur de cette propriété.

Voici un exemple d’utilisation de cette API :

using System;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Info;

namespace PhoneAppBatteryApi
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            Loaded += MainPageLoaded;
        }

        private void MainPageLoaded(object sender, RoutedEventArgs e)
        {
            // On veut être notifié quand la source d'alimentation du téléphone change.
            DeviceStatus.PowerSourceChanged += DeviceStatusPowerSourceChanged;

            DisplayPowerSource();
        }

        // Se produit lorsque la source d'alimentation du téléphone change.
        private void DeviceStatusPowerSourceChanged(object sender, EventArgs e)
        {
            DisplayPowerSource();
        }

        // Affichage de la source d'alimentation actuelle
        private void DisplayPowerSource()
        {
            if (DeviceStatus.PowerSource == PowerSource.Battery)
            {
                PowerSourceTextBlock.Text = 
                    "Le téléphone fonctionne sur batterie.";
            }
            else
            {
                PowerSourceTextBlock.Text = 
                    "Le téléphone est branché à une source d'alimentation externe.";
            }
        }
    }
}

Windows Phone 8 corrige ce manque avec de nouvelles API qui fournissent des informations sur le mode d’économie d’énergie ou l’état de la batterie.

Mode d’économie d’énergie

La classe PowerManager de l’espace de nom Windows.Phone.Devices.Power indique si le mode d’économie d’énergie du téléphone est activé ou non.

  • La propriété PowerSavingMode est une énumération qui peut prendre les valeurs PowerSavingMode.On ou PowerSavingMode.Off.
  • L’évènement PowerSavingModeChanged est levé quand le mode d’économie d’énergie change.

Voici un exemple d’utilisation de cette API :

using System.Windows;
using Microsoft.Phone.Controls;
using Windows.Phone.System.Power;

namespace PhoneAppBatteryApi
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            Loaded += MainPageLoaded;
        }

        private void MainPageLoaded(object sender, RoutedEventArgs e)
        {
            // On veut être notifié quand le mode d'économie d'énergie
            // de la batterie du téléphone est changé.
            PowerManager.PowerSavingModeChanged += PowerManagerPowerSavingModeChanged;

            DisplayPowerSavingMode();
        }

        // Se produit lorsque le mode d'économie d'énergie de la batterie du téléphone est changé.
        private void PowerManagerPowerSavingModeChanged(object sender, object e)
        {
            DisplayPowerSavingMode();
        }

        // Affichage du mode d'économie d'énergie de la batterie 
        private void DisplayPowerSavingMode()
        {
            if (PowerManager.PowerSavingMode == PowerSavingMode.On)
            {
                PowerSavingModeTextBlock.Text = "Mode d'économie d'énergie actif";
            }
            else
            {
                PowerSavingModeTextBlock.Text = "Mode d'économie d'énergie non actif";
            }
        }
    }
}

Etat de la batterie

La deuxième nouveauté se situe dans l’espace de nom Windows.Phone.Devices.Power avec la classe Battery qui fournie des informations sur l’état de la batterie du téléphone.

  • La propriété RemainingChargePercent indique le pourcentage de charge restante dans la batterie.
  • La propriété RemainingDischargeTime indique une estimation du temps restant avant que la batterie du téléphone soit totalement déchargée.
  • L’évènement RemainingChargePercentChanged est levé lorsque la valeur de la propriété RemainingChargePercent diminue de 1%.

Voici un exemple d’utilisation de cette API :

using System.Windows;
using Microsoft.Phone.Controls;
using Windows.Phone.Devices.Power;

namespace PhoneAppBatteryApi
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            Loaded += MainPageLoaded;
        }

        private void MainPageLoaded(object sender, RoutedEventArgs e)
        {
            // On veut être notifié quand le niveau de batterie diminue.
            Battery.GetDefault().RemainingChargePercentChanged += RemainingChargePercentChanged;

            DisplayBatteryStatus();
        }

        // Se produit lorsque la valeur de RemainingChargePercent diminue de 1 %.
        private void RemainingChargePercentChanged(object sender, object e)
        {
            DisplayBatteryStatus();
        }

        private void DisplayBatteryStatus()
        {
            // Obtient une valeur qui indique le pourcentage de la charge restante
            // sur la batterie du téléphone.
            RemainingChargePercentTextBlock.Text = 
                string.Format("{0} %", Battery.GetDefault().RemainingChargePercent);

            // Obtient une valeur qui estime le temps restant avant que
            // la batterie du téléphone soit complètement déchargée.
            RemainingDischargeTimeTextBlock.Text = 
                string.Format("il reste {0} heure(s) de batterie", 
                    Battery.GetDefault().RemainingDischargeTime.TotalHours);
        }
    }
}

Attention, l’utilisation de ces API sur l’émulateur Windows Phone donnera des résultats quelque peu étranges, vérifiez donc leur utilisation au sein de votre application sur un véritable appareil.

Aucun commentaire:

Enregistrer un commentaire