Esto es una ayuda teórico-práctica para familiarizarnos con Android y empezar programando cosas sencillas, para luego ser capaces de llevar a cabo una aplicación más compleja.
Se aconseja leer el contenido de esta ayuda, profundizar en aquellos temas en los que queden dudas siguiendo los enlaces proporcionados, y hacer uso de los ejercicios prácticos y de los ejemplos que provee el SDK.
Contenidos:
El IDE más apropiado para trabajar con Android es Eclipse. Puedes instalar las ADT (Android Development Tools) sobre Eclipse para Java y configurar tu emulador siguiendo las instrucciones de la guía para desarrolladores de Android.
Para crear un nuevo proyecto, en el menú de Eclipse seleccionamos File > New > Project... y en el diálogo que se nos abrirá, Android > Android Project. Entonces debemos introducir:
Al pulsar Finish, en el panel que hay en el lado izquierdo llamado Package, veremos que se ha creado nuestro proyecto HolaAndroid.
En el proyecto vamos a encontrar los siguientes contenidos:
Para ejecutar el proyecto en el emulador, si ya hay un dispositivo configurado para la plataforma correspondiente, se puede seleccionar Run [As] > Android Application en el menú de Eclipse o en el que aparece al pinchar con el botón derecho sobre el proyecto. Igualmente, se puede depurar seleccionando Debug en vez de Run. Si lo ejecutamos, deberíamos ver, al cabo de algún tiempo, esta pantalla en el emulador:
Como vemos, se trata de una barra de título donde aparece el nombre de la aplicación y la pantalla definida en main.xml
Se pueden consultar gran cantidad de ejemplos y tutoriales en la pestaña Resources de la página de Android Developers (todo en inglés).
Los ejemplos listados en ella se pueden encontrar también en la instalación del SDK de la máquina virtual, en la carpeta C:\android-sdk-windows\platforms\android-1.5\samples
La API completa (muy documentada) está disponible en la pestaña Reference de Android Developers.
La forma de crear interfaces en Android es parecida a Java Swing: se dispone de un objeto View raíz, que puede contener una o más View o ViewGroup anidados. Podremos crear, por ejemplo, una plantilla de tipo lineal que contenga en la primera fila un texto, en la segunda fila un campo de edición de texto, y en la tercera un botón para aceptar los datos introducidos.
Esta tarea se puede hacer de tres formas: definiendo toda la estructura en un documento XML (como res/layout/main.xml), mediante código Java, o las dos anteriores conjugadas. Puedes encontrar información general sobre este tema en esta guía sobre la interfaz de usuario, y más detallada sobre cómo crear la plantilla en XML en esta otra guía para declarar plantillas. Si quieres saber cómo acceder a objetos de la interfaz a través del código, consulta los métodos de las clases View y ViewGroup.
Lo más sencillo y visual es definir la interfaz en XML. El código que representaría el ejemplo del principio de este apartado sería el siguiente:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:layout_marginLeft="6dip"
android:textColor="#ffffff"
android:layout_gravity="center_vertical"
android:text="@string/app_name"/>
<EditText android:id="@+id/textBox"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background" />
<Button android:id="@+id/buttonOK"
android:text="OK"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
</LinearLayout>
Crea un nuevo fichero llamado ejemplo.xml en el proyecto HolaAndroid en la carpeta res/layout y copia en él el ejemplo anterior. Ahora, en la Activity HolaAndroid.java, cambia main por ejemplo en la llamada setContentView(R.layout.main). Ejecútalo y observa qué ocurre.
Cambia esta plantilla o algunas de las que hay en C:\android-sdk-windows\platforms\android-1.5\samples\ApiDemos\res\layout para probar las distintas interfaces que puedes generar.
Asocia al botón llamado buttonOK un manejador de eventos de tipo Click. Aquí tienes un ejemplo:
Button button = (Button)findViewById(R.id.buttonOK);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v){
Toast.makeText(this, "Esto es "+R.string.app_name, Toast.LENGTH_SHORT).show();
}
});
¿Qué ocurre cuando pulsas el botón? ¿Cómo podrías acceder al texto introducido en el campo textBox para mostrarlo en el mensaje?
Al crear un proyecto vimos que necesitábamos tener una Activity y que ésta era la pantalla de entrada de la aplicación. Vamos a aprender algo más sobre ellas y qué otras cosas hay en una aplicación Android.
En realidad, lo que el usuario percibe como una aplicación, se llama "tarea" (task), y es una pila de Activities que se mueven juntas. Como es una pila, al seleccionar la tarea en el menú sólo se ve la que está en lo alto de la pila. Probablemente, interaccionando con la Activity que está visible sea necesario mover otra que está más abajo a lo alto, y entonces será la nueva Activity la que sea visible. El tema de la visibilidad es importante, porque el ciclo de vida de una Activity depende mucho de él. En una misma tarea pueden convivir Activities definidas en aplicaciones diferentes.
Hay cuatro tipos de componentes diferentes en las aplicaciones:
Cuando un componente precisa llamar a otro, lo que hace es lanzar un Intent. Un Intent es un objeto que contiene información sobre el tipo de acción que se necesita y sobre qué datos para que el sistema operativo encuentre el componente más apropiado para llevarla a cabo; o bien especifica un componente concreto ya definido para evitar que sea el sistema operativo el que elija.
Cuando se lanza un Intent, el sistema operativo elige un componente en función de los filtros de Intents que hay definidos para todos los componentes de los que tiene conocimiento. Estos filtros se especifican dentro de la información de cada componente que hay definido en el fichero AndroidManifest.xml
Puedes aprender más sobre cada componente pinchando sobre su nombre, sobre los Intents y los filtros en este artículo y sobre el fichero AndroidManifest.xml en esta ayuda.
Vuelve a la aplicación Hola Android y examina el código fuente de su fichero AndroidManifest.xml, identificando:
En el método onCreate() de HolaAndroid.java, añade el código necesario para lanzar un Intent que abra el navegador por defecto en la página www.google.es (te puede venir bien la información de esta página).
Crea una nueva actividad en la aplicación. Para esto, pincha con el botón derecho sobre el paquete am.ejemplo y selecciona New > Class... Hay que darle un nombre, por ejemplo ActividadSecundaria. También hay que hacer que herede de android.app.Activity en lugar de java.lang.Object, que es lo que viene por defecto. Al pulsar Finish, se crea el esqueleto de la Activity.
Añade la Activity en AndroidManifest.xml: para esto, abre el fichero y selecciona la pestaña Application. Abajo, en el cuadro Application Nodes, pincha Add... y selecciona Activity en el cuadro emergente. Verás que a la derecha han aparecido una serie de campos para insertar la información sobre la nueva Activity. El único campo obligatorio es Name, escribe en él el nombre de la Activity: .ActividadSecundaria, pinchando en otro sitio verás que se actualizan los datos. Guarda y abre el código fuente de este fichero para ver el código nuevo.
Implementa el método onCreate() de la superclase de forma similar al de HolaAndroid y asígnale una plantilla (layout) diferente, para poder ver que efectivamente cambias de pantalla.
Ahora, lanza un Intent desde HolaAndroid que haga pasar específicamente a ActividadSecundaria.
Ejecuta la aplicación para comprobar que lo has hecho todo bien.
Hay dos formas diferentes de usar un Service: comenzarlo con un Intent o usando llamadas tipo RPC. Observa las diferencias entre las dos alternativas y cómo implementarlas con la información contenida en la documentación de Service y con las clases de ejemplo: C:\android-sdk-windows\platforms\android-1.5\samples\ApiDemos\src\com\example\android\apis\app\LocalService.java, LocalServiceController.java y LocalServiceBinding.java