android监控电池电量和充电状态
2017-12-26 本文已影响32人
android的那点事
如果您要通过改变后台更新的频率来减少这些更新对电池寿命的影响,最好先从检查当前电池电量和充电状态入手。
执行中的应用更新对电池寿命的影响取决于设备的电池电量和充电状态。 设备通过交流电源充电时执行更新的影响可以忽略不计,因此在大多数情况下,只要设备连接了壁式充电器,您就可以将更新频率提高到最高水平。 相反,如果设备正在放电,降低更新频率有助于延长电池寿命。
同理,您也可以检查电池充电电量,并在电池电量近乎耗尽时降低更新频率,甚至停止更新.
确定当前充电状态
首先,确定当前充电状态。BatteryManager在一个包含充电状态的粘性中广播所有电池和充电详情。
private boolean checkForPower(){
//获取电池的充电状态
IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent intent = this.registerReceiver(null,filter);
//BatteryManager
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1);
boolean usb = chargePlug ==BatteryManager.BATTERY_PLUGGED_USB;//usb充电
boolean ac = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;//交流电
//无线充电---API>=17
boolean wireless = false;
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN_MR1) {
wireless = chargePlug == BatteryManager.BATTERY_PLUGGED_WIRELESS;
}
Log.i("ms","usb:"+usb+",,ac:"+ac);
return (usb||ac||wireless);
}
通常,如果设备连接了交流充电器,您应该最大限度提高后台更新的频率;而如果设备是通过 USB 充电,则应降低更新频率,如果电池正在放电,则应进一步降低更新频率。
确定当前电池电量
在某些情况下,确定当前电池电量也很有用处。您可以选择在电池电量低于某一水平时降低后台更新的频率。
您可以如以下所示,通过从电池状态 Intent 提取当前电池电量和刻度来了解当前电池电量:
int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPct = level / (float)scale;