如何提高GPS定位的准确性?

时间:2014-11-06 13:35:32

标签: android gps location

当我打开我的应用程序并按下按钮时,我希望它仅通过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 /位置,所以如果我在第一次尝试时得到的准确度很差,至少它会在第二次尝试时给我一个更好的。

由于

1 个答案:

答案 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) {}
};