2014-11-06 52 views
2

当我打开我的应用程序并按下按钮时,我希望它仅通过GPS请求一个位置,以获得最准确的位置。我做了以下几点:如何提高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

[你可以试试这个方法(http://www.androidpit.com/how-to-improve-your-gps-signal-on-your-android) – Gattsu 2014-11-06 13:57:57

+0

你所谈论的设备的GPS ,我想知道怎样才能通过代码(Java/Android) – Amos 2014-11-06 15:35:14

回答

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

对THRESHOLD(20,50,100或200)给出什么建议? – mobileDev 2016-09-26 22:08:48