Проблема регистрации нескольких сенсорных слушателей на Android - PullRequest
0 голосов
/ 12 марта 2011

Я пытаюсь зарегистрировать несколько приемников датчиков в одном диспетчере датчиков, но этот код не будет работать:

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

Он регистрирует только акселерометр.Он зарегистрировал ротацию, когда я закомментировал первое утверждение

1 Ответ

0 голосов
/ 12 марта 2011

Технически вы регистрируете только одного слушателя в диспетчере датчиков, но этот слушатель прослушивает несколько датчиков.Моя первая идея заключалась в том, что вы должны использовать разные классы слушателей для каждого датчика.У меня был образец деятельности под рукой, где я использовал четыре датчика.Я зарегистрировал каждого из них с другим слушателем в диспетчере сенсоров.Это сработало.Теперь я попробовал ваш подход с одним слушателем для всех них, и это тоже сработало.

Трудно сказать, что может пойти не так только с этими двумя строками.Может быть, вы думаете, что датчик ориентации не был зарегистрирован, потому что слушатель получил несколько изменений значений от акселерометра подряд, прежде чем изменения ориентации были поставлены в очередь!?

Если у вас есть один экземпляр слушателя для нескольких датчиков,Вы должны проверить 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);
...