Publié le 09/03/2015
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
2 plus
0 commentaires

Lire l'etat et le pourcentage de la batterie

Android dispose d'une API complète pour lire l'état de la batterie. En effet, les fonctions accessibles dans BatteryManager permette de connaitre le niveau de charge, la température et le tension de la batterie. De plus, ces données sont obtenues grace un listener qui se déclenche dès qu'une de ces valeurs est modifiée.

Visualiser les propriétés de la batterie

1163-batterie-charge

L'interface graphique de controle de l'état de la batterie est constituée d'un TextView dans lequel les valeurs sont affichées. L'application tourne en permanence pour mesurer les données suivantes:

alimentation
: le type de l'alimentation est détecté, secteur, usb ou batterie,
niveau de charge: un pourcentage compris en 0 % et 100 %
température: en général la température oscille autour de 30 °C,
tension: la tension varie si le téléphone est en charge ou non, au alentour de 4 volts.
santé: santé de la batterie, les diagnostiques repèrent les surchauffes et les surtensions,
technologie: le type de batterie utilisé dans l’appareil mobile.


Layout de lecture de la batterie

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:id="@+id/widget32"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TextView
        android:id="@+id/textViewAbout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Demo de lecture des propriétés de la batterie n@Fobec.com"
        android:padding="10dip"
        android:background="#666"
        android:textAppearance="?android:attr/textAppearanceLarge"/>
    <TextView
        android:id="@+id/textViewBatteryInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BatteryInfo: "
    android:textAppearance="?android:attr/textAppearanceLarge"/>
</LinearLayout>

Recevoir les notifications sur la batterie

Pour lire les informations sur la batterie, Android a prévu un service sur lequel on peut se brancher. En effet, la lecture passe par un listener BroadcastReceiver que l'on active sur l'évenement Intent.ACTION_BATTERY_CHANGED. A chaque fois, l'application recoit les données qu'il convient de décoder puis d'afficher dans l'interface graphique.
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Bundle;
import android.widget.TextView;
 
/**
 * Lire l'etat et le pourcentage de la batterie
 * http://www.fobec.com/java/1163/lire-etat-pourcentage-batterie.html
 * @author Fobec 03/2015
 */
public class MainActivity extends Activity {
 
    private TextView tvBatteryProperty;
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tvBatteryProperty = (TextView) findViewById(R.id.textViewBatteryInfo);
        //Enregistrer le listener sur l'evenement de la batterie
        this.registerReceiver(this.batteryPropertyReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }
 
    @Override
    public void onDestroy() {
        super.onDestroy();
        //Supprimer le listener sur l'evenement de la batterie
        this.unregisterReceiver(this.batteryPropertyReceiver);
    }
 
    private BroadcastReceiver batteryPropertyReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //Lire les propriétés de la batterie
            int health = intent.getIntExtra(BatteryManager.EXTRA_HEALTH, 0);            
            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
            int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
            String technology = intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY);
            int temperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0);
            int voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, 0);
            //pas utilisé dans l'exemple
            int icon = intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, 0);
            int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, 0);
            boolean isPresent = intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
 
            //Type d'alimentation
            String sPlugged = "";
            if (plugged == BatteryManager.BATTERY_PLUGGED_AC) {
                sPlugged = "En charge (secteur)";
            } else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) {
                sPlugged = "En charge (USB)";
            } else if (plugged == 0) {
                sPlugged = "Mode batterie";
            } else {
                sPlugged = "Inconnu";
            }
 
            /** Tension **/
            String sVoltage = "";
            sVoltage = String.valueOf((float) voltage / 1000) + " V";
 
            /** Température **/
            String sTemp = String.valueOf((float) temperature / 10) + " °C";
 
            /** Niveau de charge **/
            String sLoad = String.valueOf(level) + " %";
 
            //Santé de la batterie
            String sHealth = "";
            switch (health) {
                case BatteryManager.BATTERY_HEALTH_DEAD:
                    sHealth = "Morte";
                    break;
                case BatteryManager.BATTERY_HEALTH_GOOD:
                    sHealth = "Bonne";
                    break;
                case BatteryManager.BATTERY_HEALTH_OVERHEAT:
                    sHealth = "En surchauffe";
                    break;
                case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
                    sHealth = "Surtension";
                    break;
                default:
                    sHealth = "Non spécifié";
                    break;
            }
 
            tvBatteryProperty.setText(
                    "Alimentation: " + sPlugged + "n" 
                    + "Niveau de charge: " + sLoad + "n"
                    + "Santé de la batterie: " + sHealth + "n"
                    + "Température: " + sTemp + "n"
                    + "Tension: " + sVoltage + "n" 
                    + "Technologie: " + technology + "n"                    
                    );
        }
    };
}

Et voila comment suivre l'état de la batterie de son appareil mobile. Certaines applications vont plus loin en détectant les services qui consomment beaucoup de ressources ou en estimant le temps de charge nécessaire pour recharger la batterie.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - android
Mise a jour
09/03/2015
Visualisation
vu 2095 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par troops28 dans CMS

C un truc qui va plaire ca ;) enfin j'espere
En ajoutant :
if ColWidths[i] < Canvas.TextWidth(strTemp) then ColWidths[i] := Canvas.TextWidth(strTemp)+10;

Dans la procedure LoadStr...

Publié par Fobec dans php5

Le code PHP sur les boucles a ete corrige dans l'article.
Merci Etiazam !

Publié par vieux dans CMS

et comment ce le procurent ton ?

Publié par foufou0406 dans CMS

merci !!!

Publié par Axel dans java

Bonjour Kezouille,
je viens de tester sur notre LAN (serveur Windows 7), la surveillance a l'air de marcher.
De votre cote, s'agit-il d'un serveur sous Windows ou sous Linux ?
Pouvez-vou...