Как повторить запуск сервиса каждые 2-5 минут в Android 9 (пирог) - PullRequest
0 голосов
/ 28 декабря 2018

Я работаю над приложением, которое отслеживает путь пользователя на работу и обратно домой.Приложение основано на виджете (где печатается информация для пользователя) и фоновом сервисе, который проверяет локализацию и отслеживает информацию и отображает на виджете.

До Android 9 я использовал AlarmManager и фоновый сервис, чтобы каждые пару минут проверять локализацию пользователя и печатать информацию на виджете.В Android 9 есть Сервисные ограничения, и я не могу повторить сервис не менее 15 минут.15 минут - это слишком много, у некоторых пользователей может быть 5 минут в пути на работу или домой.

Я попробовал JobService, JobIntentService, AlarmManager, и никто не работает менее 15 минут.Работает только служба Foreground, но я не могу использовать ее, потому что пользователь не выполняет действия, все работает в фоновом режиме с помощью виджета.

У кого-нибудь есть идея, что можно запускать службу в фоновом режиме, повторяя менее чем за 15 минут,Или, может быть, есть другая идея, как достичь моих требований?Мне нужно каждые пару минут (1-5 минут) проверять локализации пользователей и считать, а затем отправлять данные в виджет.

1 Ответ

0 голосов
/ 05 февраля 2019

Для этого вы можете использовать службу переднего плана.Вам просто нужно запустить службу как службу переднего плана, например:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    context.startForegroundService(intent);
} else {
    context.startService(intent);
}

Как только служба запущена, вам нужно позвонить startForeground(int id, Notification notification).

При этом было бы неплохо знать о проблеме на https://issuetracker.google.com/issues/76112072.

Также взгляните на сообщение в блоге на https://android -developers.googleblog.com / 2018/12/effective-foreground-services-on-android_11.

Они также, кажется, касаются вашего варианта использования с отслеживанием:

Пассивное отслеживание местоположения является плохим использованиемкейс для переднего плана услуг.Если пользователь дал согласие на отслеживание, используйте API FusedLocationProvider для получения связанных обновлений местоположения с более длительными интервалами

Возможно, вам не нужен обновленный виджет, когда экран выключен.

...