Hola,
Llevo tiempo trabajando en una aplicación para Android que usa servicios de Localización y Orientación entre otros.
Con la localización no he tenido ningún problema, sin embargo la orientación ha sido un verdadero quebradero de cabeza.
Según la API de Android, existen 2 métodos para obtener la orientación (azimut).
El primero de ellos, actualmente obsoleto (deprecated), consiste en leer los datos del sensor de orientación. La razón de que esté obsoleto se debe a que si giramos el dispositivo y no tenemos lockeado el giro, el layout se girará y entonces la orientación que le estamos dando no será la adecuada. Está explicado aquí: http://android-developers.blogspot.com.es/2010/09/one-screen-turn-deserves-another.html
El segundo de ellos, la solución por parte de los ingenieros de Android, es utilizar conjúntamente los sensores de Acelerómetro y Campo magnético.
El problema surge en que cuando utilizo el segundo método, el dispositivo capta muchísimas interferencias constantes. Ya le he aplicado filtros (LowPassFilter y Kalman), pero al ser las interferencias tan grandes (más de 90º), y además ser tan constantes no me sirven.
Sin embargo, si utilizo el primer método las lecturas son muy precisas y no capto ni una sola interferencia. La pantalla que utilizará la orientación tiene el giro bloqueado, por lo que no es problema el utilizar esa opción, pero cuando tenga enseñar el código, tener un método deprecated me puede causar algún problema.
Con esto quiero preguntar si a alguien le ha pasado, o en cualquier caso si sabe alguna solución al problema.