miércoles, 10 de febrero de 2016

Trabajando con los Sensores en Android. Parte IV.

En esta cuarta parte, vamos a explicar cómo desarrollar una app para android que utilice el acelerómetro. Para ello, es recomendable leer este tutorial a la par que visualizáis el código en GitHub.

Esta aplicación consiste en detectar un movimiento específico que detecten los sensores del dispositivo para el cual reproduciremos un sonido u otro. En concreto, los dos movimientos implementados son el gesto de dar un latigazo y el de agitar el dispositivo.

Para el funcionamiento de la aplicación hemos hecho uso del paquete SoundPool el cual nos permite reproducir archivos de sonido cortos de menos de 1 MB. Haremos uso de 3 variables para controlar el tiempo, las cuales comentaremos más adelante y de 2 variables para medir la gravedad en dos de los tres ejes espaciales.

Empezamos implementando la interfaz SensorEventListener en nuestra clase MainActivity que será la encargada de controlar los eventos del movimiento del dispositivo.

En el método onCreate inicializamos todos los objetos relacionados con el xml del layout y las variables para la reproducción de sonidos. Para cargar los sonidos, creamos una carpeta de tipo raw en nuestro proyecto y guardamos los sonidos ahí. De esta forma, podemos cargar los audios llamando al método load de la clase SoundPool con R.raw.nombre_sonido.

En el método onSensorChanged nos aseguramos de que todo esté sincronizado y obtenemos los valores x e y del acelerómetro (el valor z no lo hemos utilizado) y comprobamos el tipo de movimiento que se está realizando. Si el acelerómetro llega a -8 en la x y no se solapa con el tiempo del movimiento de agitar, activamos la variable primero y empezamos a contar el tiempo ya que este movimiento tiene dos fases. Si el dispositivo lo hemos llevado hasta una x mayor que 1 tras la primera fase y el tiempo es menor de 0.5 segundos (para que sea realista el movimiento debe hacerse rápido) entonces reproducimos el sonido del látigo donde la intensidad del sonido es inversamente proporcional al tiempo que tardamos en completar los dos pasos. Si el acelerómetro llega a valores superiores a 30 o inferiores a 30 y no estamos en proceso del movimiento del latigazo, entonces detectamos que se trata del movimiento de agitar el dispositivo por lo que reproducimos su sonido.



Los sonidos utilizados son totalmente libres y están extraídos de la página:

https://www.freesound.org/
 

Para el desarrollo de la aplicación hemos utilizado la siguiente referencia:

https://developer.android.com/intl/es/guide/topics/sensors/sensors_motion.html


Sigue leyendo en la siguiente entrada sobre el sensor de proximidad.


No hay comentarios:

Publicar un comentario