Это липкое намерение, вам не нужно регистрировать BroadcastReceiver - просто вызывая registerReceiver, передавая null в качестве получателя, как показано в следующем фрагменте, возвращается текущее намерение состояния батареи.Вы можете передать фактический объект BroadcastReceiver здесь, но мы будем обрабатывать обновления в следующем разделе, поэтому в этом нет необходимости.
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
Вы можете извлечь как текущее состояние зарядки, так и, если устройство находится в процессезаряжается, заряжается ли он от USB или от зарядного устройства:
// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
// 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;
BatteryManager передает действие, когда устройство подключено или отключено от питания.Важно получать эти события, даже когда ваше приложение не запущено - особенно потому, что эти события должны влиять на частоту запуска вашего приложения для запуска фонового обновления - поэтому вам необходимо зарегистрировать BroadcastReceiver в вашем манифесте, чтобы прослушивать оба событияопределение ACTION_POWER_CONNECTED и ACTION_POWER_DISCONNECTED в фильтре намерений.
<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>
В связанной реализации BroadcastReceiver вы можете извлечь текущее состояние и метод зарядки, как описано впредыдущий шаг.
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;
}
}