【发布时间】:2013-03-14 15:03:37
【问题描述】:
目前我正在通过模拟文件中的一些 GPS 数据来测试我的 android 应用程序的 LocationProvider,以便临时模拟真实设备上的运动。另外,我想即时从我的模拟数据切换到真实数据。以下代码适用于模拟从文件读取的 GPS 数据。但是,当我尝试停止模拟 GPS 数据时,我的当前位置卡在文件中最后读取的 GPS 信号上。
因为我不想更改实际 Android 应用程序的代码,所以我将模拟数据写入与名称 GPS_Provider 关联的 LocationProvider 中。基于位置的应用程序可以通过简单地调用 `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);
}
【问题讨论】:
-
你是在模拟器上做的吧?不在真手机上?
标签: android testing gps mocking