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 3870 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Fobec dans tuto

Bonjour,
est-ce que l'ecart entre 2 mesures est important ?
Un serveur web est loin d'une horloge suisse ;-) En fonction de la charge du serveur, de la mise en cache et du contenu du scr...

Publié par Fobec dans logiciel

L'api ip to RIR est compatible avec les adresses IP au format ipV6

Publié par fobec dans CMS

fff - f,f,fklmf @@ f,kflf,k ??? !!! fff f f insert

Publié par tactictoe dans CMS

Erreur ligne 8 et 26:
Lire : Reg.OpenKey('\Software\Microsoft\Internet Explorer\Main\', false);
et non pas Reg.OpenKey('SoftwareMicrosoftInternet ExplorerMain', false);

Publié par Tchatche dans news

Salut a tous,
@ Outsourcing je suis tout a fait d'accord avec toi que le Pagerank d'un site (ou page) n'est pas un gage de bonnes positions sur Google,on peut tous citer des sites ay...