2011-03-12 41 views
0
注册多个传感器听众

我想在一个传感器管理器注册多个传感器监听器,但是这个代码将无法正常工作:问题在Android

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

它只注册加速度计。当我注释了第一条语句时,它注册了旋转

回答

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); 
+0

您不需要两个不同的侦听器,它也可以与一个侦听器一起工作。 – 2015-05-24 14:38:32