我在主要活动中有以下代码:
LocationManager mlocMan = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
if (mlocMan.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
LocationListener mlocListener = new LocationManagerHelper(...);
mlocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,mlocListener);
}
在位置监听器中,我有:(将准确度初始化为-1)
if (theAccuracy == -1 || theAccuracy > loc.getAccuracy()) {
theAccuracy = Math.round(loc.getAccuracy());
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}
updateTimes++;
if (updateTimes == 3) {
mLocMan.removeUpdates(this);
updateTimes = 0;
//get address for location
theAccuracy = -1;
}
意思是,在通过GPS进行3次位置更新后,请获取最准确的位置并获取其地址。在模拟器上,我得到20m的固定精度(我使用DDMS发送长/ lat),但这不是现实生活所以我尝试使用我的设备,而第一次(3个请求)给了我确切的地址(开准确度为40米的地方,接下来有时更准确,但地址就在附近。我得到的最好的准确度是29m(发生过一次)大多数时间它超过30岁。这是我的GPS(LG G3)的问题还是有任何其他想法可以使事情在3-4之后变得更准确-5请求?
答案 0 :(得分:0)
有几个原因:
您的模拟器没有实际的gps硬件,所以它可能正在使用您的IP地址,所以这就是为什么它似乎已修复。
手机上的GPS硬件需要预热一点。设置轮询的频率一段时间(1更新一秒或半秒),让它运行几秒钟,然后进行计数测量。
位置管理器支持硬件和网络查找(wifi / celltowers)。不确定如何将提供商设置为手机的硬件,但如果您使用googlePlayServices gps客户端(LocationClient),则非常简单:
mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationClient.requestLocationUpdates(mLocationRequest,(LocationListener)this);
您可能正在门口的电脑上进行测试。建筑物肯定会影响GPS的准确性。