точная широта и долгота текущего местоположения в Android

В моем приложении я показываю карту с маркером на широте и долготе текущего местоположения. И я использую Map.setMyLocationEnabled(true) для взаимодействия пользователя со своим местоположением.

В чем моя проблема - метод setMyLocationEnabled, а мой код location - lat,long отмечает разные позиции следующим образом:

Карта

Я использовал следующий код для получения широты и долготы текущего местоположения:

    LocationManager locationManager = (LocationManager)  getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, true);
    Location location = locationManager.getLastKnownLocation(provider);
    if(location!=null){
        latitude = location.getLatitude();
        longitude = location.getLongitude();
         --------- 
         }

Как получить точную широту и долготу моего текущего местоположения с помощью setLocationEnabled от Google?

Маркер с зеленым флажком — мой маркер, а синяя точка — для Android.


person M.A.Murali    schedule 02.08.2013    source источник
comment
Вы должны разработать Criteria criteria = new Criteria(); — см. здесь developer.android.com/reference/android/ location/Criteria.html.   -  person g00dy    schedule 02.08.2013
comment
Что-то вроде criteria.setAccuracy(Criteria.ACCURACY_FINE); , criteria.setAltitudeRequired(bool);, criteria.setBearingRequired(bool);, criteria.setCostAllowed(bool);, ASLO - criteria.setVerticalAccuracy(ACCURACY_HIGH) И criteria.setHorizontalAccuracy(ACCURACY_HIGH).   -  person g00dy    schedule 02.08.2013
comment
Я добавил вышеуказанные методы, но я получаю то же самое, что и старый.   -  person M.A.Murali    schedule 02.08.2013
comment
Затем вам понадобится это — developers.google.com/maps/ документация/android/v1/ .   -  person g00dy    schedule 02.08.2013


Ответы (2)


Вместо использования LocationManager добавьте себя в клиент местоположения GoogleMap через setOnMyLocationChangeListener. Он возвращает то же место, на которое указывает синяя точка.

person MaciejGórski    schedule 02.08.2013

Я думаю, проблема в том, что вы используете метод getLastKnownLocation().

Location location = locationManager.getLastKnownLocation(provider);

Этот метод возвращает не последнее местоположение, а последнее известное местоположение от выбранного поставщика местоположения. Как указано в документации здесь.

Возвращает Location, указывающий данные из последнего известного исправления местоположения, полученного от данного поставщика.

Это можно сделать без запуска провайдера. Обратите внимание, что это местоположение может быть устаревшим, например, если устройство было выключено и перемещено в другое место.

Вероятно, карта Google (using Map.setMyLocationEnabled(true)) отмечает ваше последнее местоположение, в то время как местоположение, полученное от locationManager.getLastKnownLocation(), немного устарело и неуместно. Это может быть причиной того, что вы получаете оба маркера в разных местах.

Для точности вы должны реализовать правильный прослушиватель местоположения и попытаться получить последние координаты местоположения из диспетчера местоположения. Полезная информация доступна в учебных документах.

person AnniJais    schedule 02.08.2013