В сервисе есть приемник:
IntentFilter mFilter = new IntentFilter();
mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
mFilter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
Услуга является услугой переднего плана
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
...
startForeground(NOT_ID, getNotification(type));
return START_STICKY;
}
Служба постоянно работает с уведомлением. Когда услуга "приостановлена", уведомление в порядке.
Проблема:
Когда USB-зарядное устройство отключено (то же самое происходит при подключении к ПК или к обычному зарядному устройству.) И тест выполняется на Android 9, приемник не фиксирует события, события подключения, например, изменение Wi-Fi, подключиться по данным или потерять связь.
Если я подключу USB, детектор событий работает нормально. Для просмотра событий я использую тестовый интерфейс, а не logcat.
Я понимаю, что это происходит потому, что в Android 9 система приостанавливает службы для экономии заряда батареи, когда устройство не подключено.
Есть ли в Android 9 способ, которым ресивер вызывается при отключении USB?
Я тестировал в Android 8.1 и служба не была приостановлена.
Примечание: я не могу объявить получателя в манифесте, потому что с Android 6 это не может быть сделано по причинам батареи.
Дополнительная информация: Для проведения тестов все действия полностью закрыты и отображаются только сервис и уведомление. Если какая-то активность видна пользователю, приемник работает нормально.