我有一个活动,请求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;
}
由于 奥利弗
答案 0 :(得分:1)
您应该检查从GPSProvider获取的位置的时间,如果它早于证书阈值,也可以选择NetworkProvider的位置。
所以,而不是
if (location == null) { ...
这样做
if (location == null ||
System.currentTimeMillis()-location.getTime() > THRESHOLD) { ...
其中THRESHOLD
是一个以毫秒为单位的阈值。