Service.startForeground () не разрешен из-за ограничения bg - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь запустить 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 константу.

...