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

3

当我打开我的应用并按下一个按钮时,我希望它仅从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/位置,以便如果第一次尝试的精度不好,至少第二次尝试可以给我更好的结果。
谢谢。

你可以尝试这种方法:http://www.androidpit.com/how-to-improve-your-gps-signal-on-your-android - Maveňツ
你在谈论设备的GPS,我想知道如何通过代码(Java/Android)实现。 - Amos
1个回答

0

听起来像是LocationManager正在使用缓存数据,就像你所建议的那样。

你可以尝试在LocationManager上使用requestLocationUpdates()方法。如果你只需要一个位置修复,那么在第一次回调LocationListener后调用removeUpdates()方法来禁用locationUpdates。

这种方法还允许你等待具有足够准确度的位置。以下代码展示了如何过滤位置,如果准确度对你的需求太低。

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

您建议将 THRESHOLD(20、50、100 或 200)设置为什么值? - mobileDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接