En esta primera parte, vamos a explicar cómo desarrollar una app para android que utilice el magnetómetro y el reconocimiento de voz. Para ello, es recomendable leer este tutorial a la par que visualizáis el código en GitHub.
Esta aplicación consiste en utilizar nuestra voz para comunicar a nuestro dispositivo una dirección y un error medido en grados, la cual se encarga de reconocer e interpretar, indicándonos con una brújula y una flecha si la dirección a la que nos dirigimos es la correcta (dentro de error establecido).
Para ello, declaramos dentro de MainActivity una serie de variables que guarden la dirección establecida por el usuario (desde 0 hasta 3, representando las 4 direcciones en sentido horario respectivamente) y el error (un número que nos indica cuántos grados de desviación con respecto a esa dirección permitimos para seguir diciendo que es correcta), así como el resto de variables necesarias para el reconocimiento de la voz y los cálculos con los ángulos y orientación del dispositivo.
En el método onCreate declaramos la imagen de la brújula (que girará en función de la orientación del móvil) y una imagen flecha cuya posición será estática, pero cambiará de color para indicarnos si la dirección es la correcta. De la misma forma, inicializamos los sensores que vamos a utilizar. Finalmente, llamamos a la función setSpeakButton que se encargará de crear un botón para comenzar el reconocimiento de la voz del usuario.
El método setSpeakButton ha sido añadido a partir del código proporcionado por el seminario de reconocimiento de voz impartido por Zoraida Callejas, de tal forma que al presionar el botón se reconoce el habla de la persona y se devuelve un array de Strings conteniendo posibles traducciones de la voz reconocida. Tanto esta función como todo aquel código relacionado con el reconocimiento de voz ha sido obtenido del mismo seminario.
Implementamos una función leerParametrosParaBrujula en la cual recorremos el array de respuestas obtenidas por el reconocimiento de voz en busca de un String que podamos interpretar como una dirección y un número (ej. norte 10). Con ello, dividimos el String en 2 y guardamos qué dirección y número se han reconocido.
En el método setRecognitionParams establecemos el número máximo de resultados a obtener por el reconocimiento de voz (10) así como el modelo de lenguaje.
Utilizamos el método onActivityResult para llamar al método leerParametrosParaBrujula y obtener los datos del reconocimiento de voz, con los que finalmente realizaremos las operaciones necesarias en el método onSensorChanged.
En esta función onSensorChanged nos encargamos de girar la imagen de la brújula en función de los datos obtenidos por los sensores (magnetómetro y acelerómetro). Por otro lado, comprobamos que si la dirección en la que apunta el móvil está en el intervalo definido por la dirección reconocida más y menos el error reconocido (en grados), dicha flecha cambiará a color verde. De no ser así, la flecha permanecerá roja.
Finalmente en el AndroidManifest ponemos la siguiente línea para que la aplicación sólo esté en vertical:
android:screenOrientation="portrait"
Para la realización de esta aplicación hemos seguido y utilizado código del seminario mencionado anteriormente, así como de la página:
http://agamboadev.esy.es/como-crear-un-brujula-en-android/
Sigue leyendo en la siguiente entrada sobre la API de Google Maps.
No hay comentarios:
Publicar un comentario