监控电量和充电状态

BatteryManager 会广播一个包含所有电池和充电信息的粘性的intent(sticky intent),其中就包含当前充电状态。

Sticky Intent是Broadcast Intent的有用变体,可以保存它们最后一次广播的值,并且当有一个新的接收器被注册为接收该广播时,它们会把这些值作为Intent返回。

由于是粘性的intent,我们不需要注册一个广播接收器,在调用registerReceiver方法时传入null作为接收器即可,利用方法返回的intent即可获取电池状态,下面是示例代码:

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

然后我们可以获取当前的充电状态,还可以知道是通过USB还是通过充电器(AC)进行充电。

// 在充电还是已充满?int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||status == BatteryManager.BATTERY_STATUS_FULL;// 通过什么充电的?int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;监控充电状态的改变

在设备与电源连接或断开时,BatteryManager会对相应的事件进行广播。如果应用需要对充电状态的指示,应当在manifest文件中注册一个广播,来监听这两个事件。

<receiver android:name=”.PowerConnectionReceiver”> <intent-filter><action android:name=”android.intent.action.ACTION_POWER_CONNECTED”/><action android:name=”android.intent.action.ACTION_POWER_DISCONNECTED”/> </intent-filter></receiver>

在广播接收器中,我们可以像之前一样获取充电状态灯信息。

public class PowerConnectionReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||status == BatteryManager.BATTERY_STATUS_FULL;int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;}}获取当前电量

和查询当前充电状态的方法类似:

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);float batteryPct = level / (float)scale;监控重要的电量变化事件

持续监控电池电量,要比应用正常的行为对电池的影响大,因此不建议持续的监控。我们只需要监控一些重要事件就可以了,尤其是设备进入或退出低电量状态的事件。

下面是接收进入或退出低电量状态的事件的代码示例:

<receiver android:name=”.BatteryLevelReceiver”><intent-filter> <action android:name=”android.intent.action.ACTION_BATTERY_LOW”/> <action android:name=”android.intent.action.ACTION_BATTERY_OKAY”/> </intent-filter></receiver>

生活若剥去了理想、梦想、幻想,那生命便只是一堆空架子

监控电量和充电状态

相关文章:

你感兴趣的文章:

标签云: