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

Publié par deefaze dans CMS

R := Byte(Color);
G := Byte(Color shr 8);
B := Byte(Color shr 16);

Publié par Josalado dans CMS

je n'arrive pas à installer le logiciel <br>Message d'erreur : l'assistant d'installation n'a pas pu créer le dossier C:\program Files\Olibul <br>...

Publié par MasterMbg dans java

Salut! merci pour le code, si tu y ajoutais des commentaires avant chaque module ce serait encore plus facilitant! merci infiniment...

Publié par Coll dans java

Excuse moi, mais pourrais tu expliquer un peu plus precisement ce que tu fais lorsque tu convertis en gris je comprends l'idee mais pas ce que chaque action fait precisement et le cacth a la fin. Parc...

Publié par fobec dans logiciel

MAJ: mise en cache du FAI et optimisation du script de Geolocalisation.