
Para posibilitar el control del robot de manera inalámbrica, estamos desarrollando una aplicación para dispositivos Android.
Antes de pasar a explicar con detalle el software que hay detrás de la aplicación, nos gustaría presentar algunos conceptos básicos de programación Android para que posteriormente se pueda comprender mejor el funcionamiento de las clases de nuestra aplicación.
ACTIVIDADES
Activity es la clase principal de Android, encargada de mostrar la interfaz de usuario y permitir la interacción, pues responde a los eventos generados por los usuarios (al pulsar un botón, por ejemplo).
Cuando la actividad se inicia, se invoca el método onCreate(), al que se le pasa como parámetro un objeto de la clase Bundle (contiene el estado anterior de la actividad en caso de que haya sido suspendida). Dentro de él, se llama al método encargado de dibujar por pantalla: el Activity.setContentView(), al que se le pasa como parámetro un objeto View (del que hablaremos posteriormente).
Las aplicaciones normalmente tienen fijada una actividad como punto de entrada y, después, pueden tener una actividad distinta para cada pantalla que muestran. Según se van ejecutando, las actividades se van almacenando en una pila y se extraen de ella cuando las finalizamos con el método finish() o se pulsa la tecla de “atrás” en el dispositivo Android.
ANDROID MANIFEST
Todos los proyectos Android tienen un fichero AndroidManifest.xml, en el que se detallan las características principales que el sistema debe conocer antes de ejecutar la aplicación.
Algunas de las funciones que tiene este fichero son:
- Nombrar el paquete Java para la aplicación
- Describir los componentes de la aplicación, como las Actividades
- Declarar los permisos que otros han de tener para interactuar con la aplicación
- Listar librerías que utilizará la aplicación
VIEWS
Todos los componentes de una interfaz de usuario de Android descienden de la clase View: una estructura de datos cuyas propiedades contienen los datos de la capa y la información específica del área de la pantalla. Los objetos de esta clase se agrupan formando un árbol con el que se pueden definir interfaces muy complejas.
Como ya hemos visto, al inicializarse una Activity se llama al método Activity.setContentView(), que se encarga de recorrer el árbol partiendo del objeto View raíz, descendiendo por sus nodos para presentar toda la interfaz. Para dibujar cada elemento de una vista, se invoca al método draw(). Éste llama primero al método measure(), que define el tamaño de cada objeto View, y luego al método layout(), que posiciona el objeto dentro de la vista.
Para que Android sepa dibujar correctamente los objetos, tenemos que pasarle algunos datos de la clase LayoutParams, que puede tomar los siguientes valores:
- Un número
- La constante FILL_PARENT, que indica que la vista debe intentar ser tan grande como su padre, quitando el padding.
- La constante WRAP_CONTENT, para que intente ser lo suficientemente grande para mostrar su contenido, más el padding.
CONTEXT
Context es una interfaz para la información global de la aplicación. Gracias a este contexto, un objeto que acaba de ser creado puede saber qué ha pasado en la aplicación hasta ese momento. Además, nos permite acceder a recursos como el lanzamiento de actividades.
Se puede acceder al contexto de varias formas: en general, llamando a los métodos getContext() o getApplicationContext(); si estamos dentro de una Activity, como implementan esta interfaz, simplemente tenemos que hacer referencia a ella misma con (this) o NombreActivity.this.
LAYOUT
Un Layout nos permite posicionar cada objeto gráfico en un lugar de la pantalla determinado, obteniendo así el diseño de la estructura deseada para nuestra interfaz.
Los Layouts son de tipo ViewGroup, una subclase de View cuya función es contener y controlar una lista de Views.
Existen muchos tipos de Layouts para Android: Frame Layout, Linear Layout, Relative Layout, Table Layout, Tab Layout… Nosotros utilizaremos el Linear Layout, que va colocando a sus hijos unos detrás de otros, comenzando por la esquina superior izquierda de la pantalla.

LISTENER
Para conseguir la interacción del usuario y la aplicación, es necesario responder a los eventos causados por el usuario. Esta función la cumplen los Listeners, que son llamados cada vez que se produce un evento.
Algunos de los más comunes son:
- setOnClickListener(): responde cada vez que se pulsa sobre la vista a la que lo aplicamos.
- setOnKeyListener(): para eventos de teclado.
- setOnItemClickListener(): responde al seleccionar un elemento de una lista.
ADAPTER
Mediante el uso de Adapters definimos una forma común de acceder a colecciones de datos: es el responsable de crear la vista que será mostrada para cada elemento en la colección de datos.
Por ejemplo, si cada elemento de una lista estuviera formado a su vez por una imagen y varias etiquetas, el responsable de generar y establecer el contenido de todos estos "sub-elementos" a partir de los datos del propio adaptador.
Esperamos que, con estas nociones básicas, cualquier lector de nuestro blog pueda entender la estructura del software de nuestra aplicación Android. En la próxima entrada comenzaremos a hablar sobre ella.