Android LocationManager类未返回正确的纬度/经度

时间:2011-12-06 14:30:47

标签: android android-mapview locationmanager

我创建了一个程序,显示一个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。

以下是在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 个答案:

答案 0 :(得分:1)

您可以覆盖MyLocationOverlay上的onLoationChanged(位置l),只要叠加层获得一个新位置来绘制您的位置,就会调用它,而不是请求位置更新和getLastKnownLocation。

我猜测getLastKnownLocation正在返回0,0,因为还没有位置修复。