目前我正在通过模拟文件中的一些 GPS 数据来测试我的 android 应用程序的 LocationProvider,以便临时模拟真实设备上的运动。另外,我想即时从我的模拟数据切换到真实数据。以下代码适用于模拟从文件读取的 GPS 数据。但是,当我尝试停止模拟 GPS 数据时,我当前的位置会卡在文件中最后读取的 GPS 信号上。
因为我不想更改我的实际 android 应用程序的代码,所以我将我的模拟数据写入与 name 关联的 LocationProvider 中GPS_Provider
。基于位置的应用程序可以通过简单地调用 `requestLocationUpdates(LocationManager.GPS_Provider, , ) 来读取模拟数据。棘手的部分是重置 GPS LocationProvider 以再次提供真实数据。在这里我被卡住了,不知道如何重新设置它。
private AssetManager assetManager;
private LocationManager locationManager;
private String locationProviderName = LocationManager.GPS_Provider;
private List<Location> allMockedPositions;
private Handler handler;
private int position;
private Runnable runner = new Runnable() {
@Override
public void run() {
if (position <= allMockedPositions.size()) {
Location mockedLocation = allMockedPositions.get(position++);
locationManager.setTestProviderLocation(locationProviderName, mockedLocation);
handler.postDelayed(runner, 500);
}
}
};
public MockLocationProvider(Context context) {
assetManager = context.getAssets();
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
}
public void startMockingLocation(Route route) {
allMockedPositions = LocationData.getRouteData(assetManager, route, locationProviderName);
startMocking();
}
private void startMocking() {
position = 0;
handler = new Handler();
handler.post(runner);
}
public void stopMockingLocation() {
locationManager.clearTestProviderLocation(locationProviderName);
stopMocking();
}
private void stopMocking() {
handler.removeCallbacks(runner);
}