当我打开我的应用程序并按下按钮时,我希望它仅通过GPS请求一个位置,以获得最准确的位置。我做了以下事情:
LocationManager mlocManager = (LocationManager)GetActivity().getSystemService(Context.LOCATION_SERVICE);
if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
LocationListener mlocListener = new LocationManagerHelper(...);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//accuracy fine calls accuracy high
mlocManager.requestSingleUpdate(criteria,mlocListener,null);
}
当我在家里打开GPS时,转到窗口然后!我按下那个按钮,我的位置远离我,准确度为300-900!我认为可能第二个请求会改进它,但即使是4-5个请求仍然在同一个位置以相同的低精度,而且,其他请求非常快,就好像它没有真正再次询问GPS一样位置,但从某种缓存中获取它。
如果我已经靠近窗户打开GPS,位置会更好,有时我会达到20-30的准确度,事情就是这样,即便如此,有时精度也不高我想知道如何初始化GPS /位置,所以如果我在第一次尝试时得到的准确度很差,至少它会在第二次尝试时给我一个更好的。
由于
答案 0 :(得分:0)
听起来,LocationManager正在使用您建议的缓存数据。
您可以尝试在LocationManager上使用requestLocationUpdates()方法。如果只需要一个位置修复,则通过调用removeUpdates()方法禁用locationUpdates 在第一次回调到LocationListener之后。
此方法还允许您等待具有足够精确度的位置。以下代码显示了如果准确性太低而无法满足您的需求,如何过滤位置。
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
if (location.getAccuracy() > THRESHOLD) {
return;
}
//Act on location data here
//Then remove the updates once done
mlocManager.removeUpdates(mlocListener);
}
public void onProviderDisabled(String provider) {}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
};