Технически вы регистрируете только одного слушателя в диспетчере датчиков, но этот слушатель прослушивает несколько датчиков.Моя первая идея заключалась в том, что вы должны использовать разные классы слушателей для каждого датчика.У меня был образец деятельности под рукой, где я использовал четыре датчика.Я зарегистрировал каждого из них с другим слушателем в диспетчере сенсоров.Это сработало.Теперь я попробовал ваш подход с одним слушателем для всех них, и это тоже сработало.
Трудно сказать, что может пойти не так только с этими двумя строками.Может быть, вы думаете, что датчик ориентации не был зарегистрирован, потому что слушатель получил несколько изменений значений от акселерометра подряд, прежде чем изменения ориентации были поставлены в очередь!?
Если у вас есть один экземпляр слушателя для нескольких датчиков,Вы должны проверить 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);