目前我正在延迟发送到服务器 gps 位置。位置(经纬度)需要每 3 分钟发送一次,现在出于测试目的,它设置为每 20 秒发送一次,我正在记录坐标只是为了验证输出。这里的问题是,当我在模拟器中对位置进行地理修复时(我没有要测试的设备),记录器类会打印我所有最新的固定位置,而不仅仅是最后一个。postDelayed 的处理程序有效,这是我的课程。
此代码来自@kyogs。
public class LocalizadorGps extends Service {
private LocationManager mlocmag;
LocationListener mloclist;
private long UPDATE_INTERVAL;
private double latn,longn;
public Location loc;
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
mlocmag = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mloclist = new MyLocationList();
loc = mlocmag.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (loc == null) {
loc = mlocmag.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
updateServer(loc);
mlocmag.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 1000,mloclist);
}
public void updateServer(final Location loc) {
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
if (loc != null) {
final double latitude = loc.getLatitude();
final double longitude = loc.getLongitude();
Log.v("COORDINATES", Double.toString(latitude) + " " + Double.toString(longitude));
} else {
System.out.println("Location not avilable");
}
handler.postDelayed(this, 20000);
}
};
handler.postDelayed(runnable, 20000);
}
@Override
public void onDestroy() {
super.onDestroy();
mlocmag.removeUpdates(mloclist);
}
@Override
public boolean stopService(Intent name) {
return super.stopService(name);
}
public class MyLocationList implements LocationListener {
public void onLocationChanged(Location location) {
updateServer(location);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}
我正在这样做:
geo fix 44.41 56.75
输出是:
06-27 04:03:55.736 13743-13743/com.example.testingui
V/COORDINATES: 56.75 44.409998333333334
然后我再修复一个位置:
geo fix 44.44 80.33
输出是:
06-27 04:04:15.756 13743-13743/com.example.testingui
V/COORDINATES: 56.75 44.409998333333334
06-27 04:04:19.725 13743-13743/com.example.testingui
V/COORDINATES: 80.32999833333334 44.43999833333334
它重复先前固定的位置和新的位置。所需的行为只是最后一个位置。
最后一个:
geo fix 44.44 33.67
输出:
06-27 04:04:35.767 13743-13743/com.example.testingui
V/COORDINATES: 56.75 44.409998333333334
06-27 04:04:39.686 13743-13743/com.example.testingui
V/COORDINATES: 33.669999999999995 44.43999833333334
06-27 04:04:39.736 13743-13743/com.example.testingui
V/COORDINATES: 80.32999833333334 44.43999833333334
它重复最后三个固定位置。(看输出的时间)。再一次,所需的行为只是固定的最后一个位置。
注意:我用计时器而不是处理程序对此进行了测试,我得到了相同的结果!
所以我的问题是:
我做错了什么吗?我找不到问题:(。