Visualiser les propriétés de la batterie
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.