Android лучший способ получить местоположение повторно в фоновом режиме, учитывая батарею, а также

Мне нужно постоянно запрашивать местоположение в моем приложении, и оно всегда должно быть фоновым сервисом.

Мне нужно latlng как каждые две минуты или около того. Я думал об использовании Сервиса, и в onStartCommand я использовал бы locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this);, а также locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MINIMUM_TIME_INTERVAL, MINIMUM_DISTANCE, this);

Но я боюсь, что со временем этот запросLocationUpdates перестает давать мне местоположение. Поэтому я подумал об использовании AlarmManager, чтобы он продолжал давать мне местоположение.

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

Я просто хотел узнать лучший подход, чтобы найти место в фоновом режиме. Спасибо заранее.

Ответ 1

Зачем вы хотите использовать эту услугу? Для меня он работает без обслуживания. У меня есть класс под названием GPSlistener, который реализует LocationListener и имеет эту строку в своем конструкторе:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);

Я использую этот подход, потому что я не хочу, чтобы locationUpdates останавливался, но вы можете использовать этот метод для начала прослушивания:

public void startListening(){
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, this);
}

а затем прекратить прослушивание:

public void stopListening(){
    locationManager.removeUpdates(this)
}

Вы можете сэкономить аккумулятор, установив более высокое значение minTime или minDistance. Я верю, что minDistance должно быть более актуальным для вас. Например, если вы хотите обновить местоположение только каждые 10 метров, тогда вы называете это следующим образом

locationManager.requestLocationUpdates(LocationManager.GPS_Provider, 5000, 10, this)

Лучшая настройка зависит от вашего приложения. Например, если вы хотите построить GPS-навигацию для циклирования, вам следует использовать обновление местоположения после max 5m. С другой стороны, если вы создаете приложение для какой-то "медленной" активности, например, походы, то 10 или 15 метров будет достаточно, я думаю.

Я не думаю, что locationManager должен прекратить отправку обновлений местоположения, и у меня также не было этой проблемы в моем приложении.

Используя этот подход, я получаю GPS в фоновом режиме без использования сервиса. Но правда в том, что мое приложение состоит только из одного действия и 3 фрагмента, поэтому мне не нужно использовать сервис.

Ответ 3

Новый google play локационные API - это, безусловно, лучший способ. API с плавным местоположением учитывает все поставщики местоположения и точность определения местоположения, необходимые для обеспечения наилучшего местоположения для вашего приложения.

API-интерфейсы geofencing (уведомляют ваше приложение, когда пользователь входит/покидает определенную область), а API-интерфейсы распознавания активности (это пользовательское хождение "сидя"? "? также может быть очень полезно для экономии батареи и повышения точности.

Конечно, для этого требуется, чтобы у пользователя была обновленная версия приложения Google Play, но это не должно вызывать большого беспокойства.