GPS显示旧数据

时间:2013-05-02 10:07:49

标签: android gps position

我有一个活动,请求gps_provider,如果禁用,则接受network_provider。 问题是,当启用gps传感器但未接收到信号时(例如在房屋内),他将获取旧数据(位置不为空)而不是新位置的network_provider。我可以清除旧的gps数据吗?

这里是代码:

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    .....

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);


    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) 
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    if (location == null) {
        if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) 
            location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if (location == null) {
            showGPSDisabledAlertToUser();
        }
    }
    if (location != null) {
        this.onLocationChanged(location);
    }


public void onLocationChanged(Location l) {
    locateLandkreis(l);
}

private void locateLandkreis(Location l) {
    new DownloadWarn(this).execute(l); 
}

private class DownloadWarn extends AsyncTask<Location, Integer, String> {

    .....

    @Override
    protected String doInBackground(Location... loc) {

        ......

        LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        lm.removeUpdates(GPSActivity.this);

        return data;
    }

由于 奥利弗

1 个答案:

答案 0 :(得分:1)

您应该检查从GPSProvider获取的位置的时间,如果它早于证书阈值,也可以选择NetworkProvider的位置。

所以,而不是

if (location == null) { ...

这样做

if (location == null || 
    System.currentTimeMillis()-location.getTime() > THRESHOLD) { ...

其中THRESHOLD是一个以毫秒为单位的阈值。