Нет необходимости проверять акселерометр ОС, просто проверить свою собственную логику, которая реагирует на ОС - другими словами, ваш SensorListener
. К сожалению SensorEvent
является частным, и я не мог назвать SensorListener.onSensorChanged(SensorEvent event)
напрямую, поэтому должен был первым подкласс SensorListener с моим собственным классом, и назвать свой собственный метод непосредственно из тестов:
public class ShakeDetector implements SensorEventListener {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
onSensorUpdate(x, y, z);
}
public void onSensorUpdate(float x, float y, float z) {
// do my (testable) logic here
}
}
Тогда я могу позвонить onSensorUpdated
непосредственно из моего тестового кода , который имитирует стрельбу акселерометром.
private void simulateShake(final float amplitude, int interval, int duration) throws InterruptedException {
final SignInFragment.ShakeDetector shaker = getFragment().getShakeSensorForTesting();
long start = System.currentTimeMillis();
do {
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
shaker.onSensorUpdate(amplitude, amplitude, amplitude);
}
});
Thread.sleep(interval);
} while (System.currentTimeMillis() - start < duration);
}
Это, конечно, имеет смысл и звучит как лучшая идея. Есть ли у вас примеры использования «подключаемого источника данных»? –
Является ли этот ответ еще актуальным? Или что-то новое вышло? – TinyTimZamboni
@TinyTimZamboni: Мне кажется, что команда Android Tools работала над тем, как использовать Android-устройство в качестве входного сигнала датчика для эмулятора, но я не знаю, где это стоит.В противном случае, я не знаю, какой способ обеспечить ввод ложных датчиков. – CommonsWare