Publié le 09/03/2015
Auteur Fobec
Réseaux sociaux
0 partages
0 tweets
0 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 2897 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par claude77 dans tuto

Super application, fonctionne bien
exemple sur une image

Publié par coramarr dans java

Peut-on trouver des infos sur cette suite qui serait utilise en statistiques. Des documents ou ouvrages qui relatent les divers possibilites d'utilisation de cette suite.
Je suis un particulier ni...

Publié par mohinfo dans CMS

je vous demande un mini projet delphi pour gérer la base de donnée

Publié par fobec dans tuto

Effectivement, l'interface du site a evolue. Le lien de telechargement est ici: http://www.rainforestnet.com/download/sample.zip

Publié par ric dans CMS

c\'est la première fois que j\'utilise ce logiciel