Можем ли мы настроить Android Work Manager для работы при изменении местоположения в зависимости от расстояния?

Мне нужна фоновая служба, которая постоянно работает для моего приложения. Я искал в Интернете разные способы, такие как служба переднего плана, которая постоянно показывает уведомление для версий выше Android 8, Диспетчер работ и Планировщик заданий. Я думаю, что Work Manager соответствует моим требованиям с точки зрения фоновой работы, но не уверен, можно ли его запустить в зависимости от изменения расстояния до места.

https://developer.android.com/topic/libraries/architecture/workmanager

Я вижу, что у нас могут быть периодические обновления, например, каждые 15 минут, но я хотел знать, можем ли мы настроить на основе самого изменения расстояния местоположения.

https://medium.com/@prithvibhola08/location-all-the-time-with-workmanager-8f8b58ae4bbc

Пример: если я установил setSmallestDisplacement(10m) для запроса местоположения, диспетчер рабочих должен запускаться каждые 10 м изменения расстояния и отправлять местоположение на сервер.

https://developers.google.com/android/reference/com/google/android/gms/location/LocationRequest


person Nikhil    schedule 27.03.2019    source источник
comment
LocationRequests уже работает в фоновом режиме даже на Android 8+. Вот почему принимают PendingIntent.   -  person ianhanniballake    schedule 27.03.2019
comment
Так можно ли получать обновления местоположения без запуска службы? Можете ли вы предоставить мне хороший пример или документацию, которые могут мне помочь? @Ianhanniballake   -  person Nikhil    schedule 27.03.2019
comment
Не ожидайте, что setSmallestDisplacement будет чувствителен к изменениям на 10 м. Для надежных результатов работайте со 100 м +. Также учтите это: developers.google.com/awareness/android-api/ Забор-api-overview И последнее - вам не нужен сервис, это не ПК / Сервер. В настоящее время в Android сервисы бесполезны. Любой механизм фоновых задач (планировщик заданий, менеджер работ и т. Д.) Даст все, что вам нужно.   -  person Arseny Levin    schedule 28.03.2019
comment
Надеюсь, это будет вам полезно: stackoverflow.com/a/56593800/1318946   -  person Pratik Butani    schedule 14.06.2019


Ответы (1)


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

private void onStartListening() {  
   //init location manager.
   LocationManager mLm = (LocationManager) getSystemService(LOCATION_SERVICE);

   //binding listener to manager with network provider.    
   mLm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 10, mNetworkListener);
}

Третий аргумент для моего requestLocationUpdates() - это минимальное расстояние между обновлениями местоположения в метрах.

Кроме того, второй - минимальный временной интервал между обновлениями местоположения в миллисекундах. Если вы хотите указать временные критерии для обновлений вашего местоположения.

person Narerit Rittiplaeng    schedule 13.07.2019
comment
Я хочу, чтобы это работало даже в фоновом режиме, я не думаю, что диспетчер местоположения работает постоянно в фоновом режиме, если у вас нет запущенного диспетчера службы или работы. - person Nikhil; 15.07.2019
comment
Что, если вы поместите LocationManager в службу и настроите только минимальное расстояние для requestLocationUpdates () - person Narerit Rittiplaeng; 16.07.2019
comment
Я хочу избежать использования услуг. - person Nikhil; 16.07.2019