¿Cómo obtengo el rumbo correcto (orientación magnética) independientemente de la orientación de la pantalla?

Quiero obtener la orientación magnética actual independientemente de la orientación de la pantalla actual (horizontal o vertical).

encontréesta Ejemplo, pero no es orientación independiente, ¿verdad? Yesta Tampoco me ayudó. Yo tambien leihttp://android-developers.blogspot.de/2010/09/one-screen-turn-deserves-another.html.

Este es mi enfoque actual con la forma obsoleta que no quiero usar (breve):

mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

private SensorEventListener sensorEventListener = new SensorEventListener() {

    public void onSensorChanged(SensorEvent event) {

        /* Get measured value */
        float current_measured_bearing = (float) event.values[0];

        /* Compensate device orientation */
        switch (((WindowManager) getSystemService(WINDOW_SERVICE))
                .getDefaultDisplay().getRotation()) {
        case Surface.ROTATION_90:
            current_measured_bearing = current_measured_bearing + 90f;
            break;
        case Surface.ROTATION_180:
            current_measured_bearing = current_measured_bearing - 180f;
            break;
        case Surface.ROTATION_270:
            current_measured_bearing = current_measured_bearing - 90f;
            break;
        }

¡Pero la última parte es definitivamente incorrecta! ¿Cómo uso el método más nuevo?getRotationMatrix() correctamente en este caso? (Orientación independiente) O simplemente tengo que usar otros valores de laevent.values[] matriz basada en la matriz de rotación? ¿O tendré que 'reasignar las coordenadas'? Asi esese ¿La forma correcta de lograr esto?

Estoy desarrollando dispositivos con rotación de pantalla de 360 ​​° y en API Level 11+.

Sé que esas preguntas se hacen con mucha frecuencia, pero simplemente no puedo transferir sus respuestas a mi pregunta.

Respuestas a la pregunta(3)

Su respuesta a la pregunta