У меня небольшая проблема с «Компасом».
Я хочу показать на экране, в каком направлении я смотрю с камерой.Для этого у меня есть CameraView
и Activity
при работе в ландшафтном режиме.
Теперь я пытаюсь определить направление с помощью датчиков, но что-то пошло не так.Когда я запускаю приложение, оно отображает некоторые странные данные, но после встряхивания телефона показывает правильные данные?!
Может быть, вы можете мне помочь.Это мой метод onSensorChanged:
public void onSensorChanged(SensorEvent event) {
int type = event.sensor.getType();
if (type == Sensor.TYPE_ACCELEROMETER) {
mGrav = event.values.clone();
} else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
mMag = event.values.clone();
}
if (SensorManager.getRotationMatrix(mRinn, null, mGrav, mMag)) {
SensorManager.remapCoordinateSystem(mRinn, SensorManager.AXIS_X, SensorManager.AXIS_Z, mRout);
SensorManager.getOrientation(mRout, mOrient);
//Logger.d("direction?: " + Math.toDegrees(mOrient[0]));
setOrientationText(Math.toDegrees(mOrient[0]));
}
}
Я получаю данные двух датчиков (магнит и ускоритель), а затем создаю RotationMatrix (как сказано в документации).В случае, если это альбомная ориентация, я помещаю X -> Ось X и Y -> Ось Z для RotationMatrix.
Экранная ориентация для этого действия также является альбомной.Понимаете, почему я получаю правильные данные только после встряхивания телефона?!