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>

  

时间: 2024-07-28 16:45:41

Android电池信息获取的相关文章

android电池信息简介

1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 a

Android屏幕信息获取

Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面. 1.getMetrics Java代码   DisplayMetrics dm = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(dm); //在没有Activity上下文时可使用如下方法,需要Context上下文 //d

android WIFI信息获取

在androi中WIFI信息的获取可以通过系统提供的WIFI Service获取 [java] WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE); WifiInfo    wifiInfo     = wifi_service.getConnectionInfo(); 其中WifiInfo 中比较常用的信息有: [java] /* info.getBSSID():      获取BSSID地址. info

android设备信息获取

权限:<uses-permission android:name="android.permission.READ_PHONE_STATE" /> import android.app.Activity; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogI

android sdcard信息获取

手机存储都有两种,一种是 手机自带的存储,称为internal storage,另外一种用户额外插入的存储,称为removable storage (也就是外置sdcard的部分). removable storage 的路径一般是 storage/emulated/0/Android/data/com.example.storagetest/files/alarm internal storage 也有一部分称为 external (也就是内置sdcard的部分) 的,这部分的路径为  /st

android的一些常用手机信息获取

Android中与电话功能相关的类是 TelephonyManager ,此类中定义了很多常量,以下分类说明 获取以下信息需要在AndroidManifest.xml中指定权限 一. 数据连接状态 获取数据连接状态:int getDataState() 获取数据活动状态:int getDataActivity() 常用的有这几个: int DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据 int DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据 int DA

Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. 1 package com.qiyu.ddb.util; 2 3 import android.annotation.SuppressLint; 4 import android.annotation.TargetApi; 5 import android.app.Activity; 6 import android.app.ActivityManager; 7 import androi

Shell下获取Android设备信息

使用adb.exe shell进入shell界面,然后通过下列命令即可获取需要的信息 :) 1 // getprop命令可获取很多信息哟 2 // 1.获取厂商名称 3 getprop ro.product.brand 4 // 2.设备型号 5 getprop ro.product.model 6 // 3.安卓版本 7 getprop ro.build.version.release 8 // 4.网卡名称 9 wifi.interface 10 // 5.Google glass系统版本

Android进阶之获取APK签名信息及MD5指纹

1 Android进阶之获取APK签名信息及MD5指纹 package com.guesslive.caixiangji.util; public class SignUtils { private static final String ALGORITHM = "RSA"; private static final String SIGN_ALGORITHMS = "SHA1WithRSA"; private static final String DEFAULT