Я работаю над приложением, которое периодически использует будильник. Будильник устанавливается, когда телефон завершил загрузку. BroadcastReceiver
, получающий сигнал тревоги и запускающий службу, отключается, когда батарея разряжается, и включается, когда батарея снова в порядке:
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent != null && intent.getAction() != null) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
// Set alarm
} else if (action.equals(Intent.ACTION_BATTERY_LOW)) {
setLocationAlarmReceiverEnabled(context, false);
} else if (action.equals(Intent.ACTION_BATTERY_OKAY)) {
setLocationAlarmReceiverEnabled(context, true);
}
}
}
private void setLocationAlarmReceiverEnabled(final Context context,
final boolean enabled) {
PackageManager packageManager = context.getPackageManager();
ComponentName locationAlarmReceiver = new ComponentName(context,
LocationAlarmReceiver.class);
packageManager.setComponentEnabledSetting(locationAlarmReceiver,
enabled ? PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
В практическом тесте я мог подтвердить, что BroadcastReceiver
"LocationAlarmReceiver" отключается, когда уровень заряда батареи падает до 15%, и после того, как телефон был подключен к сети переменного тока/USB, он снова включается, когда уровень заряда батареи достигает 30%.
Но теперь у меня был следующий сценарий:
- Уровень заряда батареи падает до 15%, «LocationAlarmReceiver» отключается.
- Телефон в конце концов выключается, потому что батарея разряжена
- Телефон подключен к сети переменного тока/USB
- Телефон включается и загружается, продолжает заряжаться, уровень заряда батареи достигает 100%
- «LocationAlarmReceiver» по-прежнему отключен
Я могу только догадываться, что намерение Intent.ACTION_BATTERY_OKAY
так и не было реализовано.
Верно ли это наблюдение? Как я могу убедиться, что «LocationAlarmReceiver» снова активируется?