为啥 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 返回旧的位置修复?
locationmanager didenterregion 没有被调用