The battery API is quite impressive, between other things not only can you get a battery’s voltage but you can also get the temperature, status and even an icon representing the current state of the battery.
In this post we’ll make an app that display’s all of the device’s battery information in a text view whenever there is a change of state in the battery.
The App’s Interface
Our interface will consists of a simple text view where we will show the battery’s information and an image view where we will display the battery’s current state using the image provided by the API to do this.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textViewBatteryInfo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Battery Info: " /> <ImageView android:id="@+id/imageViewBatteryState" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon" /> </LinearLayout>
This is how the app will look.

the result: an app showing the device's battery information
Receiving Battery Updates
In order to receive the updated information from the battery we need to register a broadcast receiver and an intent filter. An intent filter tells the native battery app that our app is listening for its changes.
This is how we register a receiver with an intent filter:
this.registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
In the code above the receiver is an object we are going to make called batteryInfoReceiver, the intent filter is listening for the action battery changed.
Our receiver object is the following:
private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // this is where we deal with the data sent from the battery. } };
Battery Manager API
If you look at the battery manager api yo see that it has many constants that start with the word EXTRA_, these extras is the data we are able to get from the battery and also the type (int, String etc).
int health= intent.getIntExtra(BatteryManager.EXTRA_HEALTH,0); int icon_small= intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0); int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0); int plugged= intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,0); boolean present= intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); int scale= intent.getIntExtra(BatteryManager.EXTRA_SCALE,0); int status= intent.getIntExtra(BatteryManager.EXTRA_STATUS,0); String technology= intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); int temperature= intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0); int voltage= intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,0);
We can easily display the data in the views, the icon_small variable holds a resource id with the battery’s image:
batteryInfo.setText( "Health: "+health+"\n"+ "Icon Small:"+icon_small+"\n"+ "Level: "+level+"\n"+ "Plugged: "+plugged+"\n"+ "Present: "+present+"\n"+ "Scale: "+scale+"\n"+ "Status: "+status+"\n"+ "Technology: "+technology+"\n"+ "Temperature: "+temperature+"\n"+ "Voltage: "+voltage+"\n"); imageBatteryState.setImageResource(icon_small);
This is the full Java code.
package com.yoursite.batteryinformation; 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.ImageView; import android.widget.TextView; public class BatteryInformation extends Activity { private TextView batteryInfo; private ImageView imageBatteryState; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); batteryInfo=(TextView)findViewById(R.id.textViewBatteryInfo); imageBatteryState=(ImageView)findViewById(R.id.imageViewBatteryState); this.registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); } private BroadcastReceiver batteryInfoReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int health= intent.getIntExtra(BatteryManager.EXTRA_HEALTH,0); int icon_small= intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,0); int level= intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0); int plugged= intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,0); boolean present= intent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); int scale= intent.getIntExtra(BatteryManager.EXTRA_SCALE,0); int status= intent.getIntExtra(BatteryManager.EXTRA_STATUS,0); String technology= intent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); int temperature= intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0); int voltage= intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,0); batteryInfo.setText( "Health: "+health+"\n"+ "Icon Small:"+icon_small+"\n"+ "Level: "+level+"\n"+ "Plugged: "+plugged+"\n"+ "Present: "+present+"\n"+ "Scale: "+scale+"\n"+ "Status: "+status+"\n"+ "Technology: "+technology+"\n"+ "Temperature: "+temperature+"\n"+ "Voltage: "+voltage+"\n"); imageBatteryState.setImageResource(icon_small); } }; }
Battery Permissions
No special permissions are needed in the manifest file.
No related posts.