В настоящее время я тестирую приложение LocationProvider моего приложения Android, издеваясь над некоторыми данными GPS из файла, чтобы временно имитировать движение на реальном устройстве. Кроме того, я хочу переключиться с моих издевающихся данных на реальные данные «на лету». Следующий код отлично подходит для издевательских данных GPS, считанных из файла. Однако, когда я пытаюсь перестать насмехаться с данными GPS, мое текущее местоположение застревает в последнем прочитанном GPS-сигнале из файла.Mocking Android LocationProvider
Поскольку я не хочу менять код моего реального приложения для Android, я пишу свои издеваемые данные в 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);
}
Вы делаете это на эмуляторе правильно? Не на реальном телефоне? – Rarw
На реальном телефоне – Salamibrot