2013-08-02 1 views
1

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

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

Map

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

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?

Зеленый маркер-маркер - мой маркер, а синяя точка - андроид.

+0

Вы должны разработать критерии критериев = новые критерии(); '- см. Здесь http://developer.android.com/reference/android/location/Criteria.html. – g00dy

+0

Что-то вроде 'criteria.setAccuracy (Criteria.ACCURACY_FINE);', 'criteria.setAltitudeRequired (bool);', 'criteria.setBearingRequired (bool);', 'criteria.setCostAllowed (bool);', ASLO - ' criteria.setVerticalAccuracy (ACCURACY_HIGH) 'И' criteria.setHorizontalAccuracy (ACCURACY_HIGH) '. – g00dy

+0

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

ответ

0

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

0

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

Location location = locationManager.getLastKnownLocation(provider); 

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

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

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

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

Для обеспечения точности, вы должны внедрить надлежащего приемника местоположения и попытаться получить последние локации местоположения от диспетчера местоположений. Хорошую информацию можно найти на странице training docs