Android LocationManager.getLastKnownLocation()返回null

时间:2009-10-22 17:07:44

标签: android gps

所以我试图在应用程序中只对一次gps坐标进行采样。我不想创建一个LocationListener对象来不断获取gps更新。我想等到收到坐标,然后继续进行另一项任务。

以下是代码段

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(crit, true);
Location loc = lm.getLastKnownLocation(provider);

模拟器中的loc变量始终为null。我尝试使用命令“geo fix latitude longitude”来设置它,我也尝试使用DDMS设置它。这两种方法都没有对代码产生任何影响。该片段也没有引起任何例外。

感谢您的帮助。

2 个答案:

答案 0 :(得分:11)

请求更新某个位置的调用没有阻塞,因此它不会在那里等待。此外,模拟器中的提供程序可能尚未启动。

可能的检查可能是查看其中的设置是否禁用gps提供程序?然后发送geo修复。

但是,我会使用位置监听器,因为您需要进行进一步的地理定位,所以它将是您的理想选择。位置监听器用于在位置发生变化时从LocationManager接收通知。您可以在第一个geofix之后取消注册侦听器。

注意:在设备上获取当前位置可能需要一些时间,甚至在设备上也可以返回null。

答案 1 :(得分:0)

尝试使用MyLocationOverlay,创建一个可以执行您需要对该GPS位置执行操作的runnable,并将其传递给

boolean     runOnFirstFix(java.lang.Runnable runnable)
          Queues a runnable to be executed as soon as we have a location fix.

然后禁用MyLocationOverlay的位置更新。

编辑:位置为空的原因是因为在运行代码时,没有收到任何geofix。