Android开发者可以利用BroadcastReceiver机制,获取电池电量变化的ACTION_BATTERY_CHANGED intent,进而获取当前android设备的电池状态。
具体操作步骤:
1. 创建一个监听ACTION_BATTERY_CHANGED事件的intentFilter。
2. 创建一个BroadcastReceiver对象,该对象可以接收broadcast intent。
3. 注册BroadcastReceiver对象来监听ACTION_BATTERY_CHANGED事件。
4. 在BroadcastReceiver对象中,重写onReceive方法,在onReceive方法的传入参数intent里获取需要的电池状态信息。
5. 在生命周期结束时,取消step4中的注册。


public class BatteryMonitorActivity extends Activity {private TextView batterLevel;private BroadcastReceiver batteryLevelRcvr;private IntentFilter batteryLevelFilter;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);batterLevel = (TextView) findViewById(R.id.batteryLevel);monitorBatteryState();}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(batteryLevelRcvr);}private void monitorBatteryState() {batteryLevelRcvr = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {StringBuilder sb = new StringBuilder();int rawlevel = intent.getIntExtra("level", -1);int scale = intent.getIntExtra("scale", -1);int status = intent.getIntExtra("status", -1);int health = intent.getIntExtra("health", -1);int level = -1; // percentage, or -1 for unknownif (rawlevel >= 0 && scale > 0) {level = (rawlevel * 100) / scale;}sb.append("The phone");if (BatteryManager.BATTERY_HEALTH_OVERHEAT == health) {sb.append("'s battery feels very hot!");} else {switch (status) {case BatteryManager.BATTERY_STATUS_UNKNOWN:sb.append("no battery.");break;case BatteryManager.BATTERY_STATUS_CHARGING:sb.append("'s battery");if (level <= 33)sb.append(" is charging, battery level is low"+ "[" + level + "]");else if (level <= 84)sb.append(" is charging." + "[" + level + "]");elsesb.append(" will be fully charged.");break;case BatteryManager.BATTERY_STATUS_DISCHARGING:case BatteryManager.BATTERY_STATUS_NOT_CHARGING:if (level == 0)sb.append(" needs charging right away.");else if (level > 0 && level <= 33)sb.append(" is about ready to be recharged, battery level is low"+ "[" + level + "]");elsesb.append("'s battery level is" + "[" + level + "]");break;case BatteryManager.BATTERY_STATUS_FULL:sb.append(" is fully charged.");break;default:sb.append("'s battery is indescribable!");break;}}sb.append(' ');batterLevel.setText(sb.toString());}};batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);registerReceiver(batteryLevelRcvr, batteryLevelFilter);}}


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


Android的上层实现显示手机电池电量是通过监听实现,当电池电量改变时会通知到程序。
当然这个有朋友就要问了我不是想监听电池电量,我是想直接获取当前的电池电量。
其实这是同一个问题,当你在初始化监听器的时候他会自动首先获取电池的电量信息,然后后续当电池改变时同时也会通知当前电池电量的改变情况。


转自

http://www.blogjava.net/zhangqian1216/archive/2012/01/04/367858.html

http://blog.macrowen.com/Technology/3074.html



更多相关文章

  1. Android 各种布局技术-五大布局对象
  2. Activity对象的onCreate方法真是Android程序的入口吗?
  3. 25、Android中通过Intent传递对象、集合问题
  4. Android电池管理系统系统分析
  5. Android高手进阶教程(十七)之---Android中Intent传递对象的两种
  6. Android中将资源文件转为Bitmap对象
  7. 面向UDP的Android——PC双向通信(三):在Android客户端和PC服务器端
  8. Android调用WebService系列之KSoap2对象解析

随机推荐

  1. android 三种定位方式 设计思路
  2. 在Unity中调用Android
  3. JS获取整个HTML网页代码 - Android 集美
  4. Lync之android客户端内网登陆
  5. Android 部分内容设置颜色、字体、超链接
  6. Android用surface直接显示yuv数据(三)
  7. 在 Android 中使用 Activity, Service, B
  8. Android例子—设置Activity全屏的三种方
  9. 微信支付(一)
  10. Android(安卓)手势 正则匹配图片