Орео фоновые обновления местоположения
Я работал над обновлением приложения, над которым я работаю, чтобы использовать новый FusedLocationProviderClient и запрашивать фоновые обновления местоположения, когда приложение не используется. Я также недавно обновил это приложение до цели SDK 27, но у меня возникли проблемы с сохранением службы, которую я ранее использовал, для проверки этих обновлений местоположения.
Подводя итог, что я пытаюсь сделать, это приложение позволяет пользователям сохранять несколько предложений от разных продавцов. У каждого из этих продавцов может быть несколько мест по всей стране, и приложение позволяет пользователям получать уведомления, когда они находятся рядом с одним из сохраненных ими продавцов. Приложение устанавливает геозоны для всех сохраненных торговых точек в пределах определенного радиуса текущего местоположения пользователя, но приложение должно получать обновления местоположений, если пользователь значительно перемещается, чтобы отказаться от старых геозон и создать новые для торговых точек, расположенных ближе к обновленному местоположению.
Перед переключением на целевой SDK 27 и использованием FusedLocationProviderClient приложение использовало LocationServices FusedLocationProviderApi для запроса обновлений местоположения в липкой фоновой службе, запущенной, когда пользователь включил напоминания на основе местоположения в своем приложении. Идея заключалась в том, чтобы этот сервис работал непрерывно в фоновом режиме и перерисовывал геозоны всякий раз, когда параметры обновления местоположения, указанные в FusedLocationProviderApi, вызывали событие onLocationChanged в прослушивателе сервиса.
С новым SDK фоновые службы останавливаются, как только приложение считается находящимся в состоянии ожидания. Какова лучшая практика / рекомендация иметь фоновую службу (то есть ту, которая не должна отображать сообщение / уведомление переднего плана пользователю), которая периодически получает обновления местоположения? Есть ли способ сделать это с помощью метода requestLocationUpdates из FusedLocationProviderClient или было бы лучше использовать повторяющийся FirebaseJobDispatcher с обратными вызовами getLastLocation FusedLocationProviderClient для обновления геозон? Есть ли другое решение?