我使用GPS的Android程序非常不准确

时间:2011-12-07 23:17:20

标签: java android gps locationmanager

我使用GPS制作了一个节目,其纬度和经度距离大约8英里。

我认为这可能是因为我在里面,但是当我在手机上使用谷歌地图时,它会在我的房子里显示出来。

知道为什么会这样吗?

以下代码:

public class Clue extends Activity {

public static double latitude;
public static double longitude;
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.blah);

  Criteria criteria = new Criteria();
  criteria.setAccuracy(Criteria.ACCURACY_FINE);

  lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  ll = new MyLocationListener()}

private boolean getLoc() {
location = getLocation(); 

   longitude = location.getLongitude();
   latitude = location.getLatitude();
return inCorrectPlace(params);
}


    private Location getLocation() {
  lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);   
  return lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
}

我已经删除了不相关的代码,所有帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您所犯的关键错误是认为您可以立即请求准确的位置修复。调用getLastKnownLocation()会给你一个可能很旧的位置。你必须先告诉手机才能开始尝试定位。这需要时间,因此您会异步接收位置更新。

您需要做的是致电requestLocationUpdates(),然后在onLocationChanged()课程的LocationListener处理程序中接收更新。不一定会立即收到位置更新。可能需要几秒到几分钟。

请参阅android开发指南http://developer.android.com/guide/topics/location/obtaining-user-location.html

答案 1 :(得分:2)

你不能真正依赖getLastKnownLocation是可靠的。它可能已过时,不准确或为空。

您应该使用requestLocationUpdates来积极修复。

至于为什么谷歌地图正在修复您的位置,它可能正在使用网络提供商,而您只检查上次GPS定位。