Android GPS需要一段时间才能准确

时间:2011-12-09 11:03:39

标签: java android gps location locationmanager

我制作了一款Android应用,可以通过点击按钮获取经度和纬度的位置。

首先,我得到最后一个已知的位置读数,为了论证,当我第一次加载应用程序/打开gps时,这是不准确的。

我想知道的是如何等待它准确无误,例如在Google地图中收到“等待位置”的祝酒消息时。

如果您发现可以改进代码的任何方式,它也会有所帮助。

参考代码:

public class Clue extends Activity {

    public static double latitude;
    public static double longitude;
    Criteria criteria;
    LocationManager lm;
    LocationListener ll;
    Location location;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.questions);

      criteria = new Criteria();
      criteria.setAccuracy(Criteria.ACCURACY_FINE);
      lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
      ll = new MyLocationListener();
      lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll);          
}



private boolean weAreThere() {
    location = getLocation(); 
    longitude = location.getLongitude();
    latitude = location.getLatitude();

    return inCorrectPlace(param);
}

private Location getLocation() {
     lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll); 
      return lm.getLastKnownLocation(lm.getBestProvider(criteria, true));
}
}

    public class MyLocationListener implements LocationListener
    {
        public void onLocationChanged(Location loc)
        {        
             Clue.longitude = loc.getLongitude();
             Clue.latitude = loc.getLatitude();
        }
}

感谢阅读,所有回复都将受到赞赏。

3 个答案:

答案 0 :(得分:4)

如果Location.hasAccuracy()返回true,您可以调用Location.getAccuracy()来检索以米为单位的精度,然后过滤那些您认为不够准确的精度。

请注意,您没有使用LocationManager.GPS_PROVIDER,因此您的修补程序也可以通过其他方式获取(例如WiFi)。

在获得GPS修复(室外)之前,通常希望GPS芯片能够“热”*一分钟。

*热,我的意思是卫星覆盖。一段时间后,一些芯片组断开连接(“冷”)以保留电池。芯片冷却时,首次定位时间(TTFF)更大。

答案 1 :(得分:2)

这是一个很好的解释,

http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html

可帮助您准确了解如何实施它。

答案 2 :(得分:2)

最初,您应该使用getlastknownLocation ()

进行修复

此外,U可以使用后台服务,使用NETWORK.PROVIDER来更新位置...如果明智地使用,它将不会耗尽你的电池......如果GPS关闭也可以使用

如果没有网络提供商,那么你应该尝试让用户打开GPS。

如果您使用2.2尝试PASSIVE PROVIDER