我有一个服务来模拟GPS位置在坐标列表之间进行循环,但是onLocationChanged()方法只检测GPS的第一个模拟。我的意思是,如果我启动一个GPS程序,它只检测我的服务的第一次调用,不介意它是列表的第一个位置还是最后一个,只是检测它所做的第一次调用。
我确定我正在调用更改服务中的坐标,因为我使用了Toast消息,但是无法正常工作..
Mi代码。 首先,我设置了LocationManager
ls = new MyLocationListener();
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.addTestProvider(Context.LOCATION_SERVICE, false, false,
false, false, true, true, true, 0, 5);
lm.requestLocationUpdates(Context.LOCATION_SERVICE, 0, 0, ls);
lm.setTestProviderEnabled(Context.LOCATION_SERVICE, true);
MyLocationListener在方法onLocationChanged()中只有一条显示消息。 然后用计时器我定期调用模拟GPS的功能。
private void setMockLocation(double latitude, double longitude, float accuracy) {
Location newLocation = new Location(Context.LOCATION_SERVICE);
newLocation.setLatitude(latitude);
newLocation.setLongitude(longitude);
newLocation.setAccuracy(accuracy);
newLocation.setTime(System.currentTimeMillis());
lm.setTestProviderEnabled(mocLocationProvider, true);
lm.setTestProviderStatus(Context.LOCATION_SERVICE,
LocationProvider.AVAILABLE,
null,System.currentTimeMillis());
lm.setTestProviderLocation(Context.LOCATION_SERVICE, newLocation);
}
但它只在第一次调用时起作用,而不是下一次调用。
修改
经过一些调查工作后,我知道代码工作在2.2和4.2中。具有我需要处理的设备的版本是4.0。我不知道为什么,但不会在那个版本中运行。有什么想法吗?
答案 0 :(得分:1)
现在回答这个问题的时间已经很晚了,但是如果有人在将来遇到同样的错误,我在这里解决了这个问题。
我遇到了同样的问题,但在设置了'setElapsedRealtimeNanos'后,它对我有用。
newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());