2009-10-22 2 views
17

Так что я пытаюсь пробовать gps-координаты только один раз в приложении. Я не хочу создавать объект LocationListener, чтобы постоянно получать обновления gps. Я хочу подождать до получения координат, а затем перейти к другой задаче.Android LocationManager.getLastKnownLocation() возвращает null

Вот фрагмент кода

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE); 
Criteria crit = new Criteria(); 
crit.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(crit, true); 
Location loc = lm.getLastKnownLocation(provider); 

Переменная LOC всегда нуль в эмуляторе. Я попытался использовать команду «geo fix latitude longitude», чтобы установить ее, а также попытался использовать способ DDMS для ее настройки. Ни один из методов не повлиял на код. Также фрагмент не вызывает никаких исключений.

Благодарим за помощь.

+1

Вот хороший пример с исходным кодом [http://marakana.com/forums/android/android_examples/42.html](http://marakana.com/forums/android/android_examples/42.html) – Fedor

ответ

11

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

Возможно, проверка может заключаться в том, чтобы определить, отключены ли в нем настройки gps-провайдера? затем отправьте geo fix.

Однако, я бы использовал Location Listener, это было бы идеально в вашем случае, так как вам нужно установить geo, чтобы продолжить дальше. Listener List используется для получения уведомлений от LocationManager при изменении местоположения. Вы можете отменить регистрацию слушателя после первого геофикса.

Примечание. Чтобы получить текущее местоположение, устройство может занять некоторое время, и даже на устройстве это может вернуть значение null.

+0

Да, сделав LocationListener, ожидая, пока у вас есть исправление, которым вы довольны, это в значительной степени ваш единственный вариант. Как уже упоминалось, вы можете немедленно отменить регистрацию. –

+8

Получается, что без какого-либо LocationListener это не сработает. Даже просто добавление макета LocationListener, который даже не сделает ничего, заставит телефон получить GPS-координаты. –

+0

Я предполагаю, что LocationListener обновляет некоторое кэшированное местоположение, которое использует locationManager. Спасибо за публикацию. – krishc

0

Попробуйте использовать MyLocationOverlay, создать работоспособный, который делает то, что вам нужно сделать с этим местом GPS, и передать его в

boolean  runOnFirstFix(java.lang.Runnable runnable) 
      Queues a runnable to be executed as soon as we have a location fix. 

, а затем отключить обновления местоположения для MyLocationOverlay.

Редактировать: причина, по которой местоположение является нулевым, заключается в том, что во время выполнения этого кода геофикс не был получен.

+0

I тоже получить нуль, но приложение Google maps знает, где я сейчас, поэтому должно быть какое-то исправление, хранящееся где-то еще. –

+0

Использование runnable является умным, но нет необходимости вводить карты google для этой проблемы. – Dorje

Смежные вопросы