Я пытаюсь запустить foregroundService
в Android 8 и позже.Он запускается успешно, и на переднем плане отображается липкое уведомление, когда приложение находится на переднем плане или устройство не находится в режиме ожидания.Проблема в том, что когда устройство бездействует, Android решает убить службу, показывающую этот журнал
Stopping service due to app idle
Согласно документам, пока есть уведомление, видимое для службы пользователя, редко следует убивать :( В любом случае, я установил будильникон запускается каждые 15 минут и пытается запустить службу снова, если она не работает, но не удается запустить ведение журнала службы переднего плана после сообщения
Service.startForeground() not allowed due to bg restriction
С некоторыми поисками в Google: я подумал, что это как-то связано с AndroidУправление AppOps. Видимо, есть разрешение RUN_ANY_IN_BACKGROUND
, которое должно быть allow
, но в моем случае оно действительно ignore
. Я проверяю это, используя
adb shell cmd get package.name RUN_ANY_IN_BACKGROUND
Просто для тестирования я установил его наallow
снова вручную. Но через некоторое время, когда приложение бездействует, ОС устанавливает его на повторное игнорирование, и служба снова останавливается.
В любом случае я могу проверить, нарушаю ли я некоторые ограничения, которые вынуждают это RUN_ANY_IN_BACKGROUND
признак игнорирования ?
Для некоторого контекста: предполагается, что служба обнаруживает сон пользователя, поэтому она должнабегать всю ночь от времени сна пользователя до времени бодрствования.Я запускаю службу, вызывая context.startForegroundService(intent)
, а затем в onStartCommand
метод я вызываю startForeground
прохождение уведомления.onStartCommand
метод всегда возвращает START_REDELIVER_INTENT
константу.