获取Android设备电池电量状态

来源:互联网 发布:凸优化求解算法 编辑:程序博客网 时间:2024/05/21 10:33

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中的注册。


[java]view plaincopyprint?
  1. public class BatteryMonitorActivity extends Activity {  
  2.   
  3.     private TextView batterLevel;  
  4.     private BroadcastReceiver batteryLevelRcvr;  
  5.     private IntentFilter batteryLevelFilter;  
  6.   
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.main);  
  11.         batterLevel = (TextView) findViewById(R.id.batteryLevel);  
  12.         monitorBatteryState();  
  13.     }  
  14.   
  15.     @Override  
  16.     protected void onDestroy() {  
  17.         super.onDestroy();  
  18.         unregisterReceiver(batteryLevelRcvr);  
  19.     }  
  20.   
  21.     private void monitorBatteryState() {  
  22.         batteryLevelRcvr = new BroadcastReceiver() {  
  23.   
  24.             public void onReceive(Context context, Intent intent) {  
  25.                 StringBuilder sb = new StringBuilder();  
  26.                 int rawlevel = intent.getIntExtra("level", -1);  
  27.                 int scale = intent.getIntExtra("scale", -1);  
  28.                 int status = intent.getIntExtra("status", -1);  
  29.                 int health = intent.getIntExtra("health", -1);  
  30.                 int level = -1// percentage, or -1 for unknown  
  31.                 if (rawlevel >= 0 && scale > 0) {  
  32.                     level = (rawlevel * 100) / scale;  
  33.                 }  
  34.                 sb.append("The phone");  
  35.                 if (BatteryManager.BATTERY_HEALTH_OVERHEAT == health) {  
  36.                     sb.append("'s battery feels very hot!");  
  37.                 } else {  
  38.                     switch (status) {  
  39.                     case BatteryManager.BATTERY_STATUS_UNKNOWN:  
  40.                         sb.append("no battery.");  
  41.                         break;  
  42.                     case BatteryManager.BATTERY_STATUS_CHARGING:  
  43.                         sb.append("'s battery");  
  44.                         if (level <= 33)  
  45.                             sb.append(" is charging, battery level is low"  
  46.                                     + "[" + level + "]");  
  47.                         else if (level <= 84)  
  48.                             sb.append(" is charging." + "[" + level + "]");  
  49.                         else  
  50.                             sb.append(" will be fully charged.");  
  51.                         break;  
  52.                     case BatteryManager.BATTERY_STATUS_DISCHARGING:  
  53.                     case BatteryManager.BATTERY_STATUS_NOT_CHARGING:  
  54.                         if (level == 0)  
  55.                             sb.append(" needs charging right away.");  
  56.                         else if (level > 0 && level <= 33)  
  57.                             sb.append(" is about ready to be recharged, battery level is low"  
  58.                                     + "[" + level + "]");  
  59.                         else  
  60.                             sb.append("'s battery level is" + "[" + level + "]");  
  61.                         break;  
  62.                     case BatteryManager.BATTERY_STATUS_FULL:  
  63.                         sb.append(" is fully charged.");  
  64.                         break;  
  65.                     default:  
  66.                         sb.append("'s battery is indescribable!");  
  67.                         break;  
  68.                     }  
  69.                 }  
  70.                 sb.append(' ');  
  71.                 batterLevel.setText(sb.toString());  
  72.             }  
  73.         };  
  74.         batteryLevelFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);  
  75.         registerReceiver(batteryLevelRcvr, batteryLevelFilter);  
  76.     }  
  77. }  


[html]view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.     <TextView           
  7.         android:id="@+id/batteryLevel"  
  8.         android:layout_width="fill_parent"   
  9.         android:layout_height="fill_parent"   
  10.         android:gravity="center_vertical|center_horizontal"  
  11.         android:textSize="50dip">   
  12.     </TextView>  
  13. </LinearLayout>  


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

0 0
原创粉丝点击