GPS模拟 - 我只能模拟一次位置

时间:2012-11-13 11:14:22

标签: android gps mocking

我有一个服务来模拟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。我不知道为什么,但不会在那个版本中运行。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

现在回答这个问题的时间已经很晚了,但是如果有人在将来遇到同样的错误,我在这里解决了这个问题。

我遇到了同样的问题,但在设置了'setElapsedRealtimeNanos'后,它对我有用。

newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());