2013-02-04 66 views
2

如何以編程方式監控我的Android設備上的電池電量?我已經閱讀了發佈在stackoverflow上的示例以及BatteryManager文檔,我們需要將Receiver註冊爲ACTION_BATTERY_CHANGED。我的問題是我需要連續監測電池電量。當我使用ACTION_BATTERY_CHANGED意圖更新保持在一個恆定的值,直到我退出並重新啓動我的應用程序。有沒有辦法在我的應用程序運行的整個過程中監控電池電量?監控Android手機上的電池電量

+0

你用過EXTRA_LEVEL嗎? – QAMAR

回答

3

只要使用下面的代碼,如果你運行它,你會得到不同的電池信息。還有更多的信息可以得到,但是因此你應該在android api中爲電池拍攝正確的命令。

public void getActualData(){ 

    IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
    Intent batteryStatus = this.registerReceiver(null, ifilter); 

    //are we charging/charged? 
    int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
    boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; 

    if(isCharging == true){ 
     tvCharged.setText("CHARGING"); 
    }else{ 
     tvCharged.setText("NOT CHARGING"); 
    } 

    //how are we charging 
    int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); 
    boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; 
    boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; 

    if(usbCharge == true){ 
     tvHowCharging.setText("USB"); 
    }else{ 
     tvHowCharging.setText("ELECTRICAL OUTLET"); 
    } 

    //get battery level and print it out 
    int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
    tvLevelOutput.setText(level + "/100"); 
    pbLevel.setProgress(level); 
    pbLevel.invalidate(); 

    //get battery temperatur 
    int temp = batteryStatus.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); 
    tvTempOutput.setText(temp + "Grad"); 
    pbTemp.incrementProgressBy(temp); 
    pbTemp.invalidate(); 

    //get battery voltage 
    int voltage = batteryStatus.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); 
    tvVoltageOutput.setText(voltage + " V"); 
    pbVoltage.incrementProgressBy(voltage); 
    pbVoltage.invalidate(); 
} 
+0

感謝您的代碼! – sim

+0

它解決了您的問題嗎?那麼不要忘記標記爲已解決 –

+0

如何標記它?我在此頁上看不到任何選項 – sim