Android电池信息获取

Android 可以通过BroadcastReceiver来获取电池信息改变的广播(ACTION_BATTERY_CHANGED),从而获取到相关的电池信息。

电池信息,及其对应的相关常数(参考网址:http://blog.sina.com.cn/s/blog_5d2e69770102vh59.html)

电池信息 类型 备注
status int 取得电池的状态,返回的状态类型由 android.os.BatteryManager 类定义的常量所决定,包括:
电池充电状态( BATTERY_STATUS_CHARGING
电池放电状态( BATTERY_STATUS_DISCHARGING 
电池满电状态( BATTERY_STATUS_FULL
电池不充电状态( BATTERY_STATUS_NOT_CHARGING 
电池未知状态( BATTERY_STATUS_UNKNOWN
health int 取得电池的健康状态,返回的状态类型由 android.os.BatteryManager 类定义的常量所决定,包括:
电池损坏( BATTERY_HEALTH_DEAD
电池健康( BATTERY_HEALTH_GOOD
电池过热( BATTERY_HEALTH_OVERHEAT
电池电压过大( BATTERY_HEALTH_OVER_VOLTAGE
未知状态( BATTERY_HEALTH_UNKOWN
未明示故障( BATTERY_HEALTH_UNSPECIFIED_FAILURE 
present boolean 判断当前是否存在电池
level int 取得电池的剩余容量
scale int 取得电池的总容量,通常为 100
Icon-small int 取得电池对应的图标 ID
plugged int 连接的电源插座类型,返回的状态由 android.os.BatteryManager 类定义的常量所决定,包括:
USB 电源( BATTERY_PLUGGED_USB
交流电电源( BATTERY_PLUGGED_AC
voltage int 取得电池的电压
temperature int 取得电池的温度,单位是摄氏度
technology String 取得电池的类型

 

 

获取电池信息的步骤:

(1) 创建BroadcastReceiver,用于结束电池信息变化的广播

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {  
    @Override  
    public void onReceive(Context context, Intent intent) {  
        String action = intent.getAction();  
        if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {  
           //TO GET BatteryInfo
        }                

(2) 重写onResume()方法,获取IntentFilter对象,并注册BroadcastReceiver

	protected void onResume() {
		IntentFilter filter = new IntentFilter();  
		filter.addAction(Intent.ACTION_BATTERY_CHANGED);  
		registerReceiver(mBroadcastReceiver, filter);
		super.onResume(); 
	}

(3)程序在后台的时候取消注册BroadcastReceiver

	protected void onPause() {
		unregisterReceiver(mBroadcastReceiver); 
		super.onPause();
	}

 

实例:

public class GetBatteryInfo extends Activity {
	private static final int REFRESH_TIME = 1;
	private static boolean runtime=false;
	private TextView mStatus_BatteryInfo;
	private TextView mPlugged_BatteryInfo;
	private TextView mLevel_BatteryInfo;
	private TextView mScale_BatteryInfo;
	private TextView mVoltage_BatteryInfo;
	private TextView mTemperature_BatteryInfo;
	private TextView mTechnology_BatteryInfo;
	private TextView mHealth_BatteryInfo;
	private TextView mRuntime_BatteryInfo;
	private TimeThread timeThread;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		InitView();
	}
	
	private void InitView() {
		mStatus_BatteryInfo=(TextView)findViewById(R.id.status_BatteryInfo);
		mPlugged_BatteryInfo=(TextView)findViewById(R.id.plugged_BatteryInfo);
		mLevel_BatteryInfo=(TextView)findViewById(R.id.level_BatteryInfo);
		mScale_BatteryInfo=(TextView)findViewById(R.id.scale_BatteryInfo);
		mVoltage_BatteryInfo=(TextView)findViewById(R.id.voltage_BatteryInfo);
		mTemperature_BatteryInfo=(TextView)findViewById(R.id.temperature_BatteryInfo);
		mTechnology_BatteryInfo=(TextView)findViewById(R.id.technology_BatteryInfo);
		mHealth_BatteryInfo=(TextView)findViewById(R.id.health_BatteryInfo);
		mRuntime_BatteryInfo=(TextView)findViewById(R.id.runtime_BatteryInfo);
	}

	@Override
	protected void onResume() {
		IntentFilter filter = new IntentFilter();  
		filter.addAction(Intent.ACTION_BATTERY_CHANGED);  
		registerReceiver(mBroadcastReceiver, filter);
		startTimeThread(timeThread);
		super.onResume(); 
	}
	
	@Override
	protected void onPause() {
		stopTimeThread(timeThread);
		unregisterReceiver(mBroadcastReceiver); 
		super.onPause();
	}
	
	/**
	 * @param milliseconds 将ms转化为hh:mm:ss 格式时间
	 * @return
	 */
	private String msToTime(int milliseconds ){
		int allSeconds=(milliseconds/1000);
		int hours=allSeconds/3600;
		String hours_string;
		int feelSeconds=allSeconds%3600;
		int mimute=feelSeconds/60;
		String mimute_string;
		String second_string;
		int second=feelSeconds%60;
		if(hours<10){
			hours_string="0"+String.valueOf(hours);
		}else{
			hours_string=String.valueOf(hours);
		}
		if(mimute<10){
			mimute_string="0"+String.valueOf(mimute);
		}else{
			mimute_string=String.valueOf(mimute);
		}
		if(second<10){
			second_string="0"+String.valueOf(second);
		}else{
			second_string=String.valueOf(second);
		}
		return hours_string+":"+mimute_string+":"+second_string;
	}
	
	private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {  
		@Override  
		public void onReceive(Context context, Intent intent) {  
		String action = intent.getAction();  
		if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {  
		int status = intent.getIntExtra("status", 0);  
		int health = intent.getIntExtra("health", 0);  
		int level = intent.getIntExtra("level", 0);  
		int scale = intent.getIntExtra("scale", 0);  
		int plugged = intent.getIntExtra("plugged", 0);  
		int voltage = intent.getIntExtra("voltage", 0);  
		int temperature = intent.getIntExtra("temperature", 0);  
		String technology = intent.getStringExtra("technology");  
		mLevel_BatteryInfo.setText(level+"");
		mScale_BatteryInfo.setText(scale+"");
		mVoltage_BatteryInfo.setText(voltage+"mV");
		mTemperature_BatteryInfo.setText(((float)temperature/10)+"℃");
		mTechnology_BatteryInfo.setText(technology+"");
		mRuntime_BatteryInfo.setText(msToTime((int) SystemClock.elapsedRealtime()));
		switch (status) {  
		case BatteryManager.BATTERY_STATUS_UNKNOWN:  
		mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_UNKNOWN));  
		break;  
		case BatteryManager.BATTERY_STATUS_CHARGING:  
			mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_CHARGING));  
		break;  
		case BatteryManager.BATTERY_STATUS_DISCHARGING:  
			mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_DISCHARGING));  
		break;  
		case BatteryManager.BATTERY_STATUS_NOT_CHARGING:  
			mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_NOT_CHARGING));  
		break;  
		case BatteryManager.BATTERY_STATUS_FULL:  
			mStatus_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_status_FULL));  
		break;  
		}  
		switch (health) {  
		case BatteryManager.BATTERY_HEALTH_UNKNOWN:  
		mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_UNKOWN));
		break;  
		case BatteryManager.BATTERY_HEALTH_GOOD:  
		mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_GOOD));
		break;  
		case BatteryManager.BATTERY_HEALTH_OVERHEAT:  
		mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_OVERHEAT));
		break;  
		case BatteryManager.BATTERY_HEALTH_DEAD:  
		mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_DEAD));
		break;  
		case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:  
		mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_VOLTAGE));
		break;  
		case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:  
		mHealth_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_health_UNSPECIFIED_FAILURE));
		break;  
		}  
		  
		  
		switch (plugged) {  
		case BatteryManager.BATTERY_PLUGGED_AC:  
		mPlugged_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_plugged_AC));
		break;  
		case BatteryManager.BATTERY_PLUGGED_USB:  
			mPlugged_BatteryInfo.setText(getResources().getString(R.string.BatteryInfo_plugged_USB));
		break;  
		default:
			mPlugged_BatteryInfo.setText("");
		}  
		}  
		}  
	};
	
	Handler TimeHandler=new Handler(){
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case REFRESH_TIME:
				mRuntime_BatteryInfo.setText(msToTime((int) SystemClock.elapsedRealtime()));//获取系统启动时间
				break;
			default:
				break;
			}
			
			super.handleMessage(msg);
		}
		
	};
	
	/**
	 * 打开线程timeThread
	 * @param timeThread
	 * @param runtime 运行标志位
	 */
	private void startTimeThread(Thread timeThread){
		if(timeThread==null){
			runtime=true;
			timeThread=new TimeThread();
			timeThread.start();
		}
	}
	
	/**
	 * 停止线程
	 * @param timeThread
	 */
	private void stopTimeThread(Thread timeThread){
		if(timeThread!=null){
			Thread.currentThread().interrupt();
			timeThread.interrupt();
			runtime=false;
		}
		
	}
	
	class TimeThread extends Thread{
		@Override
		public void run() {
			while(runtime){
				try {
					sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				Message msg=new Message();
				msg.what=REFRESH_TIME;
				TimeHandler.sendMessage(msg);
			}
		}
		
	}
	
}

 

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:clipToPadding="true"
    android:fitsSystemWindows="true"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="#5CD8AF"
        android:gravity="center_vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:text="@string/SystemSetBatteryInfo_BatteryInfo_textvie"
            android:textColor="@android:color/white"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_status_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/status_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_plugged_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/plugged_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_level_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/level_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_scale_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/scale_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_voltage_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/voltage_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_temperature_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/temperature_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_technology_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/technology_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_health_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/health_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:background="#FFFFFF"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="@string/SystemSetBatteryInfo_runtime_textview"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/runtime_BatteryInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/main_view_color"
            android:textSize="18sp" />
    </LinearLayout>

