Есть два способа получить 3 значения вращения (азимут, шаг, рулон).
Один регистрирует прослушиватель типа TYPE_ORIENTATION. Это самый простой способ, и я получаю правильный диапазон значений от каждого вращения, поскольку в документации говорится: азимут: [0, 359] Шаг: [-180, 180] roll: [-90, 90]
Другой, самый точный и сложный, чтобы понять первый раз, когда вы его видите. Android рекомендует его, поэтому я хочу использовать его, но я получаю разные значения.
азимут: [-180, 180]. -180/180 - S, 0 я N, 90 E и -90 Вт.
Шаг: [-90, 90]. 90 - 90, -90 - -90, 0 - 0, но -180/180 (лежащий с экраном вниз) - 0.
roll: [-180, 180].
Я должен получать одинаковые значения, но с десятичными знаками, верно?
У меня есть следующий код:
aValues = new float[3];
mValues = new float[3];
sensorListener = new SensorEventListener (){
public void onSensorChanged (SensorEvent event){
switch (event.sensor.getType ()){
case Sensor.TYPE_ACCELEROMETER:
aValues = event.values.clone ();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mValues = event.values.clone ();
break;
}
float[] R = new float[16];
float[] orientationValues = new float[3];
SensorManager.getRotationMatrix (R, null, aValues, mValues);
SensorManager.getOrientation (R, orientationValues);
orientationValues[0] = (float)Math.toDegrees (orientationValues[0]);
orientationValues[1] = (float)Math.toDegrees (orientationValues[1]);
orientationValues[2] = (float)Math.toDegrees (orientationValues[2]);
azimuthText.setText ("azimuth: " + orientationValues[0]);
pitchText.setText ("pitch: " + orientationValues[1]);
rollText.setText ("roll: " + orientationValues[2]);
}
public void onAccuracyChanged (Sensor sensor, int accuracy){}
};
Пожалуйста, помогите. Это очень расстраивает.
Должен ли я обрабатывать эти значения или я делаю что-то неправильно?
Спасибо.