Android: используйте requestSingleUpdate или замените его
Я работаю над приложением, которое должно получить широту и долготу. в моем случае requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener)
не в варианте. Зачем? потому что я должен получить местоположение только тогда, когда пользователь делает что-то, что местоположение необходимо (скажем, он нажимает кнопку). и мне нужно местоположение точно в то время, когда кнопка нажата. в requestLocationUpdates
, мы можем установить minTime - если я установлю это, скажем, на 30000, местоположение в "время нажатия кнопки" будет не таким хорошим, как я хочу. по той же причине minDistance также не так хороша, как я хочу. если я постоянная функция requestLocationUpdates
правильный - когда minTime и minDistance установлены в 0, местоположение обновляется все время. Пожалуйста, поправьте меня, если я ошибаюсь. приложение для компании, в которой я работаю, и это приложение будет использоваться днем и ночью. поэтому, если приложение будет постоянно проверять наличие обновлений местоположения, батарея будет часто разряжаться. вот почему мне нужно местоположение как раз в то время, эта кнопка нажата. я нашел функцию requestSingleUpdate. но я не могу использовать его в eclipse =(как будто его не существует.
Есть ли другой способ сделать это или я что-то упустил?
2 ответа
Вы можете использовать метод getLastKnownLocation, но он может быть устаревшим. requestLocationUpdates является асинхронным, потому что gps необходимо "прогреться", чтобы найти новое местоположение. Метод requestSingleUpdate доступен начиная с уровня API 9, но вы можете реализовать его, используя requestLocationUpdates и отключив обновления после первого обратного вызова LocationListener.
Метод requestSingleLocation, новый для уровня API 9. Если вы ориентируетесь на более ранний уровень API, этот метод будет вам недоступен.
Одна из проблем с получением информации о местоположении заключается в том, что для исправления может потребоваться время. Это скорее проблема с провайдером определения местоположения GPS, чем провайдером сети. Если вы используете только сетевого провайдера, то получение информации о местоположении может не сильно откладываться, когда пользователь нажимает кнопку (я говорю это, ничего не зная о том, что ваше приложение делает с данными, или какой тип пользовательского опыта вы используете. пытаемся обеспечить).
Еще можно попробовать PASSIVE_PROVIDER. Это позволяет вам получать обновления местоположения, которые были запрошены из других приложений. Это будет означать, что вам необходимо запросить разрешение ACCESS_FINE_LOCATION. Вам также может понадобиться оставить что-то работающее для получения обновлений местоположения (вероятно, службы или BroadCastReceiver). Подход BroadcastReceiver не должен использовать такое дополнительное время автономной работы, поскольку он работает только при получении Намерения, а PASSIVE_PROVIDER получает местоположения только тогда, когда какое-либо другое приложение запрашивает их в любом случае.
Другой неприятный момент с PASSIVE_PROVIDER заключается в том, что в конечном итоге вы должны вызвать removeUpdates. Где и когда вызывать это, действительно зависит от того, как структурировано ваше приложение и как вы обрабатываете пользователя, выходящего из приложения.