Android LocationManager класс не возвращает правильную широту / долготу - PullRequest
0 голосов
/ 06 декабря 2011

Я создал программу, которая отображает mapView с указанием местоположения телефона и возможностью отправки этого местоположения (широта, долгота) по электронной почте.(чтобы добавить некоторые места в базу данных).

Я использую класс LocationManager и методы getLatitude / getLongitude для определения местоположения телефона.Мой код выглядит следующим образом:

double MyLongitude  = 0;
double MyLatitude   = 0;
Location location   = null;

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 35000, 10, new ShowLocation()); 

location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

MyLatitude  = location.getLatitude();
MyLongitude = location.getLongitude();

При тестировании моего приложения на эмуляторе все в порядке: mapView отображает местоположение, которое я исправил (используя команды telnet и geo fix), и я могу отправить местоположение по электронной почте,Я получаю тот же результат по телефону от друга;кажется, все работает хорошо.

Проблема на моем телефоне.Я могу отобразить свое местоположение на mapView (маленький синий круг), но когда я пытаюсь отправить свое местоположение по электронной почте, широта и долгота были равны 0.

Вот код для отображения моего местоположенияна карте:

MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);
myLocation.enableMyLocation();

Я не понимаю, почему мое местоположение, кажется, работает, когда отображается, но я не могу получить правильную широту и долготу, в то время как это, кажется, работает на эмуляторе и телефоне моего друга.

Это из-за отсутствия кода или чего-то в этом роде?Это проблема с моим телефоном?Я проверил разрешения, и у меня уже есть нужные:

android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_MOCK_LOCATION

Я также попытался проверить с LocationManager.NETWORK_PROVIDER вместо LocationManager.GPS_PROVIDER, но получил тот же результат.

1 Ответ

1 голос
/ 06 декабря 2011

Вы можете переопределить onLoationChanged (Location l) в MyLocationOverlay, который будет вызываться всякий раз, когда оверлей получает новое местоположение для рисования вашей позиции, вместо запроса обновлений местоположения и getLastKnownLocation.

Я предполагаю, что getLastKnownLocationвозвращает 0, 0, потому что еще не было исправлено местоположение.

...