3

我有一项服务来模拟 GPS 位置,在坐标列表之间循环,但是 onLocationChanged() 方法只检测到 GPS 的第一个模拟。我的意思是,如果我启动一个 GPS 程序,它只会检测到我的服务的第一次调用,不介意它是列表的第一个位置还是最后一个位置,只检测它发出的第一个调用。

我确定我正在调用以更改我的服务中的坐标,因为我使用了 Toast 消息,但不起作用..

米码。首先我设置了 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。我不知道为什么,但没有在那个版本中运行。有任何想法吗?

4

1 回答 1

1

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

我有同样的问题,但在设置“setElapsedRealtimeNanos”后,它对我有用。

newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
于 2014-05-11T15:28:25.837 回答