Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo calibrar el sensor de orientación en android?

Estoy escribiendo una aplicación en Google Android 2.1 que necesita saber en qué dirección (n / w / s / e) se encuentra el dispositivo (HTC Hero). El sensor y su oyente están trabajando muy bien, pero los valores que obtengo del sensor son totalmente malos. Por ejemplo, me dice que estaría mirando hacia el norte cuando el dispositivo se enfrenta SW o menos …

Esto parece ser un problema conocido con dispositivos Android. Las "soluciones" que encontré en la web se parecen a las siguientes:

  • Sacudir el dispositivo
  • Mover el dispositivo como un ocho
  • Toque en los dispositivos de nuevo

Se cree que esto provoca la recalibración de los sensores. Y: la cosa con el "movimiento alrededor" funciona para mí … pero eso no es muy profesional, supongo …

Así que – ¿cómo activar la recalibración del sensor de orientación desde el SDK? Necesito que el sensor se calibre correctamente sin ningún tipo de cosas extrañas que haría que los usuarios de esta aplicación parezcan idiotas completos mientras están "manualmente" recalibrando sus teléfonos …

¿Hay alguna manera de hacer esto "correcto"?

EDITAR:

O: ¿hay alguna manera de determinar PROGRAMÁTICAMENTE, si el dispositivo está correctamente calibrado o no? Como alternativa, por así decirlo … podría advertir al usuario que el dispositivo necesita una recalibración "manual".

  • Autenticación con Active Directory a través de Kerberos
  • JRE en Android
  • Universal-Image-Loader: mapas de bits erróneos se adjuntan a ImageView
  • Android: Añadir dos vistas de texto mediante programación
  • Nuevo a android necesidad de entender "? Android: attr / actionBarSize"
  • La cookie de la webview de Android devuelve null
  • RxJava: Averigüe si BehaviorSubject fue un valor repetido o no
  • Implementar seguridad a nivel de firma en los servicios de Android con más de una firma permitida
  • 3 Solutions collect form web for “Cómo calibrar el sensor de orientación en android?”

    No creo que haya una manera de saber programatically si el sensor de la brújula se calibra correctamente a menos que usted utilice una fuente de datos secundaria como GPS. Si puede utilizar GPS, entonces cuando el usuario se mueve, puede comparar el movimiento del GPS con el rumbo de la brújula y corregirlo. Recuerde que los campos magnéticos locales pueden arruinar las lecturas de la brújula y los dispositivos no tiene idea si usted está en medio de un bosque o al lado de un transformador.

    Con estos dispositivos micro siempre hay un poco de sesgo que tendrá que tratar. Si comprueba los valores para el acelerómetro, también verá que en reposo no siempre vuelven 9,8 m / s ^ 2 (o al menos de manera consistente entre dispositivos).

    En su ayuda usted puede apenas necesitar decirle al usuario que gire / tuerza su teléfono en una figura ocho para reajustar la brújula.

    Supongo que se está refiriendo al Magnetómetro dentro del Héroe.

    La calibración es una tarea difícil y siempre debe requerir la interacción del usuario para una calibración realiable. Hay estrategias separadas para lidiar con eso. Usted podría pedir a los usuarios que mantenga allí el dispositivo en la dirección norte y luego volver a grabar. Si los usuarios no saben dónde está el norte, puede pedirles que dirijan el dispositivo hacia el sol y, según la ubicación y el tiempo, se puede calcular dónde está.

    Dejando a un lado la calibración, supongo que su problema es que las lecturas que recibe del sensor son inexactas. Por supuesto, callibration es un requisito previo para lecturas precisas, pero también hay otros factores en juego.

    Es una práctica común complementar los datos de los sensores de un sensor con los datos de un sensor diferente para aumentar la precisión. Puede utilizar el GPS para determinar un encabezado cuando el usuario se está moviendo. Si se mueve lentamente sin embargo, esto es inexacto también. Usted podría integrar los datos reportados por el Acelerómetro para adivinar los cambios de orientación (no la orientación absoluta). Pero honestamente un gyrometer sería más ideal en este caso.

    Los sistemas que funcionan de este modo a veces se llaman Sistemas de Navegación Inercial (INS) porque pueden, dada un punto fijo en el espacio, determinar su posición relativa y orientación con precisión sin más datos externos. El uso de un filtro de Kalman es una práctica común para recordar el sistema de vez en cuando cuando está disponible una posición absoluta (por ejemplo, recuperada vía GPS).

    Aunque no es realista implementar un INS completo, ciertamente puede dibujar algunas ideas de cómo trabajan para que sus lecturas de orientación sean más precisas.

    Estos son algunos manejadores de orientaciones que puedes usar

    Constantes int ORIENTATION_UNKNOWN Devuelto de onOrientationChanged cuando no se puede determinar la orientación del dispositivo (normalmente cuando el dispositivo está en una posición cercana a la horizontal). Constructores públicos OrientationEventListener (Contexto contextual) Crea un nuevo OrientationEventListener. OrientationEventListener (Context context, int rate) Crea un nuevo OrientationEventListener. Métodos públicos boolean canDetectOrientation () void disable () Deshabilita el OrientationEventListener. Void enable () Habilita el OrientationEventListener para que supervise el sensor y llame a onOrientationChanged (int) cuando cambie la orientación del dispositivo. Abstract void onOrientationChanged (int orientation) Se llama cuando la orientación del dispositivo ha cambiado. [Expand] Inherited Methods De la clase java.lang.Object Objeto clone () Crea y devuelve una copia de este objeto. Boolean equals (Object o) Compara esta instancia con el objeto especificado e indica si son iguales. Void finalize () Se llama antes de que la memoria del objeto sea recuperada por la VM. Final Clase getClass () Devuelve la instancia única de Class que representa la clase de este objeto. Int hashCode () Devuelve un código de hash entero para este objeto. Final void notify () Hace que un subproceso que está esperando en el monitor de este objeto (por medio de llamar a uno de los métodos wait ()) sea despertado. Void final notifyAll () Hace que todos los subprocesos que están esperando en el monitor de este objeto (por medio de llamar uno de los métodos wait ()) para que se despierten. String toString () Devuelve una cadena que contiene una descripción concisa y legible por humanos de este objeto. Hace que el subproceso de llamada espere hasta que otro subproceso llame al método notify () o notifyAll () de este objeto o hasta que expire el tiempo de espera especificado. Final void wait (long millis) Hace que el subproceso de llamada espere hasta que otro subproceso llame al método notify () o notifyAll () de este objeto o hasta que expire el tiempo de espera especificado. Final void wait () Hace que el subproceso de llamada espere hasta que otro subproceso llame al método notify () o notifyAll () de este objeto. Constantes public static final int ORIENTATION_UNKNOWN Desde: API Nivel 3

    Devuelto de onOrientationChanged cuando no se puede determinar la orientación del dispositivo (normalmente cuando el dispositivo está en una posición cercana a la horizontal). Ver también

    * onOrientationChanged(int) 

    Valor Constante: -1 (0xffffffff) Constructores Públicos public OrientationEventListener (Context context) Since: API Level 3

    Crea un nuevo OrientationEventListener. Parameters context para el objeto OrientationEventListener. Public OrientationEventListener (Context context, int rate) Desde: API Nivel 3

    Crea un nuevo OrientationEventListener. Parameters context para el objeto OrientationEventListener. Velocidad en la que se procesan los eventos del sensor (véase también SensorManager). Utilice el valor por defecto de SENSOR_DELAY_NORMAL para una detección simple del cambio de orientación de la pantalla. Métodos públicos public boolean canDetectOrientation () Desde: API Nivel 3

    Public void disable () Desde: API Nivel 3

    Desactiva el OrientationEventListener. Public void enable () Desde: API Nivel 3

    Habilita el OrientationEventListener para que supervise el sensor y llame a onOrientationChanged (int) cuando cambia la orientación del dispositivo. Public abstract void onOrientationChanged (int orientation) Desde: API Nivel 3

    Se llama cuando la orientación del dispositivo ha cambiado. El parámetro de orientación está en grados, que van de 0 a 359. la orientación es 0 grados cuando el dispositivo está orientado en su posición natural, 90 grados cuando su lado izquierdo está en la parte superior, 180 grados cuando está al revés y 270 grados cuando su orientación El lado derecho está en la parte superior. ORIENTATION_UNKNOWN se devuelve cuando el dispositivo está cerca de plano y no se puede determinar la orientación.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.