止于至善

          獲取Android設(shè)備電池電量狀態(tài)

          自己在網(wǎng)上搜索了一下,將其總結(jié)如下:

          Android開發(fā)者可以利用BroadcastReceiver機(jī)制,獲取電池電量變化的ACTION_BATTERY_CHANGED intent,進(jìn)而獲取當(dāng)前android設(shè)備的電池狀態(tài)。
          具體操作步驟:
          1. 創(chuàng)建一個監(jiān)聽ACTION_BATTERY_CHANGED事件的intentFilter。
          2. 創(chuàng)建一個BroadcastReceiver對象,該對象可以接收broadcast intent。
          3. 注冊BroadcastReceiver對象來監(jiān)聽ACTION_BATTERY_CHANGED事件。
          4. 在BroadcastReceiver對象中,重寫onReceive方法,在onReceive方法的傳入?yún)?shù)intent里獲取需要的電池狀態(tài)信息。
          5. 在生命周期結(jié)束時,取消step4中的注冊。

          示例代碼:
          Java文件
          public class BatteryMonitorActivity extends Activity {

              
          private TextView batterLevel;
              
          private BroadcastReceiver batteryLevelRcvr;
              
          private IntentFilter batteryLevelFilter;
              
              @Override
              
          public void onCreate(Bundle savedInstanceState) {
                  
          super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);
                  batterLevel 
          = (TextView) findViewById(R.id.batteryLevel);
                  monitorBatteryState();
              }
              
              @Override
              
          protected 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 unknown
                          if (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 + "]");
                                      
          else
                                          sb.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 + "]");
                                      
          else
                                          sb.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"?>
          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width
          ="fill_parent"
              android:layout_height
          ="fill_parent"
              android:orientation
          ="vertical" >
              
          <TextView         
                  android:id
          ="@+id/batteryLevel"
                  android:layout_width
          ="fill_parent" 
                  android:layout_height
          ="fill_parent" 
                  android:gravity
          ="center_vertical|center_horizontal"
                  android:textSize
          ="50dip"> 
              
          </TextView>
          </LinearLayout>

          由于移動設(shè)備電池電量的局限,使得電池電量的控制成為評價一個移動應(yīng)用好壞的重要標(biāo)準(zhǔn)。個人認(rèn)為一個電量控制較好的應(yīng)用,應(yīng)該是一方面合理安排耗電操作,并且follow android開發(fā)中那些省電的best practice,以保證移動設(shè)備的用電效率,另一方面,應(yīng)該識別當(dāng)前電池電量狀態(tài)進(jìn)行耗電操作調(diào)整,例如,當(dāng)電池電量較低時,減小耗電操作的次數(shù),以提供友好的用電方式。

          posted on 2012-01-04 17:08 zhangqian 閱讀(6244) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2012年1月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          主站蜘蛛池模板: 崇仁县| 罗定市| 长宁县| 朔州市| 浮山县| 历史| 临安市| 乐都县| 鄂托克前旗| 乌兰浩特市| 天长市| 孟州市| 云安县| 铜川市| 鹤庆县| 万源市| 郎溪县| 崇义县| 濉溪县| 泽普县| 河池市| 宜春市| 阿克陶县| 丘北县| 濉溪县| 商洛市| 三门县| 左贡县| 安远县| 措美县| 承德市| 怀化市| 海原县| 象山县| 景德镇市| 揭阳市| 绥江县| 定陶县| 井研县| 蕉岭县| 美姑县|