</LinearLayout>

Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">GetBatteryInfo</string>
    <string name="SystemSetBatteryInfo_BatteryInfo_textvie">电池信息</string>
    <string name="SystemSetBatteryInfo_status_textview">电池状态:</string>
    <string name="SystemSetBatteryInfo_plugged_textview">充电方式:</string>
    <string name="SystemSetBatteryInfo_level_textview">电池电量:</string>
    <string name="SystemSetBatteryInfo_scale_textview">电池容量:</string>
    <string name="SystemSetBatteryInfo_voltage_textview">电池电压:</string>
    <string name="SystemSetBatteryInfo_temperature_textview">电池温度:</string>
    <string name="SystemSetBatteryInfo_technology_textview">电池类型:</string>
    <string name="SystemSetBatteryInfo_health_textview">健康状态:</string>
    <string name="SystemSetBatteryInfo_runtime_textview">使用时间:</string>
    <string name="BatteryInfo_status_CHARGING">正在充电</string>
    <string name="BatteryInfo_status_DISCHARGING">正在耗电</string>
    <string name="BatteryInfo_status_FULL">电量充满</string>
    <string name="BatteryInfo_status_NOT_CHARGING ">未充电</string>
    <string name="BatteryInfo_status_UNKNOWN">状态未知</string>
    <string name="BatteryInfo_plugged_USB">USB电源</string>
    <string name="BatteryInfo_plugged_AC">交流电电源</string>
    <string name="BatteryInfo_health_DEAD">电池损坏</string>
    <string name="BatteryInfo_health_GOOD">电池正常</string>
    <string name="BatteryInfo_health_OVERHEAT">电池过热</string>
    <string name="BatteryInfo_health_VOLTAGE ">电池电压过大</string>
    <string name="BatteryInfo_health_UNKOWN">未知状态</string>
    <string name="BatteryInfo_health_UNSPECIFIED_FAILURE">未明示故障</string>

</resources>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="main_view_color">#1f1f1f</color>
    <color name="main_text_color">#6f6f6f</color>
</resources>

  

posted @ 2015-10-13 18:49  草人木  阅读(3365)  评论(0编辑  收藏  举报