在Android中有没有一种方法可以检索多个传感器数据?

11

我正在尝试获取加速度计和方向数据。目前,我创建了一个AccelerometerManager和OrientationManager。它们都做同样的事情;实现SensorEventListener并从onSensorChanged()监听器中的values[]中检索数据。

有没有更简单的方法来实现呢?拥有两个具有重复代码的处理程序似乎是不必要的。是否有一种方式可以访问结合了加速度计和方向数据的values[]数组?

由于存在两个处理程序,我还必须执行以下操作:

    orientationManager = new OrientationManager(this);
    orientationSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    orientationSensorManager.registerListener(orientationManager, 
            orientationSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), 
            SensorManager.SENSOR_DELAY_GAME);

    accelerometerManager = new AccelerometerManager(this);
    accelerometerSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    accelerometerSensorManager.registerListener(accelerometerManager, 
            orientationSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
            SensorManager.SENSOR_DELAY_GAME);
1个回答

41

你可以尝试这样做:

private SensorManager mSensorManager;
private SensorEventListener mSensorListener;

////


mSensorManager = (SensorManager) this
                .getSystemService(Context.SENSOR_SERVICE);
mSensorListener = new SensorEventListener() {
    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        Sensor sensor = event.sensor;
        if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            //TODO: get values
        }else if (sensor.getType() == Sensor.TYPE_ORIENTATION) {
            //TODO: get values
        }
    }
}

mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);

4
顺便说一下,你的Activity可以直接实现SensorEventListener接口,然后将“this”作为第一个参数传递给registerListener()方法,这样也是可以的。 - Edward Falk
1
SensorEventListener不是一个接口吗?你能创建一个接口的实例吗?谢谢。 - Chaine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接