为啥 LocationManager 没有 lastKnown 位置?

Posted

技术标签:

【中文标题】为啥 LocationManager 没有 lastKnown 位置?【英文标题】:Why does the LocationManager does not have a lastKnown location?为什么 LocationManager 没有 lastKnown 位置? 【发布时间】:2011-09-04 05:03:45 【问题描述】:

我想要用户的位置,并且在该用户自己导航后也只需要一次

locationManager = (LocationManager)this.getSystemService(LOCATION_SERVICE);
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
if (location != null) 
   System.out.println(location.toString());
   lat=location.getLatitude();
   lng=location.getLongitude();
     
p = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));

但是我无法获取用户的位置,是因为手机的互联网连接速度慢吗??

【问题讨论】:

find current location latitude and longitude的可能重复 ***.com/questions/3682998/… 和 ***.com/questions/1916568/… 和 ***.com/questions/4474470/… 和 ***.com/questions/5674414/… 以及许多其他的可能重复 我已经尝试了很多选项,但仍然无法解决,所以由于烦躁而发布它无论如何都解决了。 【参考方案1】:

getLastKnownLocation 方法只会在 gps LocationProvider 已在某处存储位置时返回位置。如果用户在他的设备上使用 gps 的时间还不够长,无法获得有效的 GPS 定位,则该方法将返回 null。

即使您检索位置检查该位置的时间,也不能保证该位置不是很旧。

【讨论】:

谢谢 Janusz,我解决了。最终我给了代码几秒钟的时间,让 gps 真正找到以前的位置。【参考方案2】:

仅仅获得一个 locationManager 并调用 getLastKnownLocation() 是不够的 因为在有更新之前不会有“最后已知位置” 您缺少 LocationManager 类提供的请求:

public void requestLocationUpdates(java.lang.String provider, 
                                   long minTime,
                                   float minDistance, 
                                   android.location.LocationListener listener) 

如果您的活动像我的一样实现了 LocationListener,您可以将“this”作为 LocationListener 传递给源自该类的方法的调用。否则,还有其他几个重载采用 Activity 或 Looper 类。

locationManager.requestLocationUpdates(provider, minTime, minDistance, this);

为了确保设备获取位置,请求更新 - 但您也可以 想为未能找到提供者或getLastKnownLocation 返回 null 设置警卫。

locationManager.requestLocationUpdates(provider, 1, 0, this);
mostRecentLocation = locationManager.getLastKnownLocation(provider);
if(mostRecentLocation == null)
// lower your expectations, or send user message with Toast or something similar 

告诉用户打开他们的位置共享或其他提供商服务。

【讨论】:

以上是关于为啥 LocationManager 没有 lastKnown 位置?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 locationmanager 使用新的 gettime-timestamp 返回旧的位置修复?

为啥我的 LocationListener 变为空?

为啥我的位置为空? - 安卓

locationmanager didenterregion 没有被调用

locationManager:didEnterRegion:在没有位置更改的情况下触发

从 R 中的 *.las 点云创建正射镶嵌