Подтвердить что ты не робот

Android LocationManager.getLastKnownLocation() возвращает null

Итак, я пытаюсь пробовать gps-координаты только один раз в приложении. Я не хочу создавать объект LocationListener, чтобы постоянно получать обновления gps. Я хочу подождать до получения координат, а затем перейти к другой задаче.

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

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);

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

Спасибо за вашу помощь.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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