Programacin en Android, el Linux que estar en todos los mviles,
2 Linux+ 3/2008 para programadores Programacin en Android, el Linux que estar en todos los mviles, 3 www.lpmagazine.org l i n u x @ s o f t w a r e . c o m . p l E l cada vez ms bamboleante sector de los mviles est viviendo a da de hoy el mayor cambio de su historia en cuanto a software se refere. Atrs quedaron los sistemas propios de cada empresa que apenas dejaban al usuario ejecutar una mquina virtual de la versin Micro Edition de Java. Las posibilidades del hardware mvil son hoy tan gran- des, que es ms que posible llevar a cabo casi todas las actividades que anteriormente slo estaban permitidas para sistemas de escritorio o porttiles. Por ejemplo la reproduccin de vdeo codifcado con codec de cierta complejidad, la visualizacin de presentaciones o simplemente la posibilidad de navegar por Internet son hoy en da funcionalidades que se deben exigir a los mviles de gama alta. Con el paso del tiempo todas estas funcionalidades irn pasando cada vez a gamas ms bajas y posiblemente los mviles sustituirn a los equipos actuales de sobre- mesa y porttiles para la realizacin de muchas tareas. Esta revolucin que se nos avecina est empezndose a librar a da de hoy ya en el terreno de los sistemas operati- vos. La primera fgura en caer de esta batalla ha sido Palm OS. El sistema operativo para PDA y smartphones (los m- viles que combinan funciones con PDA) desapareci como tal en febrero de 2006 dando paso a un sucesor llamado ACCESS Linux Platform del que no se sabe demasiado. En esta dura batalla de los sistemas operativos para dispositivos mviles los grandes contrincantes son todos de cdigo cerrado y sus nombres son Microsoft Windows Mobile, Blackberry OS y Symbian OS. Aparte est el sistema operativo libre para PDA y mviles OpenMoko, y el sistema que trae iPhone que est comenzando a llegar al mercado. Sin duda, se espera una autntica guerra entre todos estos dispositivos y el protagonista de este artculo, Android. Qu es Android? Android es una plataforma libre para telfonos mviles, basada en GNU/Linux y con licencia GPL que va a meter de lleno al software libre en esta batalla. Creado por la Open Handset Alliance, alianza tecnol- gica encabezada por Google, acompaada de compaas del nivel de T-Mobile, HTC, Motorola, Telefnica, Samsung, Intel o Nvidia; tiene el respaldo sufciente para tener un Programacin en Android El anuncio por parte de Google y las compaas lderes mundiales del sector de las telecomunicaciones mundiales sobre la creacin de Android, el sistema operativo para mviles basado en el ncleo de Linux, ha supuesto el mayor empujn que ha recibido el software libre quizs en toda su historia. Y es que en un sector en el que todava no hay un monopolio de facto como en el de los ordenadores de escritorio, en el que tambin se est progresando, la colaboracin de Google y los gigantes de las telecomunicaciones van a suponer para Android poder competir en unas condiciones inmejorables contra sus rivales de cdigo cerrado. Francisco Javier Carazo Gil para programadores Programacin en Android, el Linux que estar en todos los mviles, 2 Linux+ 3/2008 para programadores Programacin en Android, el Linux que estar en todos los mviles, 3 www.lpmagazine.org xito seguro y para convertir al software libre en el producto dominante en esta porcin del mercado de la tecnologa. El potencial de Android no est slo ava- lado por las empresas que lo respaldan sino por sus propias caractersticas tcnicas. Caractersticas de Android La caracterstica que me parece ms im- portante es que se trata de una plataforma totalmente abierta tanto para fabricantes de dispositivos mviles como para desarrolla- dores de aplicaciones. Vayamos explicando uno a uno los puntos ms importantes de la plataforma. Ncleo Es Linux, concretamente la versin 2.4.16 del kernel de Linux, por ahora. A este nivel estn implementados todos los controladores primarios (cmara, USB, teclado...), aunque tambin pueden aadirse ms drivers por par- te del fabricante del dispositivo (por ejemplo el controlador de la pantalla tctil). Sobre el ncleo estn escritas las libreras que se encargan de las funcionalidades bsi- cas. Estas libreras estn escritas en C/C++ y pueden ser accedidas directamente desde los programas de la plataforma. Algunas de ellas y sus funcionalidades son: Libreras en C del sistema: Implemen- taciones de las libreras estndar de C, preparadas para un mejor funciona- miento en dispositivos embebidos que usan Linux. Libreras multimedia: Proporcionan so- porte para grabacin y reproduccin de audio y vdeo, as como de imgenes. Gestor de superfcies: Maneja el acceso al dispositivo de pantalla. Librera del ncleo web: Moderno mo- tor de navegacin web que posibilita usar el navegador de Android as como vistas incrustadas de los sitios web. SGL: El motor grfco 2D. Libreras para 3D: Implementacin ba- sada en las API de OpenGL ES 1.0. FreeType: Renderizacin de mapas de bit y grfcos vectoriales. SQLite: Proporciona soporte para base de datos relacionales. Mquina virtual Dalvik Es la encargada de ejecutar los programas. Maneja dos tipos de archivos: .APK: Comprimido con ejecutables y datos del programa. Figura 1. Arquitectura del sistema Figura 2. Interfaz grfca de usuario de OpenMoko 4 para programadores Programacin en Android, el Linux que estar en todos los mviles, Linux+ 3/2008 5 para programadores Programacin en Android, el Linux que estar en todos los mviles, www.lpmagazine.org .DEX: De Dalvik ejecutable, es un ar- chivo similar a .class de Java pero post procesado para conseguir un mejor ren- dimiento en la mquina Dalvik. La mquina virtual tiene acceso a: Core Libraries: Libreras con las clases estndar de Java. Application Framework: Mdulos es- critos en Java que permiten interactuar con la agenda de contactos, la mensaje- ra, llamadas... Aplicaciones Todas estn escritas en Java pero tienen ac- ceso directo a bajo nivel a travs de la API. Estn armadas en base a cuatro bloques de construccin: Activity: Parte visual de la aplicacin. Intent Reciver: Un intento, traduccin al espaol de intent, sera algo as como un evento genrico que sera indepen- diente de los programas, por lo que en caso de pedirse Android buscara la aplicacin adecuada para servir dicho intento. Por ejemplo podra ser algo as como enviar sms. Service: El concepto de demonio en Linux aplicado a Android. Content provider: Proporciona a la aplica- cin capacidad de interactuar de manera sencilla con la parte interna de Android. Seguridad La seguridad es uno de los aspectos ms cuidados de Android. Est dividido en nive- les. Primero est el bajo nivel, manejado por las facilidades estndar de Linux teniendo en cuenta permisos de acceso para archivos, usuarios, servicios, etc. El nivel alto, est ma- nejado en Java, que se encarga de la integridad del cdigo, del sistema de acceso, y de aislar una aplicacin de otra. Adems en niveles intermedios Android hace uso de la Memoria Protegida, gestin de procesos, as como un sistema de permisos explcitos de cara a los servicios a los que un programa desea acceder en un momento dado. Otros aspectos de importancia Aparte de lo ya comentado es interesante re- saltar que Android es totalmente compatible con cualquier tipo de transmisin por lo que funcionar igual sobre dispositivos que usen GPRS con otros que usen 3G. Las interfases grfcas de usuario estn diseadas usando archivos XML que adems de fciles de disear permiten al equipo representar las interfases en la mayor parte de los casos independientemente de las dimensiones de la pantalla. El navegador que utiliza WebKit que a su vez tambin est implementado usando KHTML, por lo que nos aseguramos de un perfecto visionado de los sitios web que cumplan con los estndares. La versin del reproductor Flash, de excepcional importan- cia en la actualidad a pesar de no ser libre, est prevista que sea liberada en breve para atender a los miles de dispositivos que trae- rn consigo Android. Adems Android asegura una funciona- lidad comparable o incluso mejor de la de dispositivos tan cuidados como iPhone, por lo que en Android tenemos un ganador seguro. Previsiones de comercializacin Con las empresas que se encuentran respal- dando el proyecto, y no me refero a Google ahora, sino a HTC, Motorola, Samsung..., Android no tendr problemas de comercia- lizacin. Slo falta software sufciente para rivalizar de manera directa con las dems plataformas (que llevan unos cuantos aos por delante de Android) pero gracias a las facilidades que da Android a la comunidad esto tampoco ser problema a la larga. Las fechas por ahora son muy difusas, pero se espera que Android est disponible y ope- rativo en el mercado a fnales de 2008, as que desgraciadamente nos tendremos que esperar un poco. Lo que s es seguro, es que en el momen- to de su lanzamiento al pblico tendr ms de una campaa publicitaria detrs y mucho ms marketing aparte, por lo que os puedo asegurar que nos enteraremos todos. OpenMoko la otra alternativa libre Android no es ni mucho menos el primer sistema operativo libre que aparece en los dispositivos de carcter mvil. Anunciado en 2006, hasta la aparicin de Android supona el sistema libre con ms fuerza en este campo. Basado tambin en el ncleo de Linux, OpenMoko usa un entorno grfco de usuario basado en el servidor X.org, las libreras GTK+ y el gestor de ventanas Matchbox (el mismo que por cierto usarn los OLPC). Est basado en el framework de OpenEmbedded y el sistema de paquetes ipkg. Sin embargo, OpenMoko no ha tenido el respaldo de ninguna gran empresa y slo el mvil Neo1973 de la empresa coreana FIC ha llegado a venderse con dicho siste- ma instalado para ser usado con cualquier compaa. OpenMoko es un ejemplo ms de cmo un gran producto no llega a triunfar por culpa de la falta de comercializacin y sobre todo por no tener el respaldo de al- gn grande de la tecnologa mundial. Algo parecido le pas por ejemplo a la consola GP2X que por desgracia tiene un pblico realmente limitado y no ha podido despegar al igual que sus competidoras Nintendo DS y Play Station Portable por culpa de la falta de comercializacin. Figura 3. Vista inicial del emulador Figura 4. Resultado del proyecto de prueba Figura 5. Hola Mundo Hola Android 4 para programadores Programacin en Android, el Linux que estar en todos los mviles, Linux+ 3/2008 5 para programadores Programacin en Android, el Linux que estar en todos los mviles, www.lpmagazine.org Instalacin del kit de desarrollo de software de Android Nada ms anunciar el producto, Google anunciaba que liberaba tambin la SDK del mismo y que convocaba un concurso llamado Android Developer Challenge cu- ya fecha de fnalizacin est prevista para marzo de 2008 y cuya cuanta en premios asciende hasta los 10 millones de dlares. Estos dos movimientos, adems de mover a la comunidad entera, han hecho que muchos de los desarrolladores libres vean con ms que buenos ojos a Android. El kit de desarrollo proporciona las herramientas necesarias para que, usando Java y las clases pertinentes, podamos desarrollar (y probar usando el emulador que incorpora) el software necesario para el sistema. Instalacin de la SDK Procedemos primeramente a descargar la SDK, que viene comprimida en formato ZIP de la web de Android en la seccin de Software development kit -> Download SDK -> Linux (i386). Una vez descargado procedemos a: Descomprimimos el archivo: unzip android_sdk_linux_m3-rc22a.zip Creamos un directorio para copiar el contenido (cambiamos oportunamente las rutas para adecuarlas a nuestro ca- so): mkdir $HOME/android_sdk Copiamos el contenido: sudo cp -r $HOME/android _sdk_linux_m3-rc22a /* $HOME/ android_sdk Aadimos al PATH de bashrc (o bash_ profle) el directorio tools de la SDK: sudo nano $HOME/.bashrc Incluimos al fnal por ejemplo: export PATH=${PATH} :$HOME/android_sdk/tools Ya tenemos todo listo para proseguir instalando ahora, el plugin de Eclipse. Listado 1. Conversor.java package conversor.peso; import android.app.Activity; import android.os.Bundle; public class Conversorextends Activity { /** Called when the activity is frst created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main);}} Listado 2. Creando el primer LinearLayout horizontal <?xml version="1.0"encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android. com/apk/res/android" android:orientation="vertical" android:layout_width="fll_parent" android:layout_height="fll_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="fll_parent" android:layout_height="wrap_content"> </LinearLayout></LinearLayout> Listado 3. main.xml <?xml version="1.0"encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com /apk/res/android" android:orientation="vertical" android:layout_width="fll_parent" android:layout_height="fll_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="fll_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@ string/libras" /><EditText id="@ +id/libras" android:layout_width="fll_parent" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fll_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/kilogramos" /> <EditText id="@+id/kilogramos" android:layout_width="fll_parent" android:layout_height="wrap_content" /> </LinearLayout></LinearLayout> Listado 4. string.xml <?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">Conversor</string> <string name="libras">Libras:</string> <string name="kilogramos">Kilogramos:</string></resources> 6 para programadores Programacin en Android, el Linux que estar en todos los mviles, Linux+ 3/2008 7 para programadores Programacin en Android, el Linux que estar en todos los mviles, www.lpmagazine.org Instalacin del plugin de Eclipse (ADT) La instalacin del plugin de Eclipse para desarrollar proyectos con Android se realiza de manera totalmente grfca: Iniciamos Eclipse y nos dirigimos a: Help > Software updates > Find andins- tall... En el dilogo que nos aparece elegi- mos: Search for new features to install y presionamos en Next. Creamos un nuevo sitio remoto, New remote site incluyendo como ttulo An- droid Plugin por ejemplo; y como URL del mismo: https://dl-ssl.google.com/ android/eclipse/. El sistema buscar informacin sobre el plugin y acto seguido aparecer un dilogo donde se nos mostrar el plugin para elegir. Lo seleccionamos: Android Plugin > Eclipse Integration > Android Development Tools y presionamos Next. Una vez seleccionado, aceptamos las condiciones de uso y acto seguido el plugin se habr terminado de instalar. Antes de hacer uso de l deberemos reiniciar Eclipse y hacer que apunte al directorio donde tenemos instalada la SDK. Para asignar la ruta de la SDK al plugin entramos en las preferencias de Eclip- se, Preferences > Android y asignamos la ruta en SDK Location. Ya estamos listos para comenzar a realizar nuestros primeros proyectos con Eclipse pa- ra Android. Dado que todava se encuentra tanto Android, como su SDK, como el plu- gin, en plena fase de desarrollo, deberemos estar atentos y de vez en cuando repetir los primeros pasos de la instalacin del plugin para ver si hay disponible una versin nueva. Primeros pasos con Eclipse y Android Gracias al plugin que acabamos de instalar, la creacin del proyecto para Android es algo automtico. Accedemos a File > New > Project... En el dilogo que nos aparece tenemos disponible una opcin para crear un proyecto para Android. Asignamos el nombre del proyecto as como si vamos a trabajar con nuevo cdigo o con cdigo ya existente y: Nombre del paquete: prueba.primera por ejemplo. Nombre de la actividad: prueba Nombre de la aplicacin: prueba El plugin crear dos directorios y un archivo XML: src/: Donde se almacenar nuestro cdigo. res/: Donde se almacenarn los recursos del proyecto. androidManifest.xml: Informacin sobre el proyecto. Creando la confguracin de ejecucin Nos dirigimos al dilogo de confguracin de la ejecucin: Run > Run... Dentro de l seleccionamos a Android y elegimos crear una nueva confguracin. Le damos nombre y asignamos: Nombre del proyecto a ejecutar. Actividad dentro del mismo a ejecutar. Tambin podemos elegir otras opciones para el emulador y en el apartado al margen que se llama Common. Ya podemos entonces ejecutar la apli- cacin, depurarla o simplemente guardar esta nueva confguracin de ejecucin para usarla posteriormente. Hola mundo, hola Android Una vez visto esto, si ejecutis el cdigo veris un texto parecido a un tpico Hello World. Personalicemos algo ms eso. Veamos qu debemos modifcar para que aparezca el tpico, Hola mundo que todos, o casi todos, hacemos cuando comenzamos a probar con un nuevo lenguaje o plataforma. Para ello Figura 6. Resultado con libras y kilogramos ya listos para introducir. Listado 5. Botones <LinearLayout android:orientation="horizontal" android:layout_width="fll_parent" android:layout_height="wrap_content"> <Button id="@+id/librasAKilogramos" android:text="@string/librasAKilogramos" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button id="@+id/kilogramosALibras" android:text="@string/kilogramosALibras" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> Listado 6. Incluyendo los EditText y Button dentro del fchero java public class Conversorextends Activity { private EditTexttextoLibras; private EditTexttextoKilogramos; /** Called when theactivity is frst created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); textoLibras = (EditText)fndViewById(R.id.libras); textoKilogramos = (EditText)fndViewById(R.id.kilogramos); Button librasAKilogramos =(Button)fndViewById(R.id.librasAKilogramos); Button kilogramosALibras =(Button)fndViewById(R.id.kilogramosALibras) ; } } 6 para programadores Programacin en Android, el Linux que estar en todos los mviles, Linux+ 3/2008 7 para programadores Programacin en Android, el Linux que estar en todos los mviles, www.lpmagazine.org creamos un nuevo proyecto como el anterior y lo nombramos Hola Mundo. Posteriormen- te antes de ejecutar modifcamos el archivo main.xml, que est dentro de layouts y cam- biamos el siguiente valor: <TextView android:layout_width="f ll_parent" android:layout_height="wrap_content" android:text="Hola Mundo! Hola Android." /> De manera que el campo android:text, con- tenga la cadena para escribir Hola Mundo! Hola Android. Con esta simple modifcacin ya cambiamos el valor del campo que apa- rece en pantalla. Como veris, el directorio layouts con sus distintos archivos XML de los que os he hablado anteriormente para defnir interfaces grfcos de usuario, puede parecer de primeras ms complejo, sin em- bargo es cuestin de acostumbrarse al modo de programar del mismo. Conversor de kilos a libras Para hacer un ejemplo un poco ms complejo en el que manejemos algo ms de Android, vamos a comenzar a desarrollar un conversor de kilos a libras. De esta manera tendremos adems de algo de clculo detrs, un interfaz un poco ms completo con: Un campo para introducir los kilos y otro para introducir las libras. Un botn para convertir de kilos a libras y otro para hacer lo contrario. Lo primero que haremos ser crear un proyecto tal y como lo hemos hecho antes. Para el ejemplo he elegido los siguientes nombres: Nombre proyecto: Conversor Nombre paquete: conversor.peso Nombre actividad: Conversor Nombre aplicacin: Conversor Una vez cargado el proyecto, observamos el contenido de Conversor.java: La sentencia que nos interesa ahora es: setContentView(R.layout.main); Esta sen- tencia indica qu interfaz de usuario se esta- blece cuando la actividad se llama. Como os comentamos antes al comienzo del artculo, un concepto muy importante en Android es el de actividad que puede ser llamada por otro software en ejecucin, por lo que se facilita mucho labores como Enviar SMS o Llamar a tal contacto que pueden ser a su vez actividades. Volviendo a la sentencia anterior, deciros que establece el interfaz en el archivo main de layout. Los layout estn defnidos en ar- chivos XML, como el que hemos modifcado en el ejemplo de Hola Mundo. Los layout aunque puedan parecer poco intuitivos, nos permiten crear interfaces de manera rpida y lo que es ms importante, solucionan el problema de los distintos tamaos de pantalla que hay en los dispositivos mviles. Empezando a trabajar con layouts Puesto que queremos hacer algo as como: Libras: (campo de texto para introducir cantidad) Kilogramos: (campo de texto para introdu- cir cantidad) Botn para convertir de libras a kilogra- mos. Botn para convertir de kilogramos a li- bras. Los layout nos ofrecen la posibilidad de ha- cerlo defniendo primero un tipo de contene- dores llamados: LinearLayout. stos agru- pan otros contenedores a su vez en su interior y pueden tener dos orientaciones: vertical u horizontal. Nosotros tendremos primero un LinearLayout vertical que almacene los cuatro campos que nos interesan. Luego ani- daremos dentro de l ms LinearLayout con orientacin horizontal para poder contener el resto de elementos. La sintaxis de XML nos facilita muchos estos anidamientos. Si os fjis ese LinearLayout vertical que os co- mento ya viene defnido dentro del proyecto autogenerado por la siguiente sentencia: android:orientation="vertical. Para crear la lnea defnida porla etiqueta Libras y el campo de texto para insertar el valor de las mismas, creamos otros LinearLayout que tenga orientacin horizontal. Lo anidamos como est demostrado en el Listado 2. Lo nico que hemos cambiado en el nue- vo LinearLayout ha sido la orientacin del mismo. Ahora dentro de este LinearLayout colocaremos la etiqueta de Libras y el campo de texto para insertar la cantidad. TextView y EditText Para poner la palabra Libras en el interfaz usaremos los llamados TextView. La sintaxis es anloga a la de los LinearLayout. Las pro- piedades que usaremos sern: layout_height: Altura. text: Texto del mismo. Nuestro TextView ser as: <TextView android:layout_width="wrap_ content" android:layout_height="wrap_content" android:text="@string/ libras" /> El campo @string/libras hace referencia al archivo string.xml defnido en el directorio values del proyecto. Este archivo que de primeras slo tiene guardado el nombre de la aplicacin, appNa- me, nos servir para almacenar las cadenas de nuestra interfaz. Por ejemplo en este caso tendremos: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name"> Conversor</string> <string name="libras"> Libras:</string> </resources> Ya tenemos la etiqueta puesta. Pasemos ahora a crear el campo de texto donde se insertar la cantidad de libras. Usaremos los llamados EditText y tambin los incorporaremos al LinearLayout vertical que hemos creado. Las propiedades que usaremos sern: Figura 7. Interfaz completo Android ht t p: / / code. googl e. com/ androi d/ index.html Open Handset Alliance http://www.openhandsetalliance.com/ Android Development Community http://www.anddev.org/ En la red 8 para programadores Programacin en Android, el Linux que estar en todos los mviles, Linux+ 3/2008 9 para programadores Programacin en Android, el Linux que estar en todos los mviles, www.lpmagazine.org id: Identifcador layout_width: Anchura layout_height: Altura Los valores que hemos usado o usaremos para anchura y altura, wrap_content y f- ll_parent, envuelven el contenido o rellenan al padre respectivamente. Es la manera ms rpida y efciente (al menos para estos ejem- plos) de defnir una altura y una anchura que se ajustan a nuestras necesidades. Nuestro EditText tendr la siguiente forma: <EditText id="@+id/libras" android:layout_width="fll_parent" android:layout_height="wrap_content" /> Si hacemos lo mismo para kilogramos y lo aadimos al main.xml y a string.xml nos quedarn como en los Listados 3 y 4. El re- sultado lo podis ver en la Figura 6. Aadiendo botones Para incluir los botones, los haremos inclu- yendo dos button en un nuevo LinearLayout horizontal que albergar a ambos botones. Los botones, los incluiremos usando button, las propiedades que usaremos del mismo son: id: Identifcador text: Texto layout_width: Anchura layout_height: Altura En el texto se har una referencia al texto en s que aparecer dentro del botn que estar guar- dado en string.xml. Como veis el sistema es siempre el mis- mo, en main.xml defnimos las propiedades y en string.xml almacenamos el contenido y las cadenas que aparecen en nuestra in- terfaz. Defnamos primero lo que vamos a incluir en el main.xml. Creamos un nuevo LinearLayout horizontal e incluimos los botones (Listado 5). Figura 8. Conversor funcionando Listado 7. Campos numricos <EditText id="@+id/libras" android:layout_width="fll_parent" android:numeric="true" android:layout_height="wrap_content" /> <EditText id="@+id/kilogramos" android:layout_width="fll_parent" android:numeric="true" android:layout_height="wrap_content" /> Listado 8. Defnicin de los mtodos de clculo librasAKilogramos.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { textoKilogramos.setText(""+Double.parseDouble(textoLibras.getText(). toString())*.4535924); } } ) ; kilogramosALibras.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { textoLibras.setText(""+Double.parseDouble (textoKilogramos.getText( ).toString())/.4535924); } } ) ; Listado 9. Botn cerrar En string.xml: <string name="cerrar">Cerrar</string> En main.xml: <Button id="@+id/cerrar" android:text="@string/cerrar" android:layout_width="fll_parent" android:layout_height="wrap_content" /> En Conversor.java: Button salir = (Button) fndViewById(R.id.salir); [...] salir.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { setResult(RESULT_OK); fnish(); } } ) ; 8 para programadores Programacin en Android, el Linux que estar en todos los mviles, Linux+ 3/2008 9 para programadores Programacin en Android, el Linux que estar en todos los mviles, www.lpmagazine.org Dotando de funcionalidad a nuestro ejemplo Como podis observar en la toma de pan- talla anterior ya tenemos el interfaz dise- ado y funcionando sin embargo, es un mero esqueleto que no tiene funcionalidad. Lo primero que haremos ser importar: import android.widget.EditText y import android.widget.Button. Eclipse puede hacer esta labor por nosotros si presionamos: Con- trol + Maysculas + O sobre la instanciacin del objeto del que no tiene el import oportuno (lo que resulta bastante cmodo la verdad). Creamos dos atributos privados para la clase, uno para cada EditText y otros dos objetos ya dentro del mtodo onCreate para manejar las acciones de los botones. Adems asignamos a cada uno que manejen el EditText o Button correspon- diente con el mtodo fndViewById al que le pasamos como parmetro el identifcador y nos devuelve el objeto de la vista con dicho identifcador. Veamos cmo sera el cdigo (Listado 6). Como podis observar textoLibras y texto- Kilogramos son atributos de la clase Conversor ya que los manejaremos en ms mtodos que en el onCreate. Ahora crearemos dos mtodos ms en la clase para hacer las dos acciones, pasar de libras a kilogramos y viceversa. Defniendo mtodos para realizar los clculos Lo primero que haremos ser obligar a Android que no acepte valores que no sean numricos en los EditText. La manera ms efciente de hacerlo es asignar la propiedad de campo numrico a los mismos. Esto lo hacemos en el fchero main.xml (Listado 7). Una vez hecho sto nos ahorramos el posible problema de que el usuario introduz- ca una letra en alguno de estos dos campos y el consiguiente manejo de excepciones, con la tpica estructura de Java try y catch tambin en Android. Para hacer la operacin crearemos dos mtodos dentro de onCreate que se dediquen cada uno a hacer la operacin de libras a ki- logramos y viceversa. Para ello utilizaremos onClickListener y dentro de l crearemos la defnicin de la accin para el evento onClick. La primera accin ser si hacemos clic en el botn de transformacin de libras a ki- logramos rellenar el campo texto kilogramos con el producto del nmero de libras por la razn de conversin (0.4535924) para este caso. La accin inversa ser hacer lo mismo pero dividiendo y cambiando de orden los campos (Listado 8). Incluimos un botn para cerrar la aplicacin Para terminar el ejemplo vamos a aadir a nuestra aplicacin un botn para cerrarla. Para ello usaremos en el archivo con el cdi- go Java los mtodos: setResult con el parmetro RESULT_OK para indicar a Android que la actividad ha fnalizado correctamente. fnish() para cerrar la aplicacin. Adems incluiremos el Listado 9. Si pulsa- mos el botn Cerrar la aplicacin se cerrar y volveremos al men inicial de Android en el emulador. Podis ver el resultado en la Figura 10 Conclusiones Con este artculo no se ha intentado dar una explicacin compleja y completa de todas las posibilidades que nos ofrece Android. Sin embargo, espero que el contenido del mismo os sirva para romper el hielo y animaros a programar en esta plataforma que gracias al apoyo de las empresas lderes del mercado, est llamada a ser quien lidere el emergente sector de los sistemas operativos para dispositivos mviles. La inclusin de mens o de ms elementos en la interfaz as como el manejo de las libreras que os he comentado anteriormente, son el si- guiente paso para seguir desarrollando nuestro trabajo. Manejar el bluetooth o crear una apli- cacin que use navegacin web son posibi- lidades que gracias a la API de Android se desarrollan de manera bastante simple. Las llamadas DevTools son una ayuda ms para el desarrollador que Android nos ofrece. Os animo desde aqu a que formis parte de la comunidad de desarrolladores y comencis a hacer an ms grande a este sistema operativo que est llamado a hacer historia. Las posibilidades como habis visto son numerosas y las difcultades, como por ejemplo lo raro que pueden resultar de primeras el uso de layouts, son slo cuestin de acostumbrarse, porque Google y el resto de componentes del proyecto han conseguido disearlo de manera que resulta realmente fcil programar y desarrollar para el mismo. Figura 9. Botn cerrar incluido Francisco Javier Carazo Gil esIngeniero Tcnico en Informtica de Sistemas. Nacido en Crdoba, actualmente est estudiando Ingeniera en Informtica. Ha trabajado anteriormente con contrato de becario en el Ilustre Colegio de Aboga- dos de Lucena. Es webmaster de LinuxHispano.net, sitio del que es uno de los fundadores. Colaborador habitual de esta revista,sus intereses son principalmente el software libre, la programacin y todo lo relaciona- do con GNU/Linux. Su sitio web personal est en http: //www.jcarazo.com. Podis contactar con l a travs de su correo personal, carazo@gmail.com. Sobre el autor Figura 10. Logo de Android