From:http://blog.csdn.net/it_farmer2010/article/details/6334051
下这之前先说点显示电量的基本知识:
1、Android的上层实现显示手机电池电量是通过监听实现,当电池电量改变时会通知到程序。
当然这个有朋友就要问了我不是想监听电池电量,我是想直接获取当前的电池电量。
其实这是同一个问题,当你在初始化监听器的时候他会自动首先获取电池的电量信息,然后后续当电池改变时同时也会通知当前电池电量的改变情况。
代码:
[java] view plain copy
package com.jli.battery;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
public class Main extends Activity {
private ImageView tvBatteryChanged;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvBatteryChanged = (ImageView)findViewById(R.id.test);
//注册一个接受广播类型
registerReceiver(new BatteryBroadcastReceiver(), new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
/**接受电量改变广播*/
class BatteryBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)){
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
int curPower = (level * 100 / scale)/25;
switch (curPower) {
case 0:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power0));
break;
case 1:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power1));
break;
case 2:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power2));
break;
case 3:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power3));
break;
case 4:
tvBatteryChanged.setImageBitmap(BitmapFactory.decodeResource(Main.this.getResources(), R.drawable.power4));
break;
}
}
}
}
}
Xml:
[xhtml] view plain copy
-
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.jli.battery"
- android:versionCode="1"
- android:versionName="1.0">
-
- <activity android:name=".Main"
- android:label="@string/app_name">
- <intent-filter>
-
-
- </intent-filter>
- </activity>
-
- </application>
-
-
- </manifest>
上面只是实现显示电源的电量的简单例子,源码放于末尾。
这里补充如果还涉及到充电放电等状态处理的一些源码资料请不要粘贴复制,下面代码是不能运行的,自己看懂了后在例子里添加。
[java] view plain copy
- private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver() {
- int intLevel = 0;
- int intScale = 0;
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- /*
- * 如果捕捉到的action是ACTION_BATTERY_CHANGED, 就运行onBatteryInfoReceiver()
- */
- if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
- intLevel = intent.getIntExtra("level", 0);
- intScale = intent.getIntExtra("scale", 100);
- // 电池伏数
- Log.d("Battery V", "" + intent.getIntExtra("voltage", 0));
- // 电池温度
- Log.d("Battery T", "" + intent.getIntExtra("temperature", 0));
- BatteryV = "当前电压为:" + intent.getIntExtra("voltage", 0);
- BatteryT = "当前温度为:" + intent.getIntExtra("temperature", 0);
- switch (intent.getIntExtra("status",
- BatteryManager.BATTERY_STATUS_UNKNOWN)) {
- case BatteryManager.BATTERY_STATUS_CHARGING:
- BatteryStatus = "充电状态";
- break;
- case BatteryManager.BATTERY_STATUS_DISCHARGING:
- BatteryStatus = "放电状态";
- break;
- case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
- BatteryStatus = "未充电";
- break;
- case BatteryManager.BATTERY_STATUS_FULL:
- BatteryStatus = "充满电";
- break;
- case BatteryManager.BATTERY_STATUS_UNKNOWN:
- BatteryStatus = "未知道状态";
- break;
- }
- switch (intent.getIntExtra("plugged",
- BatteryManager.BATTERY_PLUGGED_AC)) {
- case BatteryManager.BATTERY_PLUGGED_AC:
- BatteryStatus2 = "AC充电";
- break;
- case BatteryManager.BATTERY_PLUGGED_USB:
- BatteryStatus2 = "USB充电";
- break;
- }
- switch (intent.getIntExtra("health",
- BatteryManager.BATTERY_HEALTH_UNKNOWN)) {
- case BatteryManager.BATTERY_HEALTH_UNKNOWN:
- BatteryTemp = "未知错误";
- break;
- case BatteryManager.BATTERY_HEALTH_GOOD:
- BatteryTemp = "状态良好";
- break;
- case BatteryManager.BATTERY_HEALTH_DEAD:
- BatteryTemp = "电池没有电";
- break;
- case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
- BatteryTemp = "电池电压过高";
- break;
- case BatteryManager.BATTERY_HEALTH_OVERHEAT:
- BatteryTemp = "电池过热";
- break;
- }
- }
- }
- };
BatteryPlugin.zip