P. 1
Desarrollo_de_aplicaciones_en_Android

Desarrollo_de_aplicaciones_en_Android

|Views: 287|Likes:

More info:

Published by: Julia Gómez Carrillo on Feb 13, 2011
Direitos Autorais:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/21/2013

pdf

text

original

Trabajo Teórico POO marzo, 2010

DESARROLLO DE APLICACIONES EN ANDROID

Carlos García García David Hernández Pulido Javier Montejo Berlingen

Departamento de Informática y Automática Universidad de Salamanca (http://diaweb.usal.es)

Información de los autores: Carlos García García

Alumno de la asignatura de Programación Orientada a Objetos Departamento de Informática y Automática carlosggg@usal.es
David Hernández Pulido

Alumno de la asignatura de Programación Orientada a Objetos Departamento de Informática y Automática davidherpul@usal.es
Javier Montejo Berlingen

Alumno de la asignatura de Programación Orientada a Objetos Departamento de Informática y Automática javiermontejo@usal.es

Este documento puede ser libremente distribuido. © 2010 Departamento de Informática y Automática - Universidad de Salamanca.

Resumen
Hoy en día, una nueva generación de teléfonos móviles, conocidos como smartphones o teléfonos inteligentes, ocupan las primeros puestos en el mercado. Estos teléfonos son completamente capaces de ejecutar aplicaciones programadas por el usuario. El problema radica en grandes diferencias entre las plataformas de hardware que hacen que la portabilidad sea casi imposible. Android es un sistema operativo diseñado para smartphones, que proporciona una capa de abstracción completa, y haciendo por tanto todas las aplicaciones portables, independientemente del hardware subyacente. También se ocupa de la gestión de los limitados recursos del teléfono en comparación con otros tipos de dispositivos. Este documento ofrece una visión en los aspectos básicos de Android. Aunque algunos aspectos generales de su integración en los teléfonos móviles son necesariamente mencionados, el objetivo principal es discutir acerca de cómo trata el paradigma de la orientación a objetos. A través del uso eficiente de las herramientas de programación orientada a objetos que nos proporciona, Android es capaz de ofrecer al programador un marco de trabajo que facilita enormemente su labor. Los aspectos básicos de cómo Android consigue este propósito a través de programación orientada a objetos se examinan a fondo, incluyendo algunos ejemplos de implementación que pensamos pueden ser esclarecedores.

Trabajo Teórico POO

i

Abstract
Nowadays, a new generation of mobile phones, known as “smart-phones” are topping the markets. These phones are fully capable of running user-programmed applications. The problem comes from the large hardware differences between platforms which makes portability almost impossible. Android is a operating system designed for smart-phones, it provides a complete abstraction layer, and therefore making every application portable regardless of the underlying hardware. It also deals with the management of the limited resources of the phone. This document offers an insight in the basic aspects of Android. Although some general aspects of its integration in mobile phones is necessarily mentioned, the main goal is to discuss its object oriented paradigm. Through the efficient use of the tools that object oriented programming provides us, Android is able to offer the programmer a framework which eases enormously his work. The basics aspects of how Android reaches this goal through object oriented programming are discussed at length, including some implementation examples where we thought that they might be enlightening.

ii

Trabajo Teórico POO

..3....................................................2.Tabla de Contenidos 1........................... 4.............1 4. 8 Native Development Kit ................................................................................................2 4........................... 4..........................................................1........................................................................................... 2.................. 2............................................. 4....................... 7 MÁQUINA VIRTUAL DALVIK ............................. 12 Tareas.... 7 Emulador............... 8 Funcionamiento....................................................................................4....................................3.................................................................3..............................................2........ 3..................... 1.............. 3.................. 11 Ciclo de vida ........... 3................................1................................3..................................................1 1................................................ 5 Runtime de android...1 2.............. 1...1................................................3...............1 1............................ 1......................................... 9 ANATOMÍA DE UNA APLICACIÓN ANDROID ..............................................................2................. 4..........................4 1................... 9 Activity............................................................4...................................... 2....2..................1...................................................5 1.. 9 Optimización....... 13 Intent e Intent Filters ........................... 4 Librerías............. 5 Kernel de Linux ........ 5 Paquetes ....................................3............... 4 Application Framework . 2 Ventajas de Android frente a otros sistemas.................. INTRODUCCIÓN .................................................... Historia........3............................................................................. 3.......................................................2 4................... 1 1...... 2.........................................1 4.................................................................... 14 Resolución de Intents...............................3 1....................... 3 Arquitectura .....................................................................................................................................................................2.. 1 Mercado ............................ 15 Content Provider . 11 Trabajo Teórico POO iii ..... 15 Service............................2.................................................. 14 Objeto Intent .................................................................................................................. 5 IDEs ............................................ 15 HERRAMIENTAS DE DESARROLLO ..................................2..............3... 4...........................1......... 4 Aplicaciones ......................................................3...........................2..........................................1.......................................................................... 9 Diferencias respecto a la MV de Java ................... 7 Android SDK Y ADT ..........................................2 1.............................................................

...............1 5................................................................................................. 23 Reutilización ..3 6...................... 25 Ejemplo .................................................................................... 4....2................. 5........................ 5...........................2.. 31 iv Trabajo Teórico POO .............................................. 5...... 25 MapController.......................................................3.............. 21 Contenedores .............1........................................1........................................................................ 25 MapActivity......................... 29 Reconocimiento de gestos............. 19 GOOGLE MAPS ............................................................................................................ 7................................................................................................................................2................................................................1........................5......................................... 7....................... 25 MapView .......... 22 Widgets ........................................... 29 Telephony...1................6.....................1.......................................................1 6........ 25 FACILIDADES DE ANDROID ....................... 6...........2........................ 16 Otros............................................................................................................3 6............. 7...................................4...........................................................................................2 6........................... 19 Layout ...... 16 Manifiesto .................. 29 CONCLUSIONES ..................................................................................................................2............2 5......................................................... 7.... 30 ESTRUCTURA DE UN PROYECTO .................................. 8.........................................2................................................... 24 Clases básicas................. 5......................... 26 Location ................ Broadcast Receivers .......... 6........1......................................

..................................... 7 Ilustración 8 – IDE Eclipse y emulador de Android ejecutándose sobre un S............... 21 Ilustración 11 – Ejemplo de aplicación creada mediante el uso de Google Maps.............................................. para smartphones según el uso de la red de datos............................. 8 Ilustración 9 – Diagrama de estados del ciclo de vida de una actividad ....... 2 Ilustración 4 – Gráfico de los S. 2 Ilustración 5 – Gráfica del número de nuevas aplicaciones para Android ...........................................................................O.... 1 Ilustración 3 – Porcentaje de dispositivos móviles Android por cada versión a 12/4/2010 .................... 13 Ilustración 10 – Herramienta de creación de GUIs ............................................... 1 Ilustración 2 – Logo de la Open Handset Alliance.. 3 Ilustración 6 – Componentes del S.............................. Android.................. 27 Trabajo Teórico POO v ......O................................................. 4 Ilustración 7 – Logo de Eclipse ............................. Linux..................................O...Tabla de Ilustraciones Ilustración 1 – Logo de la plataforma Android ..

Manifiesto: es un archivo XML que describe a la aplicación y sus componentes NDK: Native development kit. más abstracto que el código máquina. Representa los elementos visuales y reacciona a las acciones del usuario Android Developer Challengue: concurso creado por Google para fomentar el desarrollo de aplicaciones en Android. teclado. Widget: combinación de la palabra window gadget. Frecuentemente se utiliza para conocer la velocidad y desplazamiento de un cuerpo en uno o varios ejes dimensionales. con el cual el usuario puede interactuar. Smartphone: dispositivo móvil que supone una evolución de los teléfonos móviles. Dalvik: nombre de la máquina virtual utilizada por el sistema operativo Android. entre otros. conexión wifi. aplicaciones de usuario como navegador web o cliente de correo. Es una agrupación de varios ficheros Java y se usa generalmente para la distribución conjunta de clases y metadatos. JAR: acrónimo de Java Archive.GLOSARIO Acelerómetro: instrumento destinado a medir aceleraciones. Bytecode: código intermedio. Android Market: aplicación de red que permite publicar aplicaciones a los desarrolladores para ponerlas a disposición de los usuarios. Es un componente gráfico utilizado en interfaces de usuario. y que necesita de un mediador o máquina virtual para poder ser transformado y ejecutado en el hardware. vi Trabajo Teórico POO . con la inclusión de pantalla táctil. ADT: Android Development Tools Activity es la clase responsable de una ventana dentro de una aplicación.

telecomunicaciones y aplicaciones móviles. Ilustración 1 – Logo de la plataforma Android El 5 de Noviembre del 2007 se anuncia la creación de la Open Handset Alliance. que no estaría atado a su funcionamiento en una marca o dispositivo concreto. sino que gracias a su kernel de Linux. que incluía un emulador de Android para ir probando las primeras líneas de código.O.1. INTRODUCCIÓN Android en un Sistema Operativo además de una plataforma de software basada en el núcleo de Linux (monolítico). cinco días después del anuncio Google lanza un SDK.1. una organización cuyo objetivo es la difusión de la plataforma móvil Android. a pesar de lo cual el grupo de fundadores tenía gran experiencia en plataformas web. pasaría posteriormente a ser el director de la división de plataformas móviles de Google. Para sorpresa . Para su creación se han teniendo en cuenta los avances tecnológicos en los diferentes terminales móviles. Ilustración 2 – Logo de la Open Handset Alliance -1- . Historia La historia de este S. Andy Rubin.O abierto para móviles. momento en el cual Google compró una pequeña compañía cuya finalidad era el desarrollo de aplicaciones para dispositivos móviles: Android Inc. Aquella empresa era desconocida para el mundo de las tecnologías en aquellos años. Uno de los cofundadores de aquella compañía. comienza en Junio del 2005. aunque su versatilidad le hace propicio para otros dispositivos empotrados. 1. por ello el sistema soporta bluetooth.y alegría . Se ha diseñado en un principio para el control de dispositivos móviles mediante librerías Java. podría ser adaptado a casi cualquier dispositivo. wifi y pantallas táctiles. Está formada por fabricantes de equipos y prestadores de servicios de tecnología que unieron fuerzas para lanzar el primer S.de muchos.

no lo es en cambio en el uso de Internet. Sin embargo. estando dividida en Abril del 2010 en siete niveles. Mercado Con el avance de las nuevas tecnologías se han incrementado las posibles funcionalidades del móvil en relación a las nuevas formas de comunicación lo que ha conllevado al desarrollo de nuevos sistemas operativos para smartphones. 1. para smartphones según el uso de la red de datos A pesar de que Symbian –propiedad de Nokia . permitirá la Trabajo Teórico POO 2 . abierto a todos los desarrolladores y sin intermediarios. el hecho de que Android se haya creado con el objetivo de poder correr sobre terminales de distintos fabricantes abre un nuevo panorama en el mercado de las aplicaciones para móviles.O. un espacio para la distribución y venta de aplicaciones. Tras varias correcciones y nuevas implementaciones el sistema se encuentra en su versión 2. campo en el que domina iPhone OS. Además. La siguiente gráfica obtenida de la web “Android Developers” muestra el porcentaje de dispositivos Android que utilizan una determinada versión: Ilustración 3 – Porcentaje de dispositivos móviles Android por cada versión a 12/4/2010 Por cada nueva versión de la plataforma se ha ido añadiendo un nivel más a la API.2.O.Desarrollo de aplicaciones en Android Su lanzamiento inicial fue el 21 de Octubre de 2008 con la versión 1.es el líder respecto a las ventas de móviles. que en principio se plantea como el principal obstáculo de Android. según el uso que hacen del tráfico de red: Ilustración 4 – Gráfico de los S.1 a fecha del 17 de Marzo de 2010. A continuación se observa un gráfico que muestra el panorama actual de los diferentes S. el hecho de la existencia del Android Market.0.

posibilidad de hacer un buen negocio apostando por esta plataforma. Las APIs permiten crear casi cualquier cosa. lo que potencia el software libre.O. solo en Android con el total de sus características. Es por ello que como se observa en la siguiente gráfica el número de aplicaciones para Android sigue creciendo. por lo que esta intentará que todos los servicios que ofrece estén también disponibles para la plataforma Android.O. a pesar de que a fecha de escritura de este texto el número de terminales con S. Permite personalizar el teléfono móvil y su entorno de funcionamiento. así como el pago por estas. además de la existencia de concursos financiados por diferentes empresas y organizaciones.Android no es todavía suficientemente elevado y las empresas no están aun obteniendo los beneficios esperados. Android Market facilita la difusión de las aplicaciones creadas. La prueba la tenemos en la buena acogida que ha tenido el Android Developer Challengue.García et al.O. Un claro ejemplo es Google Maps. La liberación gratuita del SDK permite también a empresas con pocos recursos y jóvenes emprendedores desarrollar aplicaciones para los dispositivos que utilicen este S. Ilustración 5 – Gráfica del número de nuevas aplicaciones para Android 1. para móviles de Apple ). que actualmente es uno de los gigantes de la informática. Más recientemente la red social Buzz de Google acaba de ser adaptada para este S. Es un sistema que puede instalarse en una gran cantidad de dispositivos diferentes ( al contrario que el S. • • • • • • 3 Trabajo Teórico POO . al contrario que si este no estuviera disponible.O.2. facilitando el trabajo y motivando a los desarrolladores. que aun estando la API también disponible para otros sistemas. con gran participación y excelentes proyectos. lo que facilita que el número de comunidades de usuarios y el soporte vaya aumentando.1 Ventajas de Android frente a otros sistemas • Está apadrinado por Google. Esto significa que un programador puede realizar modificaciones en el código de los programas. Es licenciable bajo GPL. y este número va aumentando a medida que se sacan nuevos drivers.

3. Esto ya lo consiguió hacer Nokia en un dispositivo móvil. Este mismo mecanismo permite que los componentes que puedan ser reemplazados por el usuario. navegador. La arquitectura se ha diseñado para simplificar la reutilización de componentes: cualquier aplicación puede publicar sus capacidades para que otro programa pueda hacer uso de estas. que todavía no poseen esta característica. 1. sujeto a las limitaciones de seguridad impuestas. contactos. además de la posibilidad de añadir nuevas mediante el ya mencionado Android Market. programa de SMS.2 Application Framework Los desarrolladores tienen pleno acceso a las mismas APIs del framework usadas por las aplicaciones básicas. Por defecto se incluye un cliente de correo electrónico. etc… 1. mapas.1 Aplicaciones Android suministra un amplio espectro de aplicaciones para que el usuario pueda satisfacer sus necesidades.3.O.OO.3. Trabajo Teórico POO 4 . Android 1. pero aun así supone una ventaja con respecto a otros SS. calendario.Desarrollo de aplicaciones en Android • Es multitarea permitiendo ejecutar aplicaciones en segundo plano. Arquitectura El sistema operativo Android está formado principalmente por los siguientes componentes: Ilustración 6 – Componentes del S.

5 Kernel de Linux El sistema operativo está basado en la versión 2.sqlite: posee las clases necesarias para el manejo de bases de datos SQLite. modelos de IG.dex). bibliotecas 3D. • • • • • • • 5 Trabajo Teórico POO . android. 1. gestión de memoria. etc… 1.García et al.wifi: gestión de la funcionalidad wifi del dispositivo.net. además de prestar los servicios de seguridad.hardware: provee soporte para dispositivos hardware que pueden no estar presente en todos los teléfonos móviles ( por ejemplo la cámara ).6 del núcleo de Linux que actúa como una capa de abstracción entre el hardware y el del conjunto de software.3. Estos son algunos que se han considerado relevantes: • • android: contiene las clases correspondientes a los recursos ( imágenes.net. bibliotecas de gráficos. Paquetes Android reutiliza a una gran cantidad de paquetes ya existentes como son los del lenguaje Java ( java.3. atributos… ) utilizados por las aplicaciones. o rectángulo. android. Este es un sistema de gestión de bases de de datos que no está basado en el modelo cliente-servidor en el que el SGBD es un proceso independiente. 1. que permiten dibujar en la pantalla. con su propia instancia de la máquina virtual Dalvik. Este es el sistema comúnmente usado a la hora de instalar bases de datos locales en un dispositivo Android.3 Librerías Incluye un conjunto de librerías C / C + + usadas por diversos componentes del sistema.dex por la herramienta “dx”.3.graphics: proporciona herramientas gráficas de bajo nivel tales como filtros de color. Esta MV ha sido escrita de forma que un dispositivo pueda correr múltiples máquinas virtuales de forma eficiente.database. y corre clases compiladas por Javac que han sido transformadas al formato. android. puntos. java. android. Cada aplicación Android corre en su propio proceso. pero a la vez también añade una gran cantidad de paquetes propios que aportan mayores posibilidades a las aplicaciones que sean desarrolladas mediante su uso.app: proporciona clases que encapsulan el modelo general de una aplicación.4 Runtime de android Android incluye un set de bibliotecas base que proporcionan la mayor parte de la funcionalidad disponible en las bibliotecas base de Java. etc… ). red y drivers. bibliotecas de medios.database: contiene clases para explorar los datos devueltos por un proveedor de contenidos. La máquina virtual está basada en registros.bluetooth: clases para el manejo de la tecnología bluetooth. 1. el cual está optimizado para usar la menor cantidad de memoria que sea posible. android. sino que la biblioteca SQLite se enlaza con la aplicación pasando a ser parte integral de la misma. gestión de procesos.util. android. android.4. Dalvik ejecuta archivos en el formato Dalvik Executable (. Algunas son: System C Library ( implementación de la biblioteca C Standard ). android. Algunas de las clases más importantes – activity.media: clases para controlar las diferentes interfaces de audio y video. SQLite. application o service – se encuentran en este paquete.

util: proporciona diversos útiles como la fecha. pensado para gente con visibilidad nula o reducida.os: clases para el uso de los servicios básicos del sistema operativo.webkit: herramientas para la navegación web.view:: clases que manejan la disposición de los elementos en la pantalla y la interacción con el usuario. android. Proporciona un analizador sintáctico de HTML y un intérprete de JavaScript. CAD o realidad virtual. y a pesar de que todavía no está maduro y le queda mucho por desarrollar. android. etc… android. ya no solo para ayudar a los discapacitados sino también para otros usuarios como pueden ser los ancianos. Se antojaba bastante necesario. Un ejemplo es el proyecto Eyes-Free. calendarios. android. locales ( idiomas ).accessibility: paquete de accesibilidad al sistema para personas con capacidades disminuidas.Desarrollo de aplicaciones en Android • android. • • • • • • Trabajo Teórico POO 6 .corcoles. ampliamente usada en otros campos para el desarrollo de videojuegos.opengl: utilidades para la generación de gráficos 2D y 3D mediante la API OpenGL. ya se han desarrollado algunas aplicaciones con él.text: es un paquete dedicado al tratamiento de textos: copiar y pegar. Es por esto que le fue solicitado a Google un paquete con estas características.net/20090429/usa-el-movil-sin-mirar-con-eyes-free/ ). como son los mecanismos IPC. WebKit supone la base del navegador Safari. Actualmente es usado entre otros en los navegadores Mozilla Firefox y Google Chrome y en el framework Qt. tablas hash.view. que se compone de un motor texto-voz ( imprescindible para un ciego si quiere enterarse de lo que le comunican por un SMS ) y de una funcionalidad que permite que no sea necesario mirar la pantalla táctil para hacer uso de ella ( Más información en http://obm. texto con formato. android. etc… android. y fue liberado por Apple en 2005.

Android SDK Y ADT Google aparte de liberar el SDK incluye en el mismo un emulador para fomentar la creación de aplicaciones. en caso de tenerlo. En este SDK podemos encontrar las librerías para programar. pero estos cuentan con un uso y apoyo mucho menores.org/IntroAndroidDevNetBeans 2.2.1. Los dispositivos de señalamiento. es mucho más pequeño. El teclado.2. IDEs El IDE que acapara casi la totalidad de los productos desarrollados para Android es Eclipse. El IDE NetBeans es el segundo en importancia – a mucha distancia de Eclipse .netbeans. son molestos ( un lápiz ) o inexactos (dedos grandes y "multi-táctil LCD" no son una buena mezcla). • • • • HERRAMIENTAS DE DESARROLLO Obviamente resultaría muy complicado programar una aplicación directamente desde el teléfono móvil por las limitaciones que este tiene: La pantalla es mucho más pequeña. si existen. Es por ello que existen herramientas que permiten crear y probar las aplicaciones a lo largo de su desarrollo.eclipse. Ilustración 7 – Logo de Eclipse También existe la posibilidad de programar con otros IDEs. El paquete Eclipse IDE for Java Developers (descargable a través de http://www. -7 - . Toda la información relativa a estos dos elementos se puede encontrar en la web Android Developers. 2. documentación y códigos de ejemplo.org/downloads/) incluye las herramientas esenciales para la programación en Java y se puede usar por tanto para desarrollar aplicaciones para Android en conjunción con el SDK de Android y el plugin ADT ( Android Development Tools ) for Eclipse. y por ello la mayor parte de la documentación que se puede encontrar en webs y manuales hace referencia a este entorno de desarrollo.y es posible encontrar información sobre su configuración para Android en la siguiente dirección: http://wiki. La diferencia entre unas versiones y otras son cuestiones de soporte y ampliaciones de la propia API.1. Está implementado para todas las plataformas y su versión actual es la 2. Eclipse es multiplataforma y de código abierto y soporta varios lenguajes de programación. y en consecuencia menor es la documentación al respecto siendo más complicado resolver los problemas que surjan a la hora de configurar el entorno y desarrollar aplicaciones. La memoria y la velocidad de la CPU son mucho más ajustadas en comparación con la de un ordenador de sobremesa.

1 Emulador Imita todo el hardware y software de un dispositivo móvil típico.Desarrollo de aplicaciones en Android Además se ha desarrollado un plugin para el IDE Eclipse llamado ADT. Esto puede proporcionar beneficios a ciertas clases de aplicaciones. No hay soporte para las conexiones USB ni Bluetooth. Durante el desarrollo de una aplicación. Ilustración 8 – IDE Eclipse y emulador de Android ejecutándose sobre un S. Linux Las únicas limitaciones que el emulador presenta en su versión actual ( Android SDK 2.1 ) son: • • • • • • No hay soporte para hacer o recibir llamadas de teléfono reales. mensajes de texto o conexiones mientras la aplicación se ejecuta. el cual facilita mucho la depuración de programas para esta plataforma. No hay soporte para determinar que se ha insertado/expulsado una tarjeta SD. Trabajo Teórico POO 8 . donde existen otros métodos de configuración. No hay soporte para los auriculares del dispositivo.O. El NDK permite al desarrollador implementar las partes de su código utilizando lenguajes nativos como C y C + +. que puede "presionar" con el ratón simulando el apuntador de un dispositivo móvil o el teclado para generar eventos para su aplicación. 2. Native Development Kit El NDK de Android es un conjunto de herramientas que permite integrar componentes que hagan uso del código nativo en las aplicaciones Android. También ofrece una pantalla en la que se muestran las aplicaciones desarrolladas. 2. en forma de reutilización de código existente. No hay soporte para cámara de captura de video ( entrada ). A pesar de todo está en constante mejora y muchas de estas limitaciones serán eliminadas. junto con las otras aplicaciones Android. así como varias capacidades de depuración que permiten simular el recibimiento de llamadas telefónicas. aunque pueda tener algunas limitaciones. El emulador de Android proporciona una buena variedad de métodos de navegación: las teclas de control. No hay soporte para determinar el nivel de carga de la batería y el estado de carga de CA.3. el emulador de Android puede iniciarse como una aplicación independiente desde una línea de comandos ( útil cuando quiera establecer los parámetros de la simulación ) o puede usarlo como parte de su entorno de desarrollo Eclipse. Se puede simular llamadas telefónicas ( realizadas y recibidas ) a través del emulador de la consola.2.

Aunque es posible hacer esto. A diferencia de la máquina virtual de Java. indicar que el nombre Dalvik viene de un pueblo en Islandia. A pesar de las ligeras diferencias en su mayor parte el contenido de las librerias es idéntico. de forma que el fallo o cierre inesperado de una de ellas no afecte para nada a las demás. está basada en el uso de pilas. el bytecode de Java no es ejecutable en un sistema Android Por otra parte. que ha sido diseñada para optimizar memoria y recursos de hardware en un entorno de teléfonos móviles. -9 - . solo en ciertas ocasiones es ventajoso. 3.6. a costa de programas que ocupan más espacio tras la compilación. El hecho de funcionar sobre un núcleo Linux implica que es posible escribir aplicaciones en C/C++ que funcionen directamente sobre el kernel. El hecho de usar varias máquinas virtuales protege las aplicaciones. Diferencias respecto a la MV de Java Las máquina virtual de Java. permite que el código sea compilado a un bytecode independiente de la máquina en la que se va a ejecutar. Como curiosidad.3. La máquina virtual Dalvik ( DalvikVM.dex). un formato optimizado para el almacenamiento eficiente y ejecución mapeable en memoria. Dalvik virtual machine ) está basada en registros y puede ejecutar clases compiladas por un compilador Java y que posteriormente han sido convertidas al formato nativo usando la herramienta “dx”. la DalvikVM está basada en registros. sobre el cual delega las tareas relacionadas con la gestión de hilos y memoria a bajo nivel. La “recogida de basura” (liberar el espacio de objetos ya no accesibles) ha sido perfeccionada a fin de mantener siempre libre la máxima memoria posible. El hecho de no utilizar la máquina virtual de Java (aparte de posibles aspectos legales y de propiedad) es la necesidad de optimizar al máximo los recursos y enfocar el funcionamiento de los programas hacia un entorno de escasos recursos en cuanto a memoria. disponible en la mayoría de los ordenadores hoy en día. Por contra. Además. Esto es debido a que los procesadores de los teléfonos móviles están optimizados para la ejecución basada en registros. Funcionamiento Dalvik es una máquina virtual intérprete que ejecuta archivos en el formato Dalvik Executable (*. MÁQUINA VIRTUAL DALVIK Android utiliza una máquina virtual propia llamada Dalvik. hogar de los antepasados del ingeniero que diseñó la máquina virtual.1. Su objetivo fundamental es el mismo que cualquier máquina virtual.3.2. las máquinas virtuales basadas en registros permiten una ejecución más rápida. La máquina virtual corre por encima de un kernel Linux 2. A pesar de usar Java para la programación. La DalvikVM ha sido también optimizada para que haya múltiples instancias suyas funcionando con un coste muy bajo de memoria. 3. y la máquina virtual interpreta este bytecode a la hora de ejecutar el programa. las librerías Java que utiliza Android son ligeramente distintas de las incluidas en Java Standard Edition (Java SE) o en Java Mobile Edition (Java ME). 3. Optimización Es capaz de reducir bastante el tamaño del programa buscando información duplicada en las diversas clases y reutilizándola. procesador y almacenamiento. basada en el uso de pilas. la máquina virtual Dalvik está basada en registros.

Desarrollo de aplicaciones en Android Android hace un uso extenso del XML como forma de definir las interfaces gráficas y otros elementos. Trabajo Teórico POO 10 . Los archivos XML tienen que ser linkeados igualmente a la hora de compilar y son convertidos igualmente a bytecode para mejorar el rendimiento.

pero al menos ha de tener uno. El comportamiento de cada uno de ellos está definido en su correspondiente clase base ( por ejemplo android. y posteriormente lanzar las Actividades o Servicios deseados. Una actividad se puede definir como una única pantalla o interfaz dentro de una aplicación. es posible construir una actividad sin interfaz de usuario. Se tratará esto en más detalle de este archivo en secciones posteriores. Activity Las actividades son probablemente el elemento más común en una aplicación para Android. a los cuatro anteriores. Toda actividad se inicia como respuesta a un Intent.4. • Activity: Una actividad es cada una de las pantallas dentro de una aplicación. Hay que enfatizar. Cuando se lanza un Intent el sistema busca que actividades son capaces de dar respuesta a ese Intent y elige la más adecuada. sin embargo no es lo apropiado ya que tenemos los Services y Content Providers destinados 11 .- . Service: Un servicio es una tarea que se ejecuta durante periodos prolongados y no interacciona con el usuario. Pasamos ahora a tratar en mayor detalle cada uno de estos elementos constituyentes.xml. Registramos un Broadcast Receiver para escuchar y procesar Intents generales. • • • • ANATOMÍA DE UNA APLICACIÓN ANDROID Activity Intent Service Content Provider Hay cuatro bloques básicos que componen una aplicación Android: No todas las aplicaciones tienen porque tener los cuatro elementos. • • • Podríamos añadir un quinto elemento. Content Provider: Un proveedor de contenido es un almacén de información provisto de una API mediante la cual el usuario y aplicaciones pueden acceder al contenido sin necesidad de conocer los detalles del almacenamiento. Este archivo XML contiene la declaración de los componentes de la aplicación.Service ) y todo elemento que queramos implementar será una subclase del elemento original. 4.1. Broadcast Receiver. A través de la herencia evitamos volver a implementar aspectos comunes a todos los objetos del mismo tipo. sus capacidades y requisitos. como la hora o la entrada de un mensaje. Los elementos que componen la aplicación han de figurar en un archivo llamado AndroidManifest. En un sentido estricto.app. Las actividades mostrarán una interfaz de usuario basada en vistas ( Views ) y responderá a eventos. Es la responsable de presentar los elementos visuales y reaccionar a las acciones del usuario. la mayoría tendrá una combinación de ellos. mientras que podemos personalizar tanto como queramos su comportamiento sobrescribiendo los métodos de la clase padre. Antes de entrar a hablar en detalle de cada uno de los componentes hacemos una breve presentación de cada uno. Intent: se puede considerar como un deseo de realizar una tarea. que todos los elementos de Android son objetos y por tanto estos cuatro no son ninguna excepción.

por ejemplo una aplicación que gestiona mensajes puede tener una pantalla de configuración. Cuando una nueva actividad es iniciada la anterior es pausada y almacenada en una pila de actividades. conserva su estado y toda la información. no necesitamos preocuparnos de muchos de los aspectos relacionados con el funcionamiento de las actividades ya que por herencia nuestra actividad contendrá ya esa funcionalidad. De esta forma. Cada actividad se implementa como una única subclase que hereda de la clase android. Si es llamada de nuevo iniciará el ciclo completamente a diferencia de una actividad detenida.1 Ciclo de vida Las actividades son manejadas mediante una pila de actividades. Cada una de estas pantallas estará implementada por una actividad diferente. Detenida: si una actividad no es visible pasa a ser detenida. sin embargo ésta no forma parte de la actividad. Puesto que el sistema puede decidir finalizar una actividad pausada o detenida por motivos de memoria cada actividad es responsable de salvar su estado de forma que sea posible restaurarla tras haber sido pausada o detenida.Activity. Pausada: si la actividad ha dejado de estar en primer plano pero aún es visible ( una nueva actividad que no ocupa toda la pantalla o es traslucida ha sido llamada ) pasa a estar pausada. una tercera para elegir el contacto al cual se desea enviar el mensaje y otra más para navegar por los mensajes enviados y recibidos. aunque lo más probable es que sea finalizada por el sistema para liberar memoria y recursos.Desarrollo de aplicaciones en Android a esa finalidad. otra para escribir mensajes. De nuevo estamos reaprovechando código común a una familia de objetos haciendo uso de la herencia. View. facilitando en gran medida el desarrollo posterior. Para ello existen métodos de la clase. Hay que tener en cuenta que Android está diseñado para el campo de los teléfonos móviles y por tanto tiene en cuenta la más que probable escasez de memoria.1. Una actividad pausada se puede considerar completamente activa. Una actividad puede estar en cuatro estados: • • Activa: si la actividad está en primer plano en la pantalla. pero puede ser finalizada por el sistema en casos extremos de falta de recursos. Puede mantener activa la información sobre su estado. Todos los elementos gráficos y visuales se definirán dentro de una vista. De cualquier forma hay que remarcar que la actividad es responsable de mostrar la interfaz gráfica. De esta forma iremos navegando por las distintas pantallas de la aplicación. Sin embargo la actividad debe guardar su estado actual de ejecución de forma que cuando la actividad vuelva a ser la primera en la pila pueda recuperar el estado en el que estaba por última vez. Finalizada: una vez que la actividad ha completado su ejecución libera todos los recursos que estaba utilizando y finaliza el ciclo.app. Cualquier aplicación y actividad que no sea visible será detenida para liberar recursos. como son onSaveIntanceState() y onRestoreInstanceState(). siendo cada una de ellas una actividad. Cuando la nueva actividad termine. Ésto garantiza la separación del aspecto funcional del aspecto visual. por ejemplo al pulsar un botón. 4. la siguiente actividad en la pila es reactivada. se puede guardar el estado de la Actividad antes de hacerla vulnerable a ser finalizada por el sistema. de esta forma. la cual aún almacena su estado de ejecución a fin de recuperarlo cuando sea llamada de nuevo. • • Trabajo Teórico POO 12 . Normalmente una aplicación constará de varias actividades. y por tanto en la parte superior de la pila de actividades está activa y ejecutándose. Una actividad puede iniciar otra actividad.

podemos recurrir a otra actividad que gestiona mapas y posiciones. Si nuestra actividad necesita hacer uso de una posición en un mapa por ejemplo. No es posible reordenar o navegar por la pila de actividades. De esta forma estaremos haciendo uso de actividades externas que para el usuario aparecerán como integradas en nuestra aplicación. algunas de ellas posiblemente fuera de la aplicación original. que veremos posteriormente. De la misma forma puede iniciar otra de una aplicación externa. al igual que en cualquier pila solo podemos acceder y cerrar la actividad superior o crear una nueva encima.1. Es una pila de actividades que se han ido llamando sucesivamente. Ilustración 9 – Diagrama de estados del ciclo de vida de una actividad Como se vio anteriormente una actividad puede iniciar otra dentro de la misma aplicación.García et al.2 Tareas Una tarea es lo que el usuario percibe como una aplicación. solo necesitamos hacer uso de los Intents. 4. 13 Trabajo Teórico POO .

De esta forma podemos construir aplicaciones centradas en una única actividad y cuyo trabajo puede ser reaprovechado por otras aplicaciones. Cualquier aplicación puede lanzar su Intent sin necesidad de conocer ningún detalle sobre la aplicación que lo va a resolver. • Cada aplicación es responsable únicamente de su funcionamiento. el equivalente a una API. esta aportando una funcionalidad que el resto de aplicaciones ya no necesitan implementar. aislar dependencias y asegurar la reutilización de funcionalidades. 4. Por tanto su código será reutilizado por todas las aplicaciones que lo necesiten para ejecutar el Intent deseado. por ejemplo.1 Objeto Intent El objeto Intent se compone de tres partes: acción.Desarrollo de aplicaciones en Android El sistema Android permite iniciar varias tareas.VIEW.2. No hay interdependencia entre aplicaciones. Por otra parte hay una clase relacionada llamada IntentFilter. teniendo en cuenta los datos asociados al Intent. Cuando una aplicación registra su Intent Filter y por tanto se declara capaz de manejar una tarea. Los Intent e Intent Filters son una manera de encapsular tareas. • • Acción: es una cadena de texto completamente cualificada que indica la acción a realizar. Por ejemplo una actividad se puede declarar capaz de visualizar imágenes JPG pero no serlo para PNG. Un Intent describe lo que una aplicación desea que se haga. • • 4. Mientras un Intent es un deseo de hacer algo. toda la tarea se restaura y de nuevo la última actividad de la pila pasa a estar activa y accesible para el usuario. toda la tarea es minimizada mientras el usuario ejecuta otras aplicaciones. Una actividad puede declarar sus Intent Filters tan genéricos o específicos como desee.category. en el ejemplo anterior el sistema registraría la creación de un Intent y buscaría qué aplicaciones son capaces de resolverlo. Por ejemplo. cumpliendo así con una de las premisas básicas de la programación orientada a objetos. Intent e Intent Filters Una de las piezas claves de Android es la clase Intent. android.intent. • Trabajo Teórico POO 14 . por ejemplo. Categoria: metadatos referidos al Intent. Para ello crearía un nuevo Intent con la acción VIEW y añadiría como datos la URI ( Uniform Resource Identifier ) de la página web deseada. sabiendo que para realizar cualquier tarea que no sea de su ámbito únicamente debe lanzar un Intent. Adicionalmente puede incluir un conjunto de elementos opcionales. Cuando el usuario pulsa el botón HOME o BACK. Al volver. De esta forma. Por ejemplo. podría considerarse como declarar una necesidad.action.intent.2. categoría y datos. android.LAUNCHER nos indica que el Intent puede iniciar una aplicación si así es requerido Datos: están definidos content://contacts/123 en forma de un objeto URI. un Intent Filter es una declaración de las capacidades de una aplicación. una aplicación puede requerir visualizar una página web. Los Intents sirven como interfaz de comunicación entre aplicaciones. cualquier actividad puede ser reemplazada por otra que tenga sus mismos Intent Filter y este reemplazo será transparente para todos los procesos que usaban la funcionalidad original. la reutilización.

4. proporcionando unos métodos de forma que cualquier aplicación pueda acceder al contenido sin necesidad de conocer la implementación del almacenamiento. BroadcastReceiver. En este ejemplo la actividad desea ver los datos de contacto de la persona con ID 123 para lo cual lanza el Intent correspondiente. La actividad indica la tarea que desea realizar y el sistema asigna el Intent a la aplicación más apropiada. y Service. 4. cada vez que se emita el Intent el sistema elegirá el elemento más adecuado para procesarlo según nuestras preferencias. Como ya hemos dicho. archivos de configuración o cualquier otro soporte.xml. En el ejemplo anterior. sin embargo la reproducción en si estaría manejado por un servicio. el usuario podría regresar a la actividad que gestiona el reproductor para saltar la canción que está sonando.3. En cualquier momento una actividad puede asociarse a un servicio para modificar su comportamiento o detenerlo. el sistema toma nota de los componentes que pueden tratar los diversos Intents. Cada elemento <intent-filter> es parseado en un objeto IntentFilter. Un buen ejemplo sería un reproductor de música. 4. sin embargo tiene la capacidad de lanzar notificaciones para informar al usuario.2. La interfaz y el proceso de elegir y activar una lista de reproducción estaría manejado por una actividad. como pueden ser archivos. Cuando se instala el paquete. Cuando una actividad lanza un Intent. Sin embargo esto no es recomendable ya que estamos creando una dependencia innecesaria. en este caso se tratará de una invocación explícita. únicamente conociendo los métodos de acceso de ésta nueva API.2 Resolución de Intents Hay tres tipos de componentes Android que pueden registrarse para resolver Intents: Activity. Otra forma de proceder es que la actividad indique explícitamente el destinatario del Intent. ya que el usuario espera que la música siga sonando aunque lance nuevas actividades. Los servicios pueden ser clasificados en locales y remotos. En el ejemplo anterior el servicio probablemente sería local ya que no tenemos ningún interés en que otras aplicaciones puedan detener la reproducción o pasar canciones. Una vez registrados. con los campos indicados anteriormente. Service Un servicio es un proceso cuyo periodo de ejecución se extiende durante un tiempo largo y que carece de interfaz gráfica. bases de datos. Si por ejemplo estuviéramos interesados en que sonara una canción en concreto cuando iniciamos el lector de mensajes el servicio de reproducción de música sería remoto. Un proveedor de contenido define una interfaz que recubre el método de almacenamiento. De esta forma es mucho más sencillo compartir información con otras aplicaciones ya que proporcionan un nivel de abstracción respecto al 15 Trabajo Teórico POO . Un servicio local solo puede ser accedido por la aplicación que lo contiene. y el hecho de desinstalar el paquete del destinatario provocará errores en la aplicación emisora del Intent. un servicio carece de interfaz gráfica.4. cada aplicación puede optar por su propio mecanismo.García et al. normalmente se trata de una invocación implícita. Estos componentes se declaran capaces de tratar Intents registrando elementos <intent-filter> en el archivo AndroidManifest. Un servicio remoto permite a otras aplicaciones asociarse con él mediante el método bindService() para de esta forma tomar el control. Content Provider A la hora de almacenar datos.

De esta forma se lanzará el servicio en cuanto se encienda el teléfono. Algunos de los Intents que pueden recibir por parte del sistema son por ejemplo ACTION_TIME_CHANGED cuando el usuario cambia la hora del dispositivo. No vamos a entrar en detalles sobre la composición e implementación de las diversas opciones gráficas en View pero queremos remarcar esta separación entre el aspecto funcional de la aplicación. Una actividad puede lanzar Intents para Broadcast Receivers. En el caso de Broadcast Receivers... De esta forma podemos programar actividades y servicios como respuesta a eventos.ruta. 4. update(. que poseen una interfaz gráfica hacia el usuario y sin embargo la codificación del aspecto gráfico no se realiza dentro del objeto Actividad. o ACTION_PACKAGE_REMOVE cuando se desinstala un paquete.parse("content://com. al hablar de las Actividades. y el aspecto gráfico contenido en View.5.Desarrollo de aplicaciones en Android almacenamiento y todas las aplicaciones acceden a la información a través de unas funciones comunes para todos los proveedores de contenido.). Cuando una aplicación lanza un Intent. Esto es así porque poseen la función setContentView(View) mediante la cual muestran la interfaz almacenada en un objeto de tipo View. El Intent es lanzado al sistema y todo aquel registrado para recibirlo lo recibirá. Cada proveedor ha de definir su URI.). es la gestión de los contactos.. sin embargo es perfectamente posible hacer que el Broadcast Receiver ejecute una aplicación.). haciendo uso de las funciones get(. por ejemplo: public static final Uri CONTENT_URI = Uri. cualquier aplicación sabe como acceder a los datos e igualmente puede ofrecer datos a los que todos pueden acceder permitiendo a la vez una completa libertad a la hora de implementar el almacenamiento.. se puede acceder a los datos individuales mediante expresiones semejantes a las usadas en SQL. 4. todos aquellos que se hayan registrado para responder a un Intent serán notificados y por tanto serán iniciados con el Intent correspondiente. como la llegada de un mensaje de texto o una llamada. que viene ya implementado en cualquier sistema Android. A partir de aquí. Una forma de crear servicios que funcionen siempre que el teléfono está encendido es registrar un BroadcastReceiver que espere recibir el Intent BOOT_COMPLETED para lanzar el servicio. Al igual que los servicios carece de interfaz de usuario. Cualquier aplicación puede acceder a los datos de la agenda a través de la API del proveedor de contenido. pero en ese caso no será posible establecer permisos o niveles de seguridad. Broadcast Receivers La mejor forma de ver un Broadcast Receiver es como un servicio capaz de registrar Intents referidos a eventos generales. Otros Hemos mencionado. insert(.. ya que ofrecen un método de acceso a los datos contenidos ocultando cualquier detalle interno.).. la actividad. delete(.. una y solo una actividad será elegida para tratarlo. Se envía una consulta al proveedor de contenido y este devuelve un objeto cursor mediante el cual se pueden ir recolectando individualmente los datos. Los proveedores de contenido son un elemento muy útil de abstracción. Un claro ejemplo de proveedores de contenido. Otra particularidad es que el procesamiento de Intents no es exclusivo.6. De esta forma estamos mejorando la cohesión del sistema sin provocar dependencias. Esta separación es un Trabajo Teórico POO 16 .subruta/datos"). Se puede acceder a los datos contenidos en un proveedor de contenido a partir de su URI..

cada objeto es responsable de una única tarea y se comunica con los demás mediante funciones establecidas. En cualquier momento podremos modificar cualquier aspecto de la actividad o de la vista sin afectar a la otra parte. siempre que respetemos los canales de comunicación.García et al. elemento básico de la programación orientada a objetos. 17 Trabajo Teórico POO .

.

A su vez contiene otras carpetas para cada tipo. res/: contiene diversos recursos que se emplean en la aplicación. dimensiones.jar. libs/: mantiene los JARs ( Java ARchive es un tipo de archivo que permite ejecutar aplicaciones escritas en Java ) que la aplicación requiera para su ejecución. por ejemplo recursos. El fundamental es android. Es generado y modificado automáticamente por el IDE.apk. Guarda similitudes con un makefile.dex.xml: contiene una sentencia de comandos para compilar la aplicación e instalarla en un dispositivo. src/: guarda el código fuente de la aplicación. Manifiesto Es un archivo XML que describe e indica los componentes de la aplicación que se esté desarrollando. correspondiéndose cada una con uno de los recursos de la carpeta res/ y de la assets/).5.dex será el ejecutable. recursos o instrucciones de generación de una aplicación: • • AndroidManifest. build.ap_ que mantendrá los recursos de la aplicación. gen/: contiene ficheros Java autogenerados. El usado para crear aplicaciones que hagan uso de Google Maps es maps. siendo estas sus principales nodos ( etiquetas ) y propósitos: 19 . Por esa razón no se suele utilizar. El archivo classes. destacando R. etc… layout/: contiene los archivos XML que definen el diseño de las diferentes interfaces gráficas de la aplicación. bin/: guardará la aplicación ya compilada. pero estos pierden su formato original y necesitan de la clase AssetManager para su uso.- . Por ello se procederá a explicar a continuación cuales son los ficheros que contendrán el código. default. xml/: archivos XML con otros fines.java ( el cual contiene constantes numéricas.xml: es un archivo que describe la aplicación. Contendrá además las clases compiladas y al archivo *. • • • • • • El archivo que se requiere para la ejecución de la aplicación en el dispositivo móvil es el de extensión . siendo por tanto donde se alojan las subclases de activity creadas. No existe en Eclipse/ADT.jar. • assets/: sirve para guardar ficheros y datos. como fondo de un widget o como icono por ejemplo.1. a destacar: drawable/: permite añadir las imágenes que se desean usar en la aplicación. ESTRUCTURA DE UN PROYECTO Es muy importante saber que archivos componen un proyecto Android antes de dedicarse a escribir código como un loco. el manifiesto. Este es un fichero comprimido que contiene el .properties: contiene la configuración del proyecto. values/: ficheros XML donde se definen cadenas. y los recursos 5. menu/: especificaciones XML que definen menús. Se encuentra en el directorio fuente del proyecto.

Ocurre que a veces la aplicación pueda usar elementos o comportamientos de dicho nivel. que contendrá al resto. ya que sino se podría dar el caso de que una aplicación maligna tuviese permiso SEND_SMS y se dedicase a mandar mensajes de texto a otros terminales sin el conocimiento del usuario. • • Trabajo Teórico POO 20 . Por seguridad serán presentados al usuario durante la instalación por si quisiese denegarlos.com/apk/res/android" package="android. e incluso reemplazando partes que se han mejorado y quedan ahora obsoletas ( aunque la política empleada es la de mantener ambas partes para evitar la incompatibilidad de antiguas aplicaciones en nuevas versiones ). Las otras aplicaciones harán uso de cada permiso o de un grupo entero mediante <usespermission>.ACCESS_FINE_LOCATION" > • <permission>: Define nuevos permisos que otras aplicaciones requerirán para poder acceder a partes restringidas de esta. CAMERA…)..Desarrollo de aplicaciones en Android • <manifest>: Es el nodo padre o raíz. lo cual es muy importante en el desarrollo de un proyecto software.android. A dichos permisos se les podrá asignar un nivel de protección ( normal. Es por esto que mediante tres propiedades de esta etiqueta se controlan sobre que versiones de la plataforma puede ejecutarse una aplicación. Se usa también para guardar el número de versión de la aplicación si existiesen varias. android:minSdkVersion especifica el nivel mínimo de la API en el que puede funcionar ( si no se cumple la aplicación no comenzará a ejecutarse ) y posee el valor 1 por defecto y android:maxSdkVersion: el máximo ( aunque es habitual no declarar valor máximo ). <uses-sdk>: El desarrollo de la plataforma Android hace que vaya aumentando el número de niveles de la API. Indica el nombre del paquete que el desarrollador crea para su aplicación. Para esto se creará un <permission-group> al que se dará un nombre. <application>: Indica mediante sus propiedades ciertos metadatos de la aplicación como el título e icono. Es el nodo padre de <activity>. Este no es sin embargo el número de versión que se muestra a los usuarios de la aplicación. <provider> y <receiver> ( y estos a su vez contienen definiciones de <intentfilters> entre otros datos ). En ocasiones también se incluyen nuevos nodos y propiedades para el manifiesto. Este nodo especifica también si se está en modo debug o no.miaplicacion" android:versionCode="1" android:versionName="1. y después se asignará dicho nombre a la propiedad android:permissionGroup de <permission>.permission. <uses-permission android:name="android. READ_CONTACTS.0" > • <uses-permission>: Declara los permisos que la aplicación. da nombre al proceso sobre el que correrá la aplicación o asigna un tema visual común a todas las actividades. <manifest xmlns:android="http://schemas. … ) para saber si durante la ejecución se pueden conceder con directamente o mediante una nueva confirmación del usuario e incluso se podrán agrupar varios dentro de un mismo grupo. necesita ( algunos ejemplos son INTERNET. y así poder saber cual es la más reciente ( versionCode ). dangerous. android:targetSdkVersion indica el nivel de la API sobre el cual está diseñado para ejecutarse la aplicación ( nivel óptimo ). proveyendo estos nuevas clases y/o paquetes. en lugar de limitarse a los existentes en el nivel mínimo que limitan al programa. Por su parte. sino el indicado en versionName. <services>.

texto y reloj ) que posee como fondo una imagen añadida por el usuario a los recursos. <uses-library android:name="com. Sin embargo existen ciertas bibliotecas que no lo hacen automáticamente. en las que el usuario va disponiendo los widgets sobre la pantalla según le parezca y con las propiedades que desee. lo suyo es uno por cada activity ). como son el awt y los mapas de Google. siendo sin embargo las aquí mencionadas las de uso más común. Además el hecho de crear la interfaz apartada de las funcionalidades permite facilitar la separación de la vista y el modelo de datos. El principal motivo para hacer esto es que facilita la utilización de herramientas específicas de creación de modelos de GUI.García et al. Layout Aunque es posible usando el lenguaje Java instanciar y posicionar widgets a nuestra activity. • <activity>: indica múltiples propiedades de cada actividad. Son linkados por defecto. y solo es necesario importar los que se vayan a usar desde el código fuente.Actividad1” > <uses-library>: especifica una biblioteca compartida con la que el programa se ha de vincular. entre ellas las relacionadas con el multiproceso y la forma en que se mostrará la activity en la pantalla. 21 Trabajo Teórico POO .2.maps" > • Por supuesto existen otras muchas expresiones para describir la aplicación.google. Los paquetes android. Puede haber varias dentro de un <application>. Esta contiene otras clases estáticas ( una por tipo de recurso ) con identificadores para cada recurso ( layouts y widgets entre ellos ). Ilustración 10 – Herramienta de creación de GUIs En la imagen superior se observa que se ha creado una interfaz con tres widgets ( botón. <activity android:name = ". Para modificar la interfaz durante la ejecución necesitaremos del archivo R. incluso algunas usadas únicamente para el desarrollo y testeo de la aplicación.java que corresponde a una clase no heredable y autogenerada. permitiendo acceder a ellos desde el código Java de la aplicación. 5.android. la forma más común de realizar dicha tarea será usar un fichero XML denominado Layout ( pueden crearse varios. todo ello sin tener que programar puesto que el código sería simultáneamente generado por la herramienta usada.

5. p. } // […] } Ahora es muy sencillo poder hacer uso de los recursos en una aplicación. Estas propiedades pueden tomar tres valores: un valor numérico que indica los píxeles exactos. Por ejemplo se muestra como asignar el layout main ( el único que se ha creado ) a una clase activity.1 Contenedores Existen unos elementos llamados contenedores ( también denominados layouts. wrap_content que hace que el widget ocupe justo el tamaño que necesite. mientras que el número mínimo de columnas será igual al número de widgets de la fila más larga. o fill_parent para que el widget se expanda para ocupar todo el espacio que quede disponible en el contenedor. ej si quisiesemos a un widget A debajo y a la izquierda de otro B. Estos son los más comunes: • LinearLayout: Alinea a los widgets uno detrás de otro vertical u horizontalmente ( según se especifique en la propiedad android:orientation. public static final int TextView01=0x7f050001. ). Así pues en cada archivo xml usado para definir un modelo de interfaz gráfica se suelen incluir diferentes contenedores ( normalmente por lo menos uno que ocupe toda la pantalla y que contenga al resto ) que ajusten totalmente lo que aparece en la ventana respecto a lo que quiere el diseñador. } public static final class id { public static final int AnalogClock01=0x7f050004. TableLayout: permite crear una tabla invisible. Se puede ajustar también la distancia del widget a cada uno de los cuatro bordes del layout ( mediante las propiedades padding ).main).las propiedades android:layout_width y android:layout_height que especifican su anchura y altura.Desarrollo de aplicaciones en Android public final class R { public static final class attr { } public static final class drawable { public static final int fondo=0x7f020000. Basta con poner dentro del código de esa clase la siguiente línea: setContentView(R. public static final int Button01=0x7f050002.2. public static final int icon=0x7f020001. • • Trabajo Teórico POO 22 .layout. } public static final class layout { public static final int main=0x7f030000. RelativeLayout: dispone a cada widget basándose en su relación con el resto. . siendo posible que un widget ocupe varias celdas de una misma fila. Dichos contenedores pueden contener a su vez a otros. pero no deben confundirse con los archivo Layout ) que ayudan a posicionar y agrupar los widgets dentro de ellos. A su vez. Permite además configurar el tamaño de estos: cada widget dentro de un contenedor posee . este contenedor se compone de varios TableRow ( filas ) El número de filas será especificado por el programador. public static final int LinearLayout02=0x7f050003. y encima de C. public static final int LinearLayout01=0x7f050000.

Hay que resaltar además que Button hereda de TextView. • EditText: es una clase derivada de TextView empleada como texto editable.TextView01). Su objetivo es realizar una acción al ser pulsado. Esta última clase permite conocer cuál de todos los botones que agrupa es el que está marcado ( getCheckedRadioButtonId() ). En el siguiente ejemplo se observa como se procedería si se quisiese cambiar el texto “HELLO” de la Ilustración 10 por otro durante la ejecución: TextView texto = (TextView)findViewById(R.id. } }. así como desmarcar todos ( clearCheck () ). android:singleLine para controlar si el texto editable es de una o varias líneas. de la clase Activity. 5. • • 23 Trabajo Teórico POO .class). isChecked().2. Este código realiza el cambio mediante un intent. permite instanciar cualquier elemento de IG declarado en la carpeta de recursos. todos ellos con su correspondiente etiqueta XML y su clase. texto. yendo estos desde los más simples hasta algunos más complejos como las galerías de imágenes.2 Widgets Como ya se ha visto.setClass(Actividad.this. android:autoText para obtener ayuda ortográfica. • Button: es un botón del cual se pueden modificar todos los aspectos de su apariencia. RadioButton: hereda también de CompoundButton y se suelen usar en grupo mediante RadioGroup ( subclase de LinearLayout ). iniciando la nueva actividad y finalizando la actual. Para que sea esto lo que se ejecute al pulsar el botón es necesario añadir lo siguiente en la actividad: boton. intent.setText("HOLA"). Para ejemplificar esto se va a mostrar como se haría para que al pulsar un botón se pase de la activity actual a otra distinta.setOnClickListener(accionBoton). NuevaActividad. Se suele usar para identificar widgets adyacentes. para comprobar su estado. finish(). Ya en la segunda línea se ejecuta el cambio de texto haciendo uso de la instancia creada. En la primera línea se observa como el método findViewById(). el SDK de Android proporciona una colección de widgets. etc… CheckBox: casilla de verificación con dos estados: marcado y sin marcar. A continuación se listan algunos de los más comunes con ejemplos ilustrativos de código: • TextView: una etiqueta de texto no editable por el usuario. Hereda indirectamente de Button a través de CompoundButton. En el Layout se puede configurar mediante diversas propiedades para que actúe como el diseñador quiera: android:capitalize para poner o automáticamente la primera letra en mayúscula. La clase TextView posee los diferentes métodos para su modificación. lo que le permite usar los métodos de esta. Este sería el código de la acción a realizar: private OnClickListener accionBoton = new OnClickListener() { public void onClick(View v) { Intent intent = new Intent().García et al. startActivity(intent). siendo necesario hacer un casting a la clase correspondiente. Su clase tiene un método.

por ejemplo un diálogo de identificación o login que cuente con un una etiqueta. muchas veces esto no es suficiente. pero también se puede establecer basándose en el contenido de una URI. La reusabilidad de la funcionalidad de dichas interfaces suele ir de la mano de la Activity creada ( heredada ) para dicho propósito.Desarrollo de aplicaciones en Android • Image View: permite instar imágenes. Sería más útil poder reutilizar una interfaz compleja con alguna utilidad concreta que se suela repetir comúnmente en las aplicaciones. 5. que requiere que se le indique una referencia al Layout que se quiere incluir dentro de otro. Estas pueden corresponden a los recursos. usando el método SetImage().3 Reutilización A pesar de que Android ofrece una buena variedad de widgets con la posibilidad de poderlos modificar a gusto del diseñador.2. Esta necesidad ha sido satisfecha en los Layouts de Android mediante el uso del nodo <include>. un texto editable. volviéndolo a usar cuando se use dicha interfaz gráfica en otra aplicación. e incluso hacer alguna modificación sobre él. que tendrá su propio fichero .java. Trabajo Teórico POO 24 . Esto también es útil cuando existen varios Layouts con el mismo propósito pero diferentes estilos. un botón y una barra de progreso. pudiéndose incluir varios y hacer la elección de uso durante la ejecución.

6. displayZoomControls()… Guardar su estado: onSaveInstanceState(android. La clase MapView anteriormente comentada solo puede ser instanciada en una MapActivity que se haga cargo de la gestión de sus servicios y su eliminación. GOOGLE MAPS Uno de los servicios más populares de Google es el por todos conocidos Google Maps.1.google. Es una subclase de Activity. Sin embargo para poderlo utilizar es necesario obtener una clave de la API en la siguiente dirección: http://code. Clases básicas Existen tres clases que son fundamentales a la hora de construir una aplicación que haga uso del servicio ofrecido por Google Maps. onTouchEvent(.ViewGroup y puede ser añadida al Layout. No es raro por tanto que Android lo integre a través del paquete com. isSatellite().html y añadir el correspondiente permiso en el manifiesto.view. puesto que no se trata de un paquete estándar.6. Se obtiene como valor de retorno de MapView.- . no lo hace con las mismas características.1..com/android/add-ons/google-apis/mapkey. y dichos hilos deben ser guiados en conjunción con el ciclo de vida del MapActivity.1..android. Además..).os. Esto se debe a que depende de varios hilos para acceder a la red y el sistema de archivos en segundo plano. puesto que en las situaciones en las que uno más necesitará de un mapa que le permita guiarse no tendrá posibilidad de echar mano de su PC. … 6.. Estos son algunos de sus métodos: 25 . por lo que sus métodos y manejo es idéntico: creando una subclase a la medida de lo que necesite el desarrollador. Esta clase hereda de android.Bundle) Control de eventos: onSizeChanged(.2 MapActivity Es la clase principal que contendrá el código con el que se haga uso de los diferentes servicios ofrecidos por Google Maps. Resulta interesante hacer una mención a esta posibilidad que ofrece Android. setStreetView(boolean)… boolean Mostrar diferentes controles para hacer uso del mapa: setBuiltInZoomControls(boolean). 6. Posee métodos para realizar los siguientes cometidos: • • • • Controlar el modo de vista: setTraffic(boolean). puesto que a pesar de que existe en algunos otros sistemas. como desplazamientos o zoom. Únicamente se admite un MapActivity por proceso.1 MapView Representa un mapa gracias a la información que obtiene del servicio del Google Maps. 6. en caso contrario se pueden obtener resultados inesperados.google.3 MapController Gestiona el manejo de un mapa.maps.1. la utilidad que se le puede dar a GMaps se acrecenta al pasar de un ordenador de sobremesa a un dispositivo móvil.getController().).

actualizando el centro del mapa a todo lo que la animación parcial haya llegado. Ese código serviría para pintar sobre el mapa. shadow). El parámetro tomará un valor entre 1 ( el más lejano ) y 21 ( el más cercano. punto. mapView. Para el ejemplo propuesto este sería el código del Overlay: public class Simbolo extends Overlay { public void draw(Canvas canvas.drawCircle(punto. se obtiene el centro del mapa y se traduce a píxeles. punto.RED ). La clase GeoPoint representa un punto geográfico y su constructor recibe dos enteros: la latitud y la longitud multiplicadas por 1E6. dibujoExter).y. Devuelve el nivel del zoom al que finalmente se ha situado.toPixels(geo. El modo de uso es por herencia: se debe de hacer una subclase y crear las instancias de esta que sean necesarias.drawCircle(punto.YELLOW ). boolean shadow) { super. Posteriormente serán añadidas al mapa insertándolas en la lista devuelta por MapView. para posteriormente proceder a dibujar los dos círculos sobre dicho centro mediante el objeto Canvas pasado por parámetro. 25.getMapCenter().setColor( Color. dibujoInter).draw(canvas.y. Ahora solo queda proceder a la creación del mapa dentro de un MapActivity: Trabajo Teórico POO 26 .Desarrollo de aplicaciones en Android • animateTo (GeoPoint): Mueve el mapa hasta el punto dado como parámetro. pintandose dos círculos concéntricos encima de esta ( se omiten del código los paquetes importados ). • • 6. stopAnimation(boolean): Para cualquier animación que esté en progreso en ese momento.getOverlays(). estando solo disponible en ciertas ubicaciones ).2. canvas. dibujoInter. Esta permite dibujar elementos sobre el mapa y gestionar los eventos que sobre el dibujo acontezcan. Paint dibujoInter = new Paint(). Paint dibujoExter = new Paint(). int setZoom(int): Permite modificar el nivel de zoom.setColor( Color. Para esto es necesario conocer la existencia de la clases Overlay del paquete de GMaps. GeoPoint geo = mapView. MapView mapView. Point punto = new Point(). Para su instanciación requiere de un objeto gráfico de la clase android.x. } } Se explica brevemente: se instancia un objeto Paint para cada círculo. 10. punto). Ejemplo Se presenta ahora un sencillo ejemplo en el cual se va a obtener un mapa sobre la ciudad de Salamanca .getProjection(). mapView.Canvas que será el que sea pintado en el MapView.x.graphics. dibujoExter. canvas.

public void onCreate(Bundle savedInstanceState) { super.main).layout.669643. vistamapa. setContentView(R.García et al.add(simb). controller.setBuiltInZoomControls(true). (int) (lon*1E6) ). vistamapa = ( MapView )findViewById(R.draw(canvas. controller. public class mapa extends MapActivity { private MapView vistamapa = null. simb.960659. double lat = 40.getController(). vistamapa.onCreate(savedInstanceState). controller = vistamapa. double lon = -5.setZoom(17). true).mapview). private MapController controller = null.id.getOverlays(). Canvas canvas = new Canvas(). vistamapa. } } Este sería el resultado obtenido: Ilustración 11 – Ejemplo de aplicación creada mediante el uso de Google Maps 27 Trabajo Teórico POO . punto = new GeoPoint( (int) (lat*1E6). private GeoPoint punto = null. Simbolo simb = new Simbolo().setCenter(punto).

.

Sus elementos más relevantes son: • • Location: clase que representa una localización geográfica en un tiempo concreto. 7. Para poder usarlo es necesario otorgar el permiso ACCESS_FIND_LOCATION a la aplicación. Que las aplicaciones desarrolladas no colaboren convenientemente con el resto de aplicaciones y el S. Supongamos por ejemplo que un empresario necesita una aplicación de gestión en su móvil. donde el primer parámetro sirve para especificar la longitud y latitud en grados.2. con un solo click y sin tener que abandonar la aplicación.1. pero ahora además también podrán ser ayudados a ello. como pintar la posición del usuario en un mapa o transmitirla a otros dispositivos. o disparar un evento específico cuando el dispositivo entra en la proximidad de una zona geográfica determinada.7. y viceversa. Location Es el paquete que provee las clases necesarias para el manejo de GPS en Android.- .O. o que haya fugas de memoria que bloqueen el teléfono completamente. Es por esto que Android incorpora un paquete. puesto que ese hecho le añadirá más funcionalidad: los usuarios pueden enviar y recibir llamadas. Android en la mayoría de los casos se ejecutará sobre un teléfono móvil. Además es posible simular un GPS NMEA-compatible en el emulador. Su sintaxis es la siguiente: geo <fix|nmea>. Geocoder: clase que permite traducir entre direcciones físicas y coordenadas en latitud y longitud. LocationManager: clase para gestionar el dispositivo de localización. Dicha aplicación podría incorporar la posibilidad de poder llamar o mandar un mensaje directamente desde esta a los clientes y/o proveedores.telephony. FACILIDADES DE ANDROID Este capítulo pretende mostrar al lector algunos de los paquetes que Android provee para controlar el dispositivo para que pueda hacerse una idea de las posibilidades de esta plataforma. 7. Permite actualizaciones periódicas de la situación geográfica del dispositivo. android. Así por ejemplo para conocer la situació actual se utiliza LocationManager.O. e incluso la altitud en metros si fuese necesario. No optimizar los recursos de forma que se agote la batería en poco tiempo ( el usuario no podría seguir usando el teléfono ). Esto puede suponer ciertos problemas: • • Si la aplicación hace uso de un alto porcentaje de CPU sería un impedimento de cara a que se puedan recibir llamadas. 29 . dado que la consola proporciona un comando que permite establecer la posición geográfica actual.getLastKnownLocation("gps"). mientras que el segundo permite enviar sentencias NMEA 0183. LocationListener: interfaz que permite implementar una clase que captura los eventos asociados al dispositivo de localización. Telephony No conviene que nos olvidemos que el S. por ejemplo no desvaneciéndose a segundo plano cuando hay una llamada entrante. etc… • Pero no todo es malo. que permite controlar la información del servicio telefónico y su manipulación: acceder a los contactos. • • Tiene múltiples utilidades.

Desarrollo de aplicaciones en Android dividir un texto en varios SMS para que puedan ser enviados. Esta forma es similar a la usada para el GPS o el servicio wifi.SensorManager que provee métodos para el reconocimiento y la creación de gestos que el usuario haga con el móvil ( por ejemplo un sacudido ). Una vez instanciada. etc… Pero el método más importante es getCallState(). Este devuelve una constante que indica el estado de llamada del dispositivo. aunque provee un comando sms para simular envío de mensajes hacia el emulador. podremos hacer uso de sus numeros métodos. CALL_STATE_RINGING: Llamada solicitada. como ya llevan tiempo haciendo otras empresas como Apple en su Ipod y Nintendo con la Wii. 7. etc… El paquete en cuestión contiene varias clases para realizar dichas operaciones.google. La forma de obtener un objeto de esta clase es la siguiente: TelephonyManager telefono=(TelephonyManager) getSystemService(Context. getNetworkOperatorName() devuelve el nombre del operador de telefonía utilizado. para no quedarse atrás. Android. CALL_STATE_OFFHOOK: Llamada en progreso. A modo de curiosidad se le ofrece al lector visitar el siguiente enlace en el que se explica un proyecto que se está desarrollando para poder simular dichos gestos mediante el emulador usando el ratón.TELEPHONY_SERVICE). Por ejemplo getLine1Number() retorna el número de teléfono propio.3. Reconocimiento de gestos Algunos de los nuevos dispositivos móviles ahora incorporan acelerómetros y brújula. ha desarrollado la clase android.com/p/openintents/wiki/SensorSimulator Trabajo Teórico POO 30 . A pesar de todo. el emulador no está preparado aun para simular muchas de las opciones del paquete. valor que deberá tenido en cuenta antes de realizar otras operaciones. realizar llamadas. Puede ser: • • • CALL_STATE_IDLE: El teléfono no está en uso. aunque la que se encarga de regular y controlar el dispositivo es TelephonyManager.hardware. gestionar el envío y recepción de mensajes. habrá que hacer la correspondiente adición en el manifiesto. principalmente para los videojuegos. cometido que hasta ahora no había sido posible de ninguna forma: http://code. supliendo la falta de teclado de los móviles táctiles con movimientos de este. Esta tecnología puede tener muchas más utilidades de las que parece. Teniendo en cuenta además que se trata de un servicio.

la gestión de contactos o la navegación web. Reutiliza un idioma de programación muy extendido. siendo las últimas versiones muy estables y extendidas. De esta forma. A pesar de que las primeras versiones contenían abundantes errores.- . robusto y con abundante documentación como es Java. cualquier persona puede crear aplicaciones según su necesidad. CONCLUSIONES El sistema operativo Android es un buen candidato para establecerse como opción principal dentro del sector de teléfonos móviles. Reúne múltiples características para convertirlo en la opción preferida. Es de código abierto.8. Incentivando (e incluso imponiendo) el uso de la reutilización de código. de forma que tareas recurrentes en múltiples aplicaciones sean siempre resueltas de la misma forma. Optimiza la gestión de recursos. proporcionando al usuario una interfaz cohesionada. 31 . buscando la máxima optimización posible de los recursos disponibles. estando la mayoría de ellas incluidas en las librerías de Android. sus múltiples niveles de abstracción que permiten modificar o reemplazar fácilmente sus componentes por separado y naturalmente el enfoque hacia un entorno de teléfonos móviles. probablemente debidos a una publicación prematura. En nuestra opinión lo que hace de Android un producto a tener muy en cuenta es el buen diseño de su arquitectura y funcionamiento. Permite al programador concentrarse en una tarea sabiendo que el resto están cubiertas por otras aplicaciones. la separación de funcionalidades. todas estas funcionalidades adicionales quedan integradas en las aplicaciones propias. Por todas estas razones auguramos un gran futuro para Android. Por último cabe destacar el magnífico recurso que es la clase Intent. adecuándose a dispositivos de escasa memoria y procesador como son los teléfonos móviles. como pueden ser el manejo de mapas. con el paso del tiempo el sistema ha madurado.

.

L ( 2009 ): Beginning Android Hashimi.com/index.maps: http://code.com/ Wikipedia: http://es. Ed ( 2008 ): Hello Android Gramlich.google.org/ Kronox: http://kronox. Reto ( 2009 ): Professional Android Application Development Burnette.google.org/ Androlib: http://www.com/ Eliax: http://eliax.android.android.- .cfm?post_id=4563 Google Mobile: http://www. Mark.html * Último acceso a todas las direcciones webs: 15 de Abril de 2010.google. y Komatineni .Bibliografía • • • • • • • • • • • • • Murphy. 33 . Sayed Y.com/p/openintents/w/list Package com.google. Nicolas: AndBook Android Developers: http://developer.androlib.wikipedia.com/mobile/maps/ OpenIntents: http://code. Satya ( 2009 ): Pro Android Meier.com/intl/es-ES/android/addons/google-apis/reference/com/google/android/maps/package-summary.

You're Reading a Free Preview

Descarregar
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->