Detección+de+patrones+en+Android+-+Gesture+Builder


 * Contenido**


 * 1. Gestos Personalizados.**
 * 1.1. Introducción. **


 * 2. Aplicaciones. **
 * 2.1. Gesture Search. **
 * 2.2. Gesture Launcher. **
 * 2.3. Move’n Launch Lite. **
 * 2.4. Sign. **
 * 2.5. Gesture Builder. **


 * 3. Configuración de gestos con Gesture Builder. **
 * 3.1. Primer paso. Creación del proyecto en Adt-Bundle. **
 * 3.2. Segundo paso. Creación e incorporación de gestos al proyecto. **
 * 3.3. Tercer paso. Inclusión de librerías en el proyecto. **
 * 3.4. Cuarto paso. Definición de constructores y métodos en la aplicación. **
 * 3.5. Quinto paso. Prueba de la aplicación. **


 * 4. Bibliografía.**

**1.1 Introducción.**
Es cierto que la pantalla táctil de que disponen la mayoría de los teléfonos hoy día es uno de los mecanismos más cómodos para interactuar con un teléfono Android. Sin embargo, el hecho de tener una pantalla de reducido tamaño, como ocurre en muchos casos, provoca que el diseño de la interfaz de usuario sea complejo.

Por ejemplo, tratar de introducir las decenas de botones y menús que incorporan la mayoría de aplicaciones de sobremesa sería imposible en una pantalla de 3 pulgadas.

Para tratar de dar nuevas alternativas en el diseño de interfaz de usuario, a partir del SDK 1.6, se incorporan las gestures. Esta API puede localizarse en el paquete “android.gesture”, tiene distintas funcionalidades, entre ellas nos encontramos:


 * Dibujar gestos nuevos: tiene la funcionalidad de poder crear nuevos gestos, abiertos a la imaginación del usuario.
 * Almacenar gestos: Una vez creado un gesto se puede almacenar en memoria, para posteriormente poder utilizarlo según se desee. Como por ejemplo para crear aplicaciones nuevas.
 * Cargar gestos: Tenemos la posibilidad de cargar gestos que hemos creado en otro terminal. Gestos que ha creado otro usuario –un amigo, compañero de trabajo...
 * Reconocer gestos: Una vez que hemos cargado/creado un gesto nos permite reconocer nuestros gestos. De modo que si el gesto que estamos realizando es similar a alguno almacenado lo reconoce y nos lo notifica.

El SDK de Andoid suministra una aplicación llamada Gesture Builder con la que se pueden realizar los diseños con facilidad. Para crear un archivo gestures hemos de hacerlo mediante un dispositivo físico o un emulador para acoplarlo luego a la aplicación y que sea detectado.

Una vez que los gestos se han diseñado, el archivo que contiene los datos de los gestos se puede sacar de la tarjeta de memoria SD del dispositivo o emulador y se agrega al proyecto de la aplicación. Dentro del código de la aplicación, el archivo se carga como una instancia de la librería GestureLibrary donde puede ser usado para buscar coincidencias con gestos realizados por el usuario.

**2 Aplicaciones.**
A continuación presentamos una serie de aplicaciones que permiten trabajar y configurar nuestros gestos personalizados.

**2.1 Gesture Search** Esta es una aplicación desarrollada por Google que nos permite, entre otros, buscar en nuestros contactos con un simple gesto. Su uso es bastante sencillo e intuitivo, basta con lanzar la aplicación y dibujar la letra por la que queremos buscar a nuestro contacto, por ejemplo, dibujando en la pantalla una P, nos mostrará por pantalla todos aquellos contactos que empiecen por dicha letra. Podemos descargar esta aplicación desde Play Store y es completamente gratuita.

El inconveniente de esta aplicación es que no nos permite configurar nuestros gestos personalizados.

El siguiente enlace muestra un ejemplo de uso de esta aplicación: []

**2.2 Gesture Launcher** Ésta aplicación es más interesante que la anterior, además de añadir las funcionalidades mencionadas en la aplicación anterior, añade la funcionalidad de personalizar nuestros gestos. Por ejemplo, si quiero que mi cámara se active cuando dibuje un circulo, ésta aplicación permite configurar y asignar ese gesto a una determinada aplicación.

Podemos descargar esta aplicación desde Play Store, inicialmente era de pago, teniendo un precio de 0.7€, ahora esta aplicación es gratuita.

A continuación, un video en el que se muestra su funcionamiento: []

**2.3 Move’n Launch Lite** Esta aplicación gratuita nos permite configurar nuestros gestos, es más, no interaccionamos directamente con la pantalla (no tenemos que dibujar ningún patrón para activar alguna orden en nuestro teléfono). La utilidad que ofrece este programa es la de activar distintas componentes de nuestro dispositivo con el movimiento. Un ejemplo sería el de activar la cámara, con ésta aplicación bastaría con mantener pulsada la pantalla y girar el móvil. En el siguiente vídeo hay una demostración de su uso: []

**2.4Sign** Aplicación desarrollada por Google, que se incorporó a partir de la versión 1.6 de Android. E sta aplicación nos permite interactuar directamente con nuestra pantalla táctil con nuestros gestos personalizados. Cabe añadir que ésta aplicación no tuvo tanto éxito como el que se esperaba, aunque es una aplicación bastante útil. Con Sign, entre otras, podemos agregar gestos personalizados para llamar o mandar mensajes a nuestros contactos.

En el siguiente vídeo se muestra su utilidad: [|https://www.youtube.com/watch?v=2QsyXtqVAEw#action=share]

** 2.5 Gesture Builder ** Aplicación gratuita que permite la configuración de nuestros gestos personalizados para activar determinadas aplicaciones de nuestro Smartphone. En el desarrollo de ésta práctica utilizaremos la aplicación Gesture Tool, ésta aplicación deriva de Gesture Builder, intentaremos estudiar como relacionar un determinado gesto con alguna aplicación. Por ejemplo, al escribir una C, redirigirnos a contactos, al escribir una M, a mensajes, etc.

**3 Configuración de gestos con Gesture Builder.**
Hasta ahora hemos introducido el concepto de gestos en Android y las aplicaciones que han nacido de este concepto pero ¿cómo podemos manejarlos y usarlos en nuestros programas?

En esta sección responderemos a la cuestión anterior explicando cómo puede trabajarse con Gestures en Android usando Eclipse, las librerías necesarias para poder unirlo al código, las funcionalidades que ofrecen y cómo relacionarlo con otras aplicaciones.


 * Primer paso: Creación del proyecto en Adt-Bundle.**

Como en todo proyecto, el primer paso es crearlo. Para ello abrimos el entorno de programación Adt-bundle, pulsamos sobre file (en la parte superior de la pantalla) y seleccionamos “Android Application Proyect” e introducimos los datos con los que queramos identificarlo. Application Name: Gestos_Aplication  Package Name: gestos.example.gestures  Minimun Requiered SDK: API 7: Android 2.1 (Eclair)  Create Activity: Gestos  Layout Name: main


 * Segundo paso. Creación e incorporación de gestos al proyecto.**

Si vamos a trabajar con gestos tendremos que crearlos y añadirlos al proyecto para trabajar con ellos. Por ello, el siguiente paso para el desarrollo de nuestra aplicación será descargar e instalar un programa que proporcione herramientas para manejar con gestos y trabajar con ellos como Gesture Tool.


 * Podemos descargar Gesture Tool desde el market de Android.
 * La aplicación es muy ligera, ocupa unos 60kb de la memoria de nuestro dispositivo.

Una vez instalada la aplicación, es el momento de utilizarla para crear gestos. Para crear un gesto sólo tenemos que iniciar la aplicación y pulsar sobre la opción “Add gesture”. Se abre una nueva pestaña de la aplicación donde daremos nombre y forma a nuestro nuevo gesto.


 * Para definir el gesto basta con arrastrar el dedo sobre la pantalla y definir la forma. Si no estamos satisfechos con su aspecto podemos volver a pasar el dedo para darle otra forma.

Si ya tenemos definidos uno o varios gestos podemos probar que la aplicación los reconoce pulsando sobre la opción “Test”. En esta opción aparece una pantalla en la que podemos dibujar un gesto y, si su forma se corresponde con la de otro definido anteriormente, nos aparecerá su nombre.

Las siguientes imágenes muestran el proceso de creación de gestos y prueba de los mismos en Gesture Tool.



Ilustración 1: Creación.



Ilustración 2: Lista de gestos.



Ilustración 3: Test de gestos.

Una vez llegados a este punto ya podemos añadir la lista de gestos creada a nuestro proyecto. Gesture Tool guarda los gestos creados en un archivo llamado “gestures” que se encuentra en la raíz de la tarjeta de memoria de nuestro Smartphone (más precisamente en sdcard/gestures). Tendremos que copiar el archivo en nuestro PC para incluirlo al proyecto.

Vamos a unir el fichero de gestos al proyecto. Abrimos los directorios de nuestro proyecto en el entorno de desarrollo y creamos una nueva carpeta en res llamada raw (o el nombre que prefiramos) en la que copiaremos el fichero “gestures” que copiamos en nuestro PC anteriormente.


 * Tercer paso. Inclusión de librerías en el proyecto.**

Como en todo proyecto, para poder usar las funciones asociadas a una clase debemos añadir sus librerías. Para usar los métodos de Gesture tenemos que añadir al proyecto las siguientes librerías:


 * android.gesture.Gesture;
 * android.gesture.GestureLibraries;
 * android.gesture.GestureLibrary;
 * android.gesture.GestureOverlayView;
 * android.gesture.GestureOverlayView.OnGesturePerformedListener;
 * android.gesture.Prediction;

Precedidas, cada una de ellas, por import.

Cada una de estas librerías cumple una función dentro del manejo de gestos en Android por lo que es interesante conocerlas un poco mejor.

La librería Gesture incluye las librerías relacionadas con gestos en Android, por lo que incluye a las demás.

La librería GestureLibraries incluye el manejo de gestos (que están definidos como objetos en Java). También incluyen operaciones de lectura/escritura de gestos.

GestureLibrary contiene métodos de manejo de gestos como son
 * Cargar.
 * Crear.
 * Determinar el gesto introducido.
 * Obtener la secuencia de un gesto.
 * Obtener la orientación de un gesto.

Entre otras muchas.

La librería GestureOverlayViem se encarga de las interfaces para la definición de gestos por pantalla. Dentro de ella se encuentran interfaces como OnGesturePermormedListener, que utilizaremos en nuestro ejemplo de aplicación.

La librería Prediction, finalmente, se encarga de los métodos probabilísticos que se encargan de las operaciones de detección de gestos, patrones y orientaciones.


 * Para consultar toda la información sobre las librerías asociadas a gestos en Android consultar el siguiente enlace: []


 * Cuarto paso. Definición de constructores y métodos en la aplicación.**

Vamos a comenzar a crear nuestro ejemplo de aplicación. Abrimos el archivo de código .java de la aplicación y escribimos los siguientes métodos:

/*Nombre del paquete.*/ package gestos.example.interprete_gestual;

/*Librerías.*/ import java.util.ArrayList; import android.app.Activity; import android.gesture.Gesture; import android.gesture.GestureLibraries; import android.gesture.GestureLibrary; import android.gesture.GestureOverlayView; import android.gesture.GestureOverlayView.OnGesturePerformedListener; import android.gesture.Prediction; import android.os.Bundle; import android.view.View; import android.widget.Toast;

/*Clase principal.*/ public class Gestos extends Activity implements OnGesturePerformedListener { private GestureLibrary gestureLib;

/**Detección de gestos (solo se abre al principio de la aplicación). */**
 * @Override **
 * public void onCreate(Bundle savedInstanceState) { **
 * super.onCreate(savedInstanceState); **
 * GestureOverlayView gestureOverlayView = new GestureOverlayView(this); **
 * View inflate = getLayoutInflater.inflate(R.layout.activity_gestos, null); **
 * gestureOverlayView.addView(inflate); **
 * gestureOverlayView.addOnGesturePerformedListener(this); **
 * gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures); **


 * if (!gestureLib.load) { **
 * finish; **
 * } **
 * setContentView(gestureOverlayView); **
 * } **


 * /* Métodos para tratamiento de gestos. */**
 * @Override **
 * public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture){ **
 * ArrayList predictions = gestureLib.recognize(gesture); **
 * for (Prediction prediction : predictions) { **
 * if (prediction.score > 1.0) { **
 * Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show; **
 * } **
 * } **
 * } **
 * } **


 * Ahora modificamos el main escribiendo:**


 *  **
 *  **
 * android:layout_weight="1.0" /> **


 *  **


 *  **


 * </LinearLayout> **

Quinto paso. Prueba de la aplicación.**

Después de explicar el procedimiento para crear nuestra primera aplicación con gestos en Andriod sólo nos queda probar que funciona. Para poder probarla podemos ejecutar directamente el código con la opción buid de Eclipse pero creemos conveniente definir uno o varios dispositivos virtuales para poder testarla en diferentes versiones de Android, con rendimientos diferentes. Eclipse viene con un asistente para la creación de máquinas virtuales llamado Android Virtual Device Manager situada en la pestaña “window” del entorno de trabajo. Ahí podemos crear un dispositivo con las características que necesitemos.

En principio, el asistente sólo admite dispositivos con la versión 4.0 (instalada por defecto). En Andorid SDK Manager pueden instalarse todas las versiones disponibles de Android.



Captura 1: Virtualización de dispositivo Android.



Captura 2: Prueba de un gesto en la aplicación.



Captura 3: Reconocimiento del patrón introduccido.

4 Bibliografía.
[1] []

[2] []

[3] []

[4] []

[5] []

[6] []

[7] []

[8] []

[9] []

[10] []