<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    止于至善

    2012年1月4日

    獲取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)建一個(gè)監(jiān)聽ACTION_BATTERY_CHANGED事件的intentFilter。
    2. 創(chuàng)建一個(gè)BroadcastReceiver對象,該對象可以接收broadcast intent。
    3. 注冊BroadcastReceiver對象來監(jiān)聽ACTION_BATTERY_CHANGED事件。
    4. 在BroadcastReceiver對象中,重寫onReceive方法,在onReceive方法的傳入?yún)?shù)intent里獲取需要的電池狀態(tài)信息。
    5. 在生命周期結(jié)束時(shí),取消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è)備電池電量的局限,使得電池電量的控制成為評價(jià)一個(gè)移動應(yīng)用好壞的重要標(biāo)準(zhǔn)。個(gè)人認(rèn)為一個(gè)電量控制較好的應(yīng)用,應(yīng)該是一方面合理安排耗電操作,并且follow android開發(fā)中那些省電的best practice,以保證移動設(shè)備的用電效率,另一方面,應(yīng)該識別當(dāng)前電池電量狀態(tài)進(jìn)行耗電操作調(diào)整,例如,當(dāng)電池電量較低時(shí),減小耗電操作的次數(shù),以提供友好的用電方式。

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

    僅列出標(biāo)題  
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    主站蜘蛛池模板: 国产精品观看在线亚洲人成网| 亚洲制服丝袜精品久久| 黄色网页免费观看| 免费一级做a爰片久久毛片潮喷| 亚洲妇女无套内射精| 日韩在线天堂免费观看| 亚洲乱码在线观看| 免费高清小黄站在线观看| 伊人免费在线观看| 国产亚洲精品看片在线观看| 亚洲精品视频久久| 曰批全过程免费视频网址| 亚洲乱人伦精品图片| 国产大片线上免费观看| 亚洲欧洲无码一区二区三区| 日本一道一区二区免费看 | 亚洲黄片手机免费观看| 亚洲区小说区图片区| 成人电影在线免费观看| 久久久久亚洲精品日久生情 | 国产免费无遮挡精品视频| 国产亚洲精品免费| 亚洲中文字幕无码一区二区三区| 久久精品免费电影| 亚洲一区电影在线观看| 国产一区二区三区免费视频| 色www永久免费网站| 亚洲黄色在线视频| 国产成人免费高清在线观看| 成人免费乱码大片A毛片| 亚洲精品国产免费| 国产午夜鲁丝片AV无码免费| APP在线免费观看视频| 亚洲videos| 久久亚洲国产成人影院网站| 亚欧色视频在线观看免费| 免费无码午夜福利片 | 三年片免费观看大全国语| 亚洲最大视频网站| 亚洲?v女人的天堂在线观看| 日本不卡免费新一区二区三区|