当前位置:   article > 正文

监控电量和充电状态_registerreceiver 充电状态

registerreceiver 充电状态

查询当前充电状态

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);
  • 1
  • 2
  • 3

然后我们可以获取当前的充电状态,还可以知道是通过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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

监控充电状态的改变

在设备与电源连接或断开时,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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

  public class PowerConnectionReceiver extends BroadcastReceiver {

    @Override

    public 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;

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

获取当前电量

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

int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);

int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

float batteryPct = level / (float)scale;
  • 1
  • 2
  • 3
  • 4
  • 5

监控重要的电量变化事件

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

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

<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/738298
推荐阅读
相关标签
  

闽ICP备14008679号