Android SensorManager.getOrientation () restituisce il passo tra -PI / 2 e PI / 2

Sto progettando un'applicazione che deve controllare l'orientamento dell'apparecchio (Azimuth, Pitch and Roll). Utilizzo il seguente codice per get questo risultato:

@Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) gravityMatrix = event.values.clone();// Fill gravityMatrix with accelerometer values else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) geomagneticMatrix = event.values.clone();// Fill geomagneticMatrix with magnetic-field sensor values if(gravityMatrix != null && geomagneticMatrix != null){ RMatrix = new float[16]; IMatrix = new float[16]; SensorManager.getRotationMatrix(RMatrix, IMatrix, gravityMatrix, geomagneticMatrix);// Retrieve RMatrix, necessary for the getOrientation method SensorManager.getOrientation(RMatrix, orientation);// Get the current orientation of the device } } 

Ora posso get i valori azimuth, pitch e roll dal float 'orientation' []. Tutto va bene per i valori dell'azimut e del rullo (restituisce l'angolo corretto), ma quando printing il valore del passo (orientamento [1]) ricavo sempre un angolo tra PI / 2 e -PI / 2. Non capisco perché? Non sono in grado di recuperare un angolo maggiore di PI / 2 o inferiore a -PI / 2. Appena ho un angolo di + – PI / 2 e continuo a ruotare il mio dispositivo (Samsung Galaxy S2) l'angolo diminuisce improvvisamente dopo aver raggiunto il valore PI / 2.

  • L'aggiunta della dipendenza della libreria Layer in Android sopprime la window di dialogo RequestPermissions
  • Lame MP3 Encoder compilare per Android
  • Come convertire un'applicazione Web Angular1 esistente in un'applicazione Cordova?
  • Come triggersre il GPS su Android
  • get la latitudine e la longitudine utilizzando il codice postale
  • Come tornare all'attività precedente da un frammento
  • Qualcuno può spiegarmi perché il pitch-angolo si comport così poco comune?

    Grazie in anticipo!

  • Modifica il carattere della maschera di modifica di EditText in asterisco (*)
  • Dispositivi supportti 0 sul gioco di Google
  • Posizionare la posizione corrente dell'utente e visualizzarla nelle mappe di Google
  • junit.framework.AssertionFailedError: Eccezione in constructor: (java.lang.NoClassDefFoundError)
  • È ansible cambiare il colore della scheda selezionata in android?
  • Animazione 3D tra attività in Android
  • One Solution collect form web for “Android SensorManager.getOrientation () restituisce il passo tra -PI / 2 e PI / 2”

    Il passo viene calcolato come pitch = (float) Math.asin(-RMatrix[7]); La gamma della function arcsin è [-PI/2, PI/2] , in modo che l' asin può prendere solo valore tra -PI/2 e PI/2 .

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.