2012-01-04 23 views
10

Estoy buscando un ejemplo de brújula para Android. Todo lo que necesito hacer es obtener la marca correcta (en el modo de retrato &).Compass android example

ya he encontrado varias muestras, algunos utilizan solamente Sensor.TYPE_ORIENTATION, algunos utilizan una combinación de Sensor.TYPE_ACCELEROMETER & Sensor.TYPE_MAGNETIC_FIELD.

¿Cuál es la forma más común & de conseguir el rumbo para, digamos, Android 1.6 - 4.0?

Respuesta

19

Sensor.TYPE_ORIENTATION está en desuso.

La documentación dice que debe usar SensorManager.getOrientation() en su lugar.

por lo que debe leer de Sensor.TYPE_ACCELEROMETER, así como de Sensor.TYPE_MAGNETIC_FIELD, y luego llamar a SensorManager.getRotationMatrix() y finalmente SensorManager.getOrientation() que le devuelva la orientación del teléfono.

Desde allí, si ve este diagrama, es trivial obtener la orientación del teléfono. Esto es probablemente lo que hace su segundo ejemplo, pero no lo sé porque no me mostró lo que es.

+4

Lo siento, olvidé adjuntar el ejemplo: http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html ¿Entonces esta es la forma correcta? – nr1

+0

Sí, esas cosas en ese enlace se ven bien – Dan

+0

Obviamente, cómo usas los datos depende de ti, 'onSensorChanged' es donde está la matemática interesante. – Dan

0

El uso de una combinación de Sensor.TYPE_ACCELEROMETER y Sensor.TYPE_MAGNETIC_FIELD y SensorManager.getOrientation() método no me da valores precisos. El método obsoleto Sensor.TYPE_ORIENTATION funciona bien. :)

+3

Corrija su código a continuación. El ejemplo del código parece estar funcionando bien (http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html junto con el comentario de gezdy) – Vaiden

+1

O tal vez necesite recalibrar su dispositivo – Vaiden

5

Gracias a Dan por su código de muestra.

Pero no es sólo una pequeña corrección : cambio event.values a event.values.clone() de acuerdo con esta discussion.
Funciona para mí ahora después de esta modificación.