在Android上注册多个传感器侦听器时出现问题

时间:2011-03-12 13:57:45

标签: android rotation accelerometer sensor

我正在尝试在一个传感器管理器中注册多个传感器侦听器,但此代码无法正常工作:

boolean linearAccelerationRegistered = mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
        boolean rotationVecRegistered = mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_FASTEST);

它只记录加速度计。当我注释掉第一个语句时它注册了轮换

1 个答案:

答案 0 :(得分:0)

从技术上讲,您只向传感器管理器注册一个侦听器,但此侦听器会侦听多个传感器。 我的第一个想法是,你必须为每个传感器使用不同的监听器类。我手头有一个样本活动,在那里我使用了四个传感器。我在传感器管理器上为每个人注册了不同的监听器。那很有效。现在,我尝试使用一个监听器来处理所有这些问题,并且这个方法也很有效。

很难说只有这两行才会出现问题。也许您认为,方向传感器未注册,因为在方向更改排队之前,侦听器连续从加速度计接收到多个值更改!?

如果您有多个传感器的侦听器实例,则应检查SensorEvent以找出哪些传感器报告了更改:

public void onSensorChanged(SensorEvent event) {
    Sensor source = event.sensor;
    if (source.equals(mAccelerometer)) {
       // do your stuff
    } else if (source.equals(mOrientation)) {
       // do your stuff
    }
}

尝试使用它自己的监听器注册每个传感器,看看,如果你得到不同的结果(但它也应该按你指出的方式工作......):

mSensorManager.registerListener(mAccelerometerListener, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
mSensorManager.registerListener(mOrientationListener, mOrientation, SensorManager.SENSOR_DELAY_FASTEST);