2011-12-06 74 views
0

我創建了一個程序,該程序顯示mapView,手機位置以及通過電子郵件發送此位置(緯度,經度)的能力。 (將一些地方添加到數據庫)。Android LocationManager類未返回正確的緯度/經度

我正在使用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(); 

當測試我在模擬器上的應用程序,一切都OK了:MapView的顯示我固定的(使用telnet和地理修復命令)的位置,我可以通過電子郵件發送位置。我在朋友的電話上得到了同樣的結果;一切似乎都行得通。

問題出在我的手機上。我可以在mapView(小藍圈)上顯示我的位置,但是當我嘗試通過電子郵件發送我的位置時,緯度和經度都設置爲0.

這裏是顯示我的位置的代碼MapView類:

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

您可以覆蓋MyLocationOverlay上的onLoationChanged(位置l),只要覆蓋圖獲取新位置來繪製位置,而不是請求位置更新和getLastKnownLocation,它就會被調用。

我猜getLastKnownLocation返回0,0因爲還沒有位置修正。

+0

顯示mapView的類已實現了LocationListener,因此我實現了「OnLocationChanged」方法。在那裏,我只使用LocationManager中的getLatitude和getLongitude方法。 – JoMoX909

+0

是否有另一種方法可以修復手機上的位置? – JoMoX909

+0

如果你在OnLocationChanged中獲得位置的經度和緯度,它也是0,0? – FunkTheMonk