Différentes valeurs entre les capteurs TYPE_ACCELEROMETER / TYPE_MAGNETIC_FIELD et TYPE_ORIENTATION

Il y a 2 façons d'obtenir les 3 valeurs de rotation (azimut, de tangage, de roulis).

Est l'enregistrement d'un listener de type TYPE_ORIENTATION. C'est le moyen le plus facile et j'ai une bonne gamme de valeurs de chaque rotation, de la documentation dit:
azimut: [0, 359]
pitch: [-180, 180]
roll: [-90, 90]

L'autre, les plus précises et les plus complexes à comprendre la première fois que tu le vois. Android le recommande, si je veux l'utiliser, mais j'obtiens des valeurs différentes.

azimut: [-180, 180]. -180/180 est S, 0 i N, 90 E et -90 W.
pitch: [-90, 90]. À 90 à 90, est -90 -90, 0 est 0, mais -180/180 (couché avec l'écran vers le bas) est de 0.
roll: [-180, 180].

Je devrais obtenir les mêmes valeurs, mais avec des décimales, droit?

J'ai le code suivant:

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){}
};

S'il vous plaît aider. C'est très frustrant.

Dois-je traiter avec ces valeurs, ou je fais quelque chose de mal?

Grâce.

source d'informationauteur Gabriel Llamas