Android LocationManager.getLastKnownLocation()返回null

Rob*_*ker 17 gps android

所以我试图在应用程序中只对一次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);
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助.

小智 11

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

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

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

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

  • 事实证明,没有任何LocationListener它将无法正常工作.即使只是添加一个甚至不做任何事情的模拟LocationListener也会导致手机获得gps坐标. (8认同)
  • 因此,如果该方法被称为最后一个已知位置,为什么它不能返回最后一个已知位置而不是等待新修复.对我来说似乎反效果. (5认同)