android - Robolected 传感器事件模拟

标签 android robolectric

我有一个类实现 SensorEventListener 并监听加速度计事件:

public class MyListener implements SensorEventListener {
    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {

    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {

    }
}

我想使用 Robolectric 测试 onSensorChanged 方法,

关于如何实现这一目标有什么想法吗?

最佳答案

1) 获取传感器管理器影子

2)注册所需的传感器

3)从传感器管理器获取监听器列表(它是私有(private)的,因此使用反射)

4)创建SensorEvent并触发onSensorChanged方法

@Before
public void init()  {
    SensorManager sensorManager = (SensorManager) RuntimeEnvironment.application.getSystemService(Context.SENSOR_SERVICE);
    sensorManagerShadow = shadowOf(sensorManager)
    Sensor sensor = Shadow.newInstanceOf(Sensor.class);
    sensorManagerShadow.addSensor(Sensor.TYPE_ACCELEROMETER, sensor);
}

@Test
public void myTest() throws Exception {
    SensorEvent event = sensorManagerShadow.createSensorEvent();
    Field field = ShadowSensorManager.class.getDeclaredField("listeners");
    field.setAccessible(true);
    List<SensorEventListener> listeners = (List<SensorEventListener>)field.get(this);
    listeners.get(0).onSensorChanged(event);
}

关于android - Robolected 传感器事件模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842971/

相关文章:

Android queueEvent(new Runnable()) 如果我有多个线程托管渲染器怎么办?

java - 应用程序关闭后存储整数值并检索它

java - Android 中使用现有项目到新项目的方法

android - 安全异常 : Permission Denial: opening provider

android - Robolectric 3 NoClassDefFoundError 上下文

java - 在 Robolectric 中为内部嵌套保护类创建阴影

java - Android Java 静态泛型调用

Android/Robolectric 框架工作 - 实例化 Activity 在 getResource 上返回 null

java - Robolectric 创建不同应用程序的虚拟共享首选项

android - Android 应用程序中的系统身份验证