2013-02-04 64 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