Широковещательное зарядное устройство отключено в Android O

Теперь, когда выйдет окончательный API для Android O, и ни одна из следующих трансляций не включена в белый список, у меня есть следующая проблема:

В моем приложении (target API 25) у меня в настоящее время есть BroadcastReceiver который слушает системные события ACTION_POWER_CONNECTED и ACTION_POWER_DISCONNECTED . Теперь я хотел бы обновить свое приложение до целевого Android O, но с этим выпуском происходят огромные изменения в вещательном поведении:

Приложения, нацеленные на Android O, больше не могут регистрировать широковещательные приемники для неявных передач в своем манифесте. Неявная трансляция – это трансляция, которая специально не предназначена для этого приложения.

Поскольку оба трансляции являются неявными, я могу зарегистрироваться только для них с помощью Context.registerReceiver() но при этом возникает проблема: как только процесс моего приложения будет убит системой или как только система очистит память моего приложения (как Результат низкой памяти устройства), регистрация вещания будет потеряна.

Чтобы избежать этой проблемы, я могу использовать API setRequiresCharging методом ACTION_POWER_CONNECTED для ACTION_POWER_CONNECTED но для ACTION_POWER_DISCONNECTED я должен использовать метод registerReceiver .

Поскольку мое приложение контролирует объем устройства (на основе этих событий), действительно важно, чтобы ни одно из этих событий не было пропущено. Итак, как я могу безопасно прослушивать отключенные события питания в Android O?

Btw. У меня такая же проблема с событиями отключения WIFI.

EDIT: Мне бы очень хотелось сделать это без уведомления из службы переднего плана

Solutions Collecting From Web of "Широковещательное зарядное устройство отключено в Android O"

Задания могут быть отложены без каких-либо ограничений системой. Метод setOverrideDeadline использует только самую эффективную политику, поэтому в этом случае вы можете сохранить целевой SDK до 25 или использовать службу переднего плана. Услуги Foregournd могут быть убиты системой, но с очень низкой вероятностью.

Это может быть излишним, но вы можете зарегистрироваться для этих передач в Service переднего плана, которая запускается ACTION_BOOT_COMPLETED .

Вы можете зарегистрировать фоновое задание с помощью JobScheduler используя ограничение «требует зарядки» . По крайней мере, это официальное решение .