You are on page 1of 129

UNIVERSIDADDEALMERA

ESCUELAPOLITCNICASUPERIOR(EPS)

Ingeniero enInformtica (Plan 1999)

FacebookTourism. Desarrollo de una aplicacin para Android.


Autor: Fernando Jess Fernndez Carrillo Director: Antonio Leopoldo Corral Liria

Agradecimientos
En primer lugar me gustara agradecer a mis padres el apoyo prestado durante estos aos, y sobre todo por no dejarme tirar la toalla cuando las cosas eran difciles. A mis hermanos, Virtudes y Juan Carlos, por ayudarme siempre que los he necesitado. A todos mis amigos y compaeros de clase por la ayuda y el apoyo mostrado, en especial a Juan Jos Lozano y Luis Snchez, que han estado ah siempre. Para finalizar y no porque sea menos importante, a Antonio Corral, que aunque estaba muy ocupado, siempre encontr tiempo para ayudarme con el proyecto.

A todos vosotros, gracias.

Resumen
El proyecto consiste en desarrollar una aplicacin para Android llamada Facebook-Tourism. Esta aplicacin permitir al usuario encontrar los lugares que les gustan a aquellas personas que tiene agregadas como amigos en Facebook y mostrarlo en el mapa con la ruta ms corta hasta llegar a l. Adems, mostrar tambin qu usuarios de dicha aplicacin y que son amigos de l se encuentran cerca mostrando su posicin y una ruta. El objetivo de la aplicacin es permitir al usuario encontrar que lugares gustaron a algn amigo, evitando as sorpresas desagradables al ir a algn lugar en el que trataron mal al cliente o no es como se haba anunciado. Durante esta memoria se explicar la situacin actual de las distintas plataformas mviles que hay en el mercado y una vez que se haya expuesto la situacin de las plataformas de la competencia nos centraremos en Android. De Android se hablar extensamente, explicando su historia, arquitectura, componentes y caractersticas. Con esto se pretende sentar las bases de conocimiento sobre Android antes de comenzar con el desarrollo de la aplicacin Facebook-Tourism. Una vez sentadas las bases necesarias, se expone todo el proceso de diseo, desarrollo e implementacin de la aplicacin Facebook-Tourism, incluyendo pruebas realizadas y posibilidades de trabajo futuro. La aplicacin Facebook-Tourism utiliza las APIs de Google y de Facebook como pilares para su funcionamiento, por lo que tambin se explicarn en la medida de lo posible. Para localizar los lugares que les gustan a los amigos de Facebook que se encuentran cerca del usuario se utiliza, por un lado, el sistema de posicionamiento global (GPS) para obtener la posicin del usuario actual, con esa posicin se busca que lugares se encuentran cerca del usuario y se cruzan esos resultados con los lugares que le gustan al usuario y que se han obtenido realizando consultas con la API de Facebook. En caso de obtener resultados validos, se le muestra un aviso al usuario indicndole que se encuentra cerca de un lugar que le gusta a alguno de sus amigos de Facebook, cuando el usuario quita ese aviso de la pantalla, en el mapa se carga la ruta para llegar andando desde la posicin del usuario hasta el lugar indicado. Por otro lado, la aplicacin muestra que usuarios de Facebook-Tourism se encuentran cerca, y al igual que con los lugares, muestra un aviso para llegar desde la posicin del usuario hasta un amigo. Para calcular que amigos se encuentran cerca del usuario de la aplicacin, se calcula en dos fases. La primera fase se realiza en el servidor y se encarga de transmitir a la aplicacin, que usuarios se encuentran a menos de 500 metros a la redonda (sin importar si son amigos o no). La segunda fase se realiza en la aplicacin, cuando sta recibe los datos del servidor, comprueba que ste sea un amigo, y en caso de serlo calcula la ruta para llegar a l, si esta ruta es menor de 500 metros, entonces se genera un aviso que muestra un mensaje por pantalla indicando al usuario que un amigo se encuentra cerca. Cuando el usuario cierra ese mensaje, entonces se muestra la ruta en el mapa para llegar desde la posicin del usuario hasta la posicin del amigo en cuestin.

ndice
Introduccin ............................................................................................................... 9 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 1.7. 1.8. 1.9. 2.1. 2.2. Objetivos................................................................................................... 10 mbito del trabajo .................................................................................... 11 Plan de Trabajo ......................................................................................... 11 Metodologa .............................................................................................. 12 Herramientas ............................................................................................. 12 Motivacin ................................................................................................ 13 Temporizacin .......................................................................................... 13 Conocimientos Adquiridos ....................................................................... 13 Estructura de la memoria .......................................................................... 13 Introduccin .............................................................................................. 15 iOS ............................................................................................................ 16 Estado actual de la plataforma .......................................................... 19 Plataforma de distribucin ................................................................ 20 Estado actual de la plataforma .......................................................... 21 Plataforma de distribucin ................................................................ 22 Estado actual de la plataforma .......................................................... 24 Plataforma de distribucin ................................................................ 24 Estado actual de la plataforma .......................................................... 26 Plataforma de distribucin ................................................................ 27 Estado actual de la plataforma .......................................................... 29 Plataforma de distribucin. ............................................................... 30

Tecnologas mviles ................................................................................................ 15

2.2.1. 2.2.2. 2.3. 2.3.1. 2.3.2. 2.4. 2.4.1. 2.4.2. 2.5. 2.5.1. 2.5.2. 2.6. 2.6.1. 2.6.2. 2.7. 3.1. 3.2. 3.3. 3.4.

Symbian .................................................................................................... 21

Web-OS .................................................................................................... 23

Windows-Phone ....................................................................................... 25

Blackberry OS .......................................................................................... 28

Conclusiones y valoracin personal de las tecnologas ............................ 31 Introduccin .............................................................................................. 33 Historia de Android .................................................................................. 33 Historial de actualizaciones ............................................................... 34 Caractersticas de Android........................................................................ 35 Arquitectura de Android ........................................................................... 36 Linux Kernel ..................................................................................... 37 3

Plataforma Android ................................................................................................. 33

3.2.1.

3.4.1.

3.4.2. 3.4.3. 3.4.4. 3.4.5. 3.5. 3.6.

Libraries ............................................................................................ 38 Android Runtime ............................................................................... 38 Application Framework..................................................................... 38 Aplications ........................................................................................ 39

Android SDK ............................................................................................ 39 Estructura de una aplicacin de Android .................................................. 40 Activity .............................................................................................. 40 Listeners ............................................................................................ 42 Servicios ............................................................................................ 42 Content Provider ............................................................................... 42 3.6.1.1. Intent ............................................................................................ 41

3.6.1. 3.6.2. 3.6.3. 3.6.4. 3.7.

3.6.4.1. Android Manifest ......................................................................... 42 Aplicaciones en Android .......................................................................... 43 Tareas ................................................................................................ 43 Procesos ............................................................................................. 44 Hilos .................................................................................................. 45 3.7.1. 3.7.2. 3.7.3. 3.8. 3.9. 3.10. 4.1. 4.2. 4.3. 4.4. 4.5.

Recursos ................................................................................................... 45 Herramientas de desarrollo ....................................................................... 46 Conclusiones ......................................................................................... 46 Introduccin .............................................................................................. 49 Aplicacin Location GPS ......................................................................... 49 Google ...................................................................................................... 53 API Google Maps .............................................................................. 54 API Facebook .................................................................................... 58 Arquitectura de la aplicacin............................................................. 59 Android Manifest .............................................................................. 60 Permisos ............................................................................................ 62 Interfaz de la aplicacin .................................................................... 67 Archivos XML .................................................................................. 69 Geo localizacin ................................................................................ 71 Mapas ................................................................................................ 72 Servidor ............................................................................................. 72 Base de datos ..................................................................................... 73 Facebook ................................................................................................... 56 Facebook-Tourism .................................................................................... 58

Aplicacin Facebook-Tourism ................................................................................ 49

4.3.1. 4.4.1. 4.5.1. 4.5.2. 4.5.3. 4.5.4. 4.5.5. 4.5.6. 4.5.7. 4.5.8. 4.5.9.

4.5.10. Diagrama de clases informal............................................................. 73 4

4.5.11. Diagrama de clases formal ................................................................ 74 4.5.12. Diagramas de secuencia .................................................................... 76 4.5.12.1. Actividad conectar ..................................................................... 76 4.5.12.2. Actividad registrarse .................................................................. 76 4.5.12.3. Buscar un amigo ........................................................................ 77 4.5.12.4. Buscar un lugar .......................................................................... 77 4.5.13. Activity Principal .............................................................................. 78 4.5.14. Activity de Mapas ............................................................................. 81 4.5.15. Clase TratamientoJSON ................................................................... 83 4.5.16. Clase Intereses .................................................................................. 83 4.5.17. Clase Lugares .................................................................................... 83 4.5.18. Clase R .............................................................................................. 83 4.5.19. Problemas encontrados y soluciones propuestas .............................. 83 4.6. Pruebas ..................................................................................................... 85 Localizacin de lugares ..................................................................... 85 Localizacin de amigos ..................................................................... 86 4.6.1. 4.6.2.

4.6.2.1. Amigos fuera del radio ................................................................ 86 4.6.2.2. Amigos dentro del radio, pero demasiado lejos ........................... 86 4.6.2.3. Amigos cerca ............................................................................... 86 4.7. 5.1. 5.2. Conclusiones............................................................................................. 87 Conclusiones............................................................................................. 89 Lneas futuras ........................................................................................... 90 Conclusiones y trabajo futuro .................................................................................. 89

Bibliografa .............................................................................................................. 92 ANEXOS ................................................................................................................. 95 ANEXO I: Instalacin del SDK de Android ....................................................... 95 ANEXO II: Creacin de un nuevo proyecto Android ....................................... 100 ANEXO III: Creacin de un dispositivo virtual ................................................ 103 ANEXO IV: Obtener una API Key para Google Maps .................................... 106 ANEXO V: Obtener una API Key para Facebook ............................................ 107 ANEXO VI: Manual de usuario de la aplicacin .............................................. 109 ANEXO VII: Tutorial Location-GPS ................................................................ 113

ndice de figuras
Figura 1: Cuota de Mercado .................................................................................... 16 Figura 2: Capas iOS 4.0........................................................................................... 16 Figura 3: iCloud ....................................................................................................... 20 Figura 4: iTunes ....................................................................................................... 20 Figura 5: Logo AppStore ......................................................................................... 21 Figura 6: Logo Symbian .......................................................................................... 21 Figura 7: Symbian^3 ............................................................................................... 22 Figura 8: Men Web-OS ......................................................................................... 23 Figura 9: HP App Catalog ....................................................................................... 25 Figura 10: Windows Phone 7 .................................................................................. 26 Figura 11: MarketPlace ........................................................................................... 28 Figura 12: Inicio Blackberry ................................................................................... 29 Figura 13: Application Center ................................................................................. 30 Figura 14: Distribucin del SO................................................................................ 35 Figura 15: Arquitectura Android ............................................................................. 37 Figura 16: Ciclo de vida de un Activity .................................................................. 41 Figura 17: Android Manifest en XML .................................................................... 43 Figura 18: Pila de procesos...................................................................................... 45 Figura 19: Location GPS ......................................................................................... 50 Figura 20: Posicin localizada................................................................................. 51 Figura 21: Seal no encontrada ............................................................................... 51 Figura 22: Documento XML de fuentes .................................................................. 51 Figura 23: Permisos ................................................................................................. 52 Figura 24: Actualizacin GPS ................................................................................. 52 Figura 25: Logo de Google...................................................................................... 53 Figura 26: Javascript API ........................................................................................ 54 Figura 27: Flash API ............................................................................................... 55 Figura 28: Google Earth API................................................................................... 55 Figura 29: Static Maps API ..................................................................................... 55 Figura 30: Servicios web API.................................................................................. 56 Figura 31: Maps Data API....................................................................................... 56 Figura 32: Logo Facebook....................................................................................... 57 Figura 33: Arquitectura de la aplicacin ................................................................. 59 Figura 34: Manifest ................................................................................................. 60 Figura 35: Application ............................................................................................. 61 Figura 36: Permissions ............................................................................................ 61 Figura 37: Cdigo XML .......................................................................................... 62 Figura 38: Ventana Principal ................................................................................... 68 Figura 39: Identificacin ......................................................................................... 68 Figura 40: Ventana del Mapa .................................................................................. 69 Figura 41: Mapa.xml ............................................................................................... 70 Figura 42: Main.xml ................................................................................................ 70 Figura 43: Strings.xml ............................................................................................. 71 Figura 44: LocationManager ................................................................................... 71 Figura 45: getLastKnowLocation ............................................................................ 71 Figura 46: requestLocationUpdates ......................................................................... 71 Figura 47: Mapa ...................................................................................................... 72 Figura 48: Usando librera ....................................................................................... 72 6

Figura 49: Capas de un mapa .................................................................................. 72 Figura 50: Contenido Tabla amigos ........................................................................ 73 Figura 51: Definicin de la tabla amigos ................................................................ 73 Figura 52: Diagrama de clases informal .................................................................. 74 Figura 53: Diagrama de clases formal ..................................................................... 75 Figura 54: Diagrama secuencia conectar ................................................................. 76 Figura 55: Diagrama de secuencia registrarse ......................................................... 76 Figura 56: Diagrama Secuencia buscar amigo ........................................................ 77 Figura 57: Diagrama de secuencia buscar lugares .................................................. 78 Figura 58: Cdigo Principal (I) ............................................................................... 79 Figura 59: Cdigo Principal (II) .............................................................................. 79 Figura 60: Cdigo Principal (III) ............................................................................. 80 Figura 61: Cdigo Principal (IV) ............................................................................ 81 Figura 62: Cdigo Mapas (I) ................................................................................... 81 Figura 63: Cdigo Mapas (II) .................................................................................. 81 Figura 64: Cdigo Mapas (III) ................................................................................ 82 Figura 65: Cdigo Mapas (VI) ................................................................................ 82 Figura 66: Lugar encontrado ................................................................................... 86 Figura 67: Amigo encontrado .................................................................................. 87 Figura 68: Descarga SDK ........................................................................................ 95 Figura 69: Ruta instalacin ...................................................................................... 95 Figura 70: Eleccin de paquetes .............................................................................. 96 Figura 71: Trminos de licencia .............................................................................. 96 Figura 72: Adicin de repositorio ADT .................................................................. 97 Figura 73: Seleccin de tems.................................................................................. 97 Figura 74: Aceptacin de licencia ........................................................................... 98 Figura 75: Eleccin de ruta de instalacin .............................................................. 98 Figura 76: Trminos de licencia .............................................................................. 99 Figura 77: Seleccin de proyecto .......................................................................... 100 Figura 78: Especificaciones del proyecto .............................................................. 101 Figura 79: Creacin de un documento XML ......................................................... 102 Figura 80: Administracin dispositivos virtuales .................................................. 103 Figura 81: Configuracin nuevo dispositivo ......................................................... 104 Figura 82: Confirmacin ....................................................................................... 104 Figura 83: Lista de dispositivos virtuales .............................................................. 105 Figura 84: Generacin de certificado .................................................................... 106 Figura 85: Clave generada ..................................................................................... 106 Figura 86: Registro de aplicacin .......................................................................... 107 Figura 87: Datos de la aplicacin .......................................................................... 107 Figura 88: Generando certificado .......................................................................... 108 Figura 89: Generacin de Key............................................................................... 108 Figura 90: Descarga de API .................................................................................. 108 Figura 91: Instanciacin Facebook ........................................................................ 108 Figura 92: Men Android ...................................................................................... 109 Figura 93: Inicio de la aplicacin .......................................................................... 109 Figura 94: Identificacin Facebook ....................................................................... 110 Figura 95: Ventana Principal ................................................................................. 110 Figura 96: Men Amigos....................................................................................... 111 Figura 97: Men Lugares ...................................................................................... 111 Figura 98: Registro en Facebook ........................................................................... 112 7

Figura 99: Permisos GPS....................................................................................... 115 Figura 100: Creacin de interfaz ........................................................................... 115 Figura 101: Creacin de la clase ........................................................................... 115 Figura 102: Cdigo de la clase .............................................................................. 116 Figura 103: Tratamiento GPS ................................................................................ 116 Figura 104: Cdigo thread ..................................................................................... 117 Figura 105: Location Listener ............................................................................... 117 Figura 106: Handler ............................................................................................... 118 Figura 107: Pantalla del Activity........................................................................... 118 Figura 108: Modificacin de la clase .................................................................... 118 Figura 109: Widget mapa ...................................................................................... 119 Figura 110: keytool................................................................................................ 119 Figura 111: Uso de la API ..................................................................................... 119 Figura 112: Mostrar posicin en el mapa .............................................................. 120 Figura 113: Clase Overlay ..................................................................................... 121 Figura 114: Posicin mostrada en el mapa ............................................................ 122 Figura 115: Diseo del layout ............................................................................... 123 Figura 116: Clase friendlist ................................................................................... 123 Figura 117: Clase friendsAdpater .......................................................................... 124 Figura 118: Pantalla del ActivityList .................................................................... 125 Figura 119: Creacin del men ............................................................................. 125 Figura 120: Seleccin de men ............................................................................. 126 Figura 121: Pantallas del men y sub-men.......................................................... 126 Figura 122: Especificacin para el men contextual ............................................. 126 Figura 123: Rescritura del men ........................................................................... 127 Figura 124: Especificacin de acciones ................................................................ 127 Figura 125: Ejemplo de men contextual .............................................................. 128

Introduccin
Las redes sociales ha supuesto una revolucin en los ltimos aos en lo que la utilizacin y concepcin de Internet se refiere. Hace unos aos, la manera ms habitual de comunicarse sobre Internet eran las aplicaciones de mensajera instantnea y los emails, lo cual sola limitar los contactos a personas cercanas o conocidas. Con la entrada de las redes sociales, el nmero de contactos por usuario ha crecido exponencialmente, se ha motivado el uso de grupos y las comunicaciones han evolucionado. Por otro lado, las aplicaciones mviles tambin han sufrido algunos cambios. Anteriormente, los mviles se usaban para llamar o mandar mensajes de texto. Gracias a la evolucin del hardware, el rango de uso se ha ampliado a varios campos, como el audiovisual y la navegacin por Internet. Por lo tanto, no es de extraar que las redes sociales aparezcan en los mviles, dado que dotan a stas de una visin ms realista de su uso que es el mantener en contacto a grupos de personas estn donde estn.

En este proyecto se va a crear una aplicacin para el sistema operativo Android (Facebook-Tourism), que nos permita localizar los lugares favoritos de nuestros amigos en Facebook[39], adems, tambin nos informar cuando estemos cerca de un amigo y nos mostrar la ruta para llegar al lugar indicado por la aplicacin. Con esta aplicacin se pretende que, de una forma sencilla, el usuario pueda localizar a sus amigos y ser localizado por estos, adems, al mostrar los lugares favoritos de stos, podemos evitar sorpresas desagradables cuando visitamos un lugar. Para conocer la posicin del usuario de la aplicacin, utilizaremos el sistema GPS y se descartar la localizacin basndose en la cobertura 3G por imprecisa. La plataforma Android est basada en Linux, y aunque originalmente se dise para dispositivos mviles (Smartphone), actualmente se puede encontrar este sistema operativo en PCs, notebooks, tabletas, etc. Al estar basado en software libre, es de cdigo abierto, por lo que el cdigo fuente est disponible para todos los usuarios. Por ltimo, al utilizar la API de Facebook [42] con los permisos correspondientes podemos conectarnos y obtener los datos que tendramos si accediramos por un navegador web, lo que facilita el acceso al listado de amigos y a los lugares que les gustan.

1.1. Objetivos
Los objetivos a lograr en este proyecto son los siguientes: Conocer las tecnologas mviles actuales. En primer lugar vamos a profundizar en los sistemas operativos actuales destinados a dispositivos mviles. En esta fase, se estudiarn las principales caractersticas de iOS (MAC), Symbian (Nokia), Windows-Phone 7 (Microsoft), Blackberry (RIM), Web-OS (HP) y Android [47] (Google, Motorola, LG, etc.). Nos vamos a centrar solo en estos seis puesto que son los que tienen la mayor cuota de mercado. Profundizar en Android [46]. Una vez hecha una primera aproximacin a los sistemas operativos de los dispositivos mviles nos vamos a centrar en las caractersticas de Android, y en los requisitos necesarios para desarrollar sobre l. En resumen, al final esta fase tendremos que ser capaces de poder desarrollar aplicaciones para Android. Crear una aplicacin mvil sencilla [45]. sta es la primera toma de contacto con el SDK de Android, con esta aplicacin se pretende familiarizarse con la estructura de un programa de Android, usar los perifricos hardware del mvil, etc. Familiarizarse con la API de Facebook [44]. Puesto que la aplicacin FacebookTourism utiliza el listado de amigos del usuario de Facebook, es necesario familiarizarse con la API de Facebook y con el perfil de desarrollador de la red social. Creacin de Facebook-Tourism. En este ltimo objetivo es donde se desarrollar la aplicacin que queremos crear en este proyecto. Como ya se coment, la aplicacin nos mostrar qu amigos de Facebook tenemos cerca y adems, que lugares de los que les gustan a esos amigos se encuentran lo suficientemente cerca como para poder ir caminando. Adems, tambin mostrar la ruta para ir desde donde se encuentra el usuario al lugar seleccionado.

10

1.2. mbito del trabajo


El mbito de trabajo para este proyecto se centra en la plataforma Android, usando el sistema GPS integrado en el telfono, la API de Facebook que est a disposicin de los desarrolladores [43] y la API de Google necesaria para mostrar los mapas. La plataforma Android, al ejecutarse sobre la mquina virtual de Java, nos proporciona una base para crear aplicaciones para telfonos mviles sin tener que preocuparnos por la marca o modelo de estos. El sistema GPS nos da la informacin relativa a la localizacin de un usuario, esta informacin ser la que utilizaremos para calcular qu lugares y amigos estn cerca del usuario y mostrarle esa informacin en un mapa. La API de Facebook, nos va a proporcionar acceso a la cuenta en la red social del usuario que est usando la aplicacin. Al proporcionarle los mismos permisos que tiene un usuario cuando accede mediante un navegador, podremos obtener el listado de amigos y los intereses de cada uno de ellos. La API de Google, nos va a permitir mostrar un mapa en la aplicacin, adems, utilizando los servicios Web de dicha API podremos calcular la distancia entre dos puntos y la ruta ms ptima entre ellos.

1.3. Plan de Trabajo


En primer lugar vamos a tener una fase de documentacin, previa al desarrollo del proyecto. En esta fase, vamos a realizar una bsqueda bibliogrfica para obtener informacin sobre cmo realizar aplicaciones en Android y seguiremos algn manual que nos sirva de toma de contacto [45]. Tambin tendremos que documentarnos sobre la API de Facebook, ya que es una parte importante en el proyecto. Una vez que hemos estudiado suficiente, y tenemos claro cmo alcanzar los objetivos marcados, procederemos a implementar el proyecto. A la hora de la implementacin seguiremos las siguientes fases: Creacin de una aplicacin sencilla [45]. Esta fase se realizar siguiendo un manual, y servir para conocer los detalles de la implementacin de una aplicacin para Android y de la utilizacin de los componentes hardware del telfono. Para esta fase, crearemos una aplicacin que al pulsar un botn busque nuestra localizacin usando el GPS y muestre las coordenadas por pantalla. En la segunda fase comenzaremos a implementar la aplicacin FacebookTourism, para ello empezaremos a utilizar la API de Facebook. El objetivo de esta fase es, usar dicha API para identificarnos en Facebook, descargar el listado de amigos, y de cada amigo bajar un listado de sus intereses [46]. Una vez tengamos toda la informacin relativa a la red social, descargada en el telfono, se proceder a identificar cules de los intereses obtenidos son lugares que pueden ser representados en el mapa. Esta fase es muy importante, ya que si identificamos correctamente los lugares podremos marcarlos en el mapa. La cuarta fase es la gestin de la base de datos de usuarios de la aplicacin para poder indicar cuando un amigo est cerca. Para ello, la aplicacin le mandar al servidor la posicin en la que se encuentra el usuario y ste le responder con los ids de los usuarios que estn cerca. Una vez recibidos, ser la aplicacin la que se encargue de filtrar los que pertenecen a los amigos y mostrarlos.

11

La quinta fase se corresponde con la utilizacin de la API de GoogleMaps [39]. En esta fase, mostraremos la posicin del usuario en el mapa permitindole elegir el tipo de vista que desea utilizar (StreetView, Satlite o Trafico) La sexta fase es la ltima de implementacin. En esta fase, se ensamblar todo y el objetivo es que cuando se inicie la aplicacin, el usuario se identifique en Facebook y muestre en el mapa informacin relativa a su posicin, la de sus amigos y la de los lugares que le gustan a sus amigos. La ltima fase se corresponde con las pruebas. Hay que detectar los fallos, los errores y el funcionamiento imprevisto para solucionarlo y que el funcionamiento de la aplicacin sea el mejor posible. Elaboracin de la memoria del proyecto. En sta se hablar sobre los distintos sistemas operativos surgidos como consecuencia de la comercializacin de Smartphones prestando especial atencin en Android. Tambin hablaremos sobre la aplicacin (Facebook-Tourism) desarrollada, explicando su implementacin y funcionamiento.

1.4. Metodologa
La metodologa a seguir para el desarrollo del proyecto ser la siguiente: Estudio de la plataforma Android y de los requisitos previos para el desarrollo de una aplicacin. Estudio de la API de Facebook [1.5], necesaria para las fases relacionadas con dicha red social, tales como la identificacin, la descarga de un listado de amigos y la descarga de los intereses de cada uno de esos amigos. Estudio de la API de Google, necesaria para poder utilizar los mapas y calcular las rutas que tienen que seguir los usuarios. Anlisis, diseo e implementacin de una aplicacin sencilla de localizacin GPS. Esta aplicacin se realizar siguiendo paso a paso un manual. Esta aplicacin la utilizaremos para familiarizarnos con el entorno y la tecnologa, no ser utilizada en la aplicacin final. Anlisis, diseo e implementacin de la aplicacin servidor. Esta aplicacin se encargar de gestionar la base de datos de los usuarios para informar a la aplicacin principal de que un amigo del usuario est cerca. Anlisis, diseo e implementacin de la aplicacin Facebook-Tourism. sta es la aplicacin principal del proyecto. Una vez que el usuario est identificado en Facebook, se le enviar al servidor informacin relativa a su posicin y el servidor le responder con la posicin de los amigos que estn cerca de l.

1.5. Herramientas
Para la realizacin de este proyecto es necesario un PC con conexin a internet y una base de datos en MySQL. Los requisitos hardware de este PC no tienen que ser muy avanzados ya que su nico propsito es el de alojar el servidor que le mandar informacin a la aplicacin. Por otro lado es necesario un telfono mvil con sistema operativo Android, conexin a Internet y sistema de localizacin GPS incorporado. Durante la implementacin del proyecto se realizaran pruebas sobre un terminal HTC Hero que cuenta con un procesador de 528 MHz y 288 MB de memoria RAM.

12

Por ltimo, necesitaremos las siguientes herramientas software para el desarrollo de la aplicacin: Eclipse helios, SDK de Android [41], Xampp (Proporciona base de datos MySQL), API de Facebook y API de Google.

1.6. Motivacin
La motivacin de este Proyecto Fin de Carrera es por un lado, obtener los conocimientos necesarios sobre Android para poder desarrollar ms aplicaciones en el futuro, y por otro lado crear una aplicacin que permita mejorar las comunicaciones entre los usuarios de las redes sociales. Con este proyecto fin de carrera pretendo adquirir los conocimientos necesarios para poder crear aplicaciones mas importantes sobre aplicaciones mviles, ya que aparte de adquirir nuevos conocimientos sobre las distintas plataformas, es una buena oportunidad para concienciarse en no utilizar nada ms de los recursos necesarios debido a que los Smartphones, actualmente, tienen recursos hardware muy escasos.

1.7. Temporizacin
El tiempo desglosado para la realizacin de este proyecto ha sido aproximadamente el siguiente: Recopilacin bibliogrfica, para su estudio y una mejor comprensin de los conceptos relacionados con Android. (2 semanas). Estudio e implementacin de un ejemplo, que ayude a familiarizarse con el sistema operativo y los componentes hardware (1 Semana). Estudio e implementacin de la aplicacin Facebook-Tourism, basndome en un modelo de diseo incremental (7 semanas). Diseo y realizacin de una serie de pruebas para comprobar que la aplicacin funciona correctamente. Con los resultados de dichas pruebas se mostrarn y se formularn las conclusiones (2 semanas). Preparacin de la documentacin del proyecto (12 semanas).

1.8. Conocimientos Adquiridos


La realizacin de este proyecto me ha aportado conocimientos relacionados con el diseo de aplicaciones para dispositivos mviles, en concreto, para aquellos basados en la plataforma Android. Adems de los conocimientos adquiridos relacionados con el desarrollo para Android he podido conocer otras plataformas que estn actualmente en el mercado y he ganado experiencia utilizando la tecnologa presente en la plataforma. Tambin he aprendido a utilizar los distintos componentes hardware del dispositivo, permitiendo as poder integrarlos en la aplicacin para lograr un entorno de usuario ms adecuado para el usuario final, ya que gracias al uso de la vibracin del dispositivo, no es necesario que est comprobando continuamente la aplicacin.

1.9. Estructura de la memoria


Este documento est dividido en 6 captulos que forman la memoria del proyecto, adems, cuenta con varios Anexos en los que por ejemplo se explica la configuracin del entorno para poder programar en Android, etc.

13

El captulo 1 se centra en introducir el proyecto, destacando los objetivos, el mbito de trabajo, el plan de trabajo, la metodologa, las herramientas necesarias para la realizacin del proyecto, una aproximacin temporal de la elaboracin del mismo, y por ultimo los conocimientos adquiridos ms destacados. En el captulo 2 se hablar de las distintas tecnologas mviles que hay actualmente en el mercado, centrndome en el estado actual del sistema operativo, de la plataforma de distribucin de la aplicaciones (AppStore), tambin hablar de otras plataformas como iOS, Symbian, etc. El captulo 3 se centra exclusivamente en la plataforma Android, en esta capitulo hablar sobre los orgenes de Android, su impresionante expansin en el mercado, su futuro, etc. Este captulo, al estar centrado en Android, se utilizara tambin para explicar la base terica necesaria para el desarrollo de aplicaciones en Android. En el captulo 4 me centrar en la aplicacin que he desarrollado para este proyecto fin de carrera (Facebook-Tourism), comenzar hablando de los dos principales pilares de la aplicacin (Google y Facebook) y a continuacin hablar de la aplicacin en s, mostrando su diagrama de clases, de secuencia, etc. Tambin mostrar imgenes de la aplicacin funcionando y explicar como funciona, su utilidad, etc. En el captulo 5 hablar sobre las conclusiones a las que he llegado mientras realizaba este proyecto as como de cmo seguir desarrollndolo en el futuro para que no se quede estancado. Por ltimo, el captulo 6 contendr toda la bibliografa que ha sido necesaria para el desarrollo del proyecto. Principalmente he utilizado como recurso bibliogrfico Internet, por lo que en cada direccin Web que indique en la bibliografa, indicar tambin, la fecha de la ltima vez que acced a dicho enlace.

14

Tecnologas mviles
2.1. Introduccin
Las tecnologas mviles se han ido introduciendo en nuestras vidas de forma progresiva desde los ltimos 20 aos, hacindose cada vez un hueco mayor en nuestro da a da. Lo que empez siendo un dispositivo para realizar llamadas ha ido mejorando su funcionalidad y a da de hoy nos permite estar conectados a Internet en todo momento. Las tecnologas mviles han ido evolucionando rpidamente y cada vez ms rivalizan con los ordenadores porttiles, de hecho, los ltimos Smartphones casi son considerados tabletas, que son la principal competencia de los ordenadores porttiles. La tendencia que siguen los ordenadores porttiles es de ser cada vez ms finos y ligeros, asimilndose al aspecto de las tabletas. Para este proyecto voy a utilizar algunas de las tecnologas que se han aadido a los ltimos terminales, en concreto voy a utilizar la conexin GPS, necesaria para poder obtener la posicin del usuario y la conexin a Internet, necesaria para poder acceder a los datos de Facebook. 15

En este captulo voy a hablar de las distintas plataformas mviles que hay en la actualidad. Debido al gran nmero de plataformas mviles que existen hoy en da, me voy a centrar slo en las que tienen la mayor cuota de mercado que son iOS, Symbian, Web-OS, Windows-Phone y Blackberry OS. De la plataforma Android hablar ms extensamente en el captulo siguiente. En el tercer trimestre de 2011 [3], Android posee el 52.5% de la cuota de mercado de los dispositivos mviles, seguido de iOS que tiene el 16.9%, esto queda reflejado en la figura 1.

Figura 1: Cuota de Mercado

iOS [1] es un sistema operativo de Apple desarrollado originariamente para iPhone, aunque actualmente se puede encontrar en otros dispositivos de la compaa como el iPod y el iPad. Es un derivado de Mac OS X. El iOS tiene cuatro capas de abstraccin: la capa del ncleo del sistema operativo, la capa de los Servicios principales, la capa Multimedia y la capa Cocoa Touch. Todo el sistema se encuentra en la particin /root del dispositivo y ocupa unos 500MB. En la figura 2, se muestra como estn organizadas dichas capas.

2.2. iOS

Figura 2: Capas iOS 4.0

La capa del ncleo del sistema operativo (Core OS) contiene las caractersticas de bajo nivel sobre las que sern construidas las dems aplicaciones. Es la capa ms importante, ya que, aunque una aplicacin desarrollada por un tercero, no use directamente ninguna caracterstica del ncleo es muy probable que la use algn 16

framework. Entre otras caractersticas, la capa del ncleo es la encargada de ncleo del bluetooth, de interactuar con accesorios externos, de la seguridad del dispositivo, tambin gestiona el framework responsable de aumentar la velocidad del dispositivo en temas relacionados con el clculo matricial (resolucin de ecuaciones, procesamiento de imgenes, etc.). Este nivel del sistema abarca el entorno del ncleo, drivers, y todas las interfaces de bajo nivel del sistema operativo. El ncleo por s mismo es el encargado de todos los aspectos del sistema operativo. Administra la memoria virtual, hilos, archivos del sistema, redes, etc. Los drivers son los encargados de proporcionar la interfaz entre los frameworks y el hardware. Por motivos de seguridad, el acceso al ncleo est restringido a un limitado conjunto de frameworks y aplicaciones. La capa de los Servicios principales (Core Services) contiene los servicios fundamentales del sistema que todas las aplicaciones usan. Al igual que con los servicios del ncleo, es posible que una aplicacin desarrollada por un usuario no haga uso de ninguno de estos servicios directamente, pero indirectamente se estarn utilizando. Dentro de esta capa se encuentra el soporte para distintos servicios como el soporte para XML, el servicio para la compra de aplicaciones (compra-app) o el GCD. El servicio de compra-App le da al usuario la capacidad para vender contenidos y servicios desde el interior de su aplicacin. Esta funcin se implementa utilizando el marco Kit Store, que ofrece la infraestructura necesaria para procesar las transacciones financieras utilizando la cuenta del usuario en iTunes. El soporte para XML proporciona los elementos necesarios para la recuperacin de elementos desde un documento XML. Adems, proporciona soporte para la manipulacin de documentos XML.
Grand Central Dispatch es una tecnologa que se usa para administrar la ejecucin en una aplicacin. GCD combina un modelo de programacin asncrona con un altamente optimizado ncleo para proporcionar una alternativa al Threading. GCD tambin proporciona muchas alternativas para muchos tipos de tareas de bajo nivel, como leer y escribir en archivos, o monitorizar seales y procesos.

Adems de los servicios indicados, hay otros que se consideran servicios del ncleo como el framework de red (gestiona las conexiones), el libro de direcciones (gestiona los contactos, el framework de localizacin (gestiona el GPS), etc. La capa Multimedia (Media) contiene las tecnologas de grficos, audio y video orientadas a ofrecer la mejor experiencia posible. Las tecnologas de esta capa fueron diseadas para hacer fcil el desarrollo de aplicaciones que se muestren y se oigan con la mejor calidad posible. Los grficos de alta calidad son una parte importante de todas las aplicaciones para iOS. La manera ms simple (y a veces la ms eficiente) es con imgenes prerenderizadas junto con las vistas estndar y los controles que proporciona el framework UIKit. Entre otras tecnologas, la capa multimedia da soporte a imgenes en 2D y 3D, imgenes vectoriales, etc. Al igual que los grficos, el audio tambin es importante, por lo que las tecnologas de audio disponibles estn diseadas para proporcionar una gran experiencia a todos los usuarios. El sistema proporciona mltiples unidades para reproducir y grabar audio. Se puede elegir la codificacin del audio como AAC, ALAC (Apples LLossLess), MIDI, etc.

17

Cuando un usuario reproduce una pelcula o la ve desde Internet, iOS proporciona numerosas tecnologas para reproducir el contenido. Adems de reproducir, el usuario tambin puede grabar video, y dependiendo de la tecnologa utilizada, tambin se elige la calidad. El sistema operativo iOS ofrece soporte para H.264 a ms de 1.5Mbps y MPEG-4 a 2.5Mbps. La capa Cocoa Touch es desde donde se ejecuta la interfaz grfica. Tambin es una API para la creacin de programas proporcionando una capa de abstraccin al sistema operativo. Cocoa Touch se basa en el set de herramientas que proporciona la API de Cocoa para crear programas sobre la plataforma Mac OS X. Toda la API est escrita en el lenguaje Objetive-C. La capa Cocoa Touch contiene los frameworks clave para desarrollar aplicaciones para iOS. Esta capa define la infraestructura bsica de la aplicacin y ofrece soporte para multitasking, entrada basada en pulsos, etc. En esta capa se encuentran numerosos frameworks, no obstante, como no es el objetivo del proyecto, slo voy a hablar de las caractersticas ms importantes. Las aplicaciones construidas con el SDK 4.0 o superior, no terminan cuando se pulsa el botn Home, en lugar de eso, la aplicacin se va a segundo plano donde esperar hasta que vuelva a ser necesitada. El multitasking definido en el UIKit ayuda a la aplicacin a ir y volver del segundo plano rpidamente. Para preservar la batera, las aplicaciones en segundo plano estn suspendidas, por lo que al no ejecutar cdigo alguno, gastan menos batera. La proteccin de datos permite a aplicaciones que trabajan con datos sensibles cifrarlos cuando los escriba en memoria y hacer que la aplicacin que ha creado el archivo sea la nica que puede acceder, adems, si una aplicacin que trabaja con datos sensibles se pasa a segundo plano, los datos tambin se cifran hasta que se vuelva a traer al frente, evitando as que otras aplicaciones puedan acceder. El reconocedor de gestos sabe que objetos se estn tocando y utiliza esa informacin para detectar los tipos ms comunes de gestos (golpe y pellizco). Es necesario indicar a la aplicacin como tiene que responder ante cada gesto. Una vez reconocido el gesto, el objeto al que se le ha aplicado, basndose en la informacin que recibe de la heurstica del reconocedor de gestos, actuar como se le indica. Hay muchas ms caractersticas en esta capa como servicios p2p para juegos con bluetooth, servicios de impresin, compartir archivos, mensajera instantnea, twitter, etc. pero he desarrollado las tres anteriores por considerarlas las ms importantes. En la figura 3 se muestra un esquema, que a modo de resumen, muestra la comunicacin de las aplicaciones con el telfono.

18

Figura 3: Esquema de Aplicaciones

2.2.1. Estado actual de la plataforma


En el momento de la redaccin de este documento acaba de liberarse la versin 5 del sistema operativo, esta versin incorpora numerosas mejoras que comentar a continuacin. Segn Apple, esta nueva versin del sistema operativo presenta ms de 200 mejoras, como optimizacin de la cmara, mejora en el navegador Safari, incorporacin del Quiosco, servicio de mensajera (iMessage), etc. Pero de todas estas mejoras hay dos que destacan: iCloud y la mejora de la integracin con iTunes. iCloud [2] permite acceder desde cualquier dispositivo de Apple a los archivos, sin necesidad de que tengas que mantener una copia de dicho archivo de forma local en un dispositivo. Adems de ofrecer almacenamiento de fotos, msica, videos y aplicaciones (sin lmite de capacidad) tambin remplaza al servicio anteriormente conocido como MobileMe como servidor de correo electrnico, almacenando contactos, el calendario y otros datos (limite 5Gb de forma gratuita). El mximo logro en esta versin, es que el usuario no tiene que hacer nada, una vez configurado el servicio, cuando haga una foto o compre una cancin, esta se subir automticamente a iCloud y podr acceder desde cualquier equipo, utilizando iCloud incluso como copia de seguridad. En la figura 3 se muestra el logo que utiliz Apple en la presentacin de iCloud en WorldWide Developers Conference de 2011.

19

Figura 3: iCloud

iTunes es reproductor y tienda de contenidos multimedia desarrollado por Apple para gestionar la msica del usuario. Est basado en la aplicacin SoundJam MP, que fue comprada por Apple en el ao 2000, liberando la primera versin en Enero de 2001. Los usuarios tienen la posibilidad de organizar su msica en lista de reproduccin, editar la informacin de los archivos, grabarlos en CD, etc. Aunque en su origen iTunes solo se utilizaba para gestionar archivos de msica, desde la versin 4.8 (Mayo 2005) tambin se puede utilizar para reproducir videos y comprar videos, pudiendo encontrar actualmente pelculas de Disney y Pixar y episodios de series como Perdidos. En esta ltima versin (10.5) se ha aadido soporte para sincronizacin Wifi e integracin con iCloud. En la figura 4 se muestra la imagen que utiliz Apple cuando explic el objetivo que persegua con iTunes.

Figura 4: iTunes

2.2.2. Plataforma de distribucin


La plataforma de distribucin por excelencia de Apple es conocida como AppStore, cuyo logo se ve en la figura 5. Es un servicio que permite a los usuarios buscar y descargar aplicaciones informticas desde iTunes Store o Mac AppStore publicadas por Apple. Las aplicaciones que se suben no siempre son gratuitas, por lo que de lo que el usuario paga por la aplicacin, el vendedor recibe un 70% y Apple se queda con el 30% restante. No obstante, ese 30% de beneficios que obtiene de cada aplicacin le otorgaron ms de 1.000 millones de dlares a la compaa. Esta plataforma fue inaugurada en Julio de 2008 por medio de una actualizacin en iTunes. En el mismo momento de la actualizacin, las aplicaciones estaban listas para ser descargadas, pero debido a un fallo de compatibilidad las aplicaciones no pudieron instalarse hasta un da despus. En menos de un ao Apple haba superado los 1.000 millones de descargas de aplicaciones desde la plataforma. El sistema operativo iOS lleva un sistema de control parental que puede ser utilizado por los usuarios, por este 20

motivo, la aplicaciones tambin son controladas por edades, actualmente se clasifican en 4+, 9+, 12+ y 17+. En Enero de 2011 Apple anunci que haba sido descargada la aplicacin nmero 10.000 millones, por lo que no se puede negar el xito arrollador que ha tenido esta plataforma.

Figura 5: Logo AppStore

2.3. Symbian
Symbian es un sistema operativo producto de la alianza de varias empresas de telefona mvil entre las que se encuentra Nokia, Sony Ericsson, LG, Siemens, Motorola, etc. Sus orgenes proceden de su antepasado EPOC32 utilizado en PDAs de PSION. El objetivo de Symbian fue crear un sistema operativo para terminales mviles que pudiera competir con Windows-Phone. En el 2008, Nokia, que posea el 48% de Symbian, decidi comprar el 52% restante para restablecer la fundacin Symbian y convertirlo en cdigo abierto. A pesar de los esfuerzos de Nokia, en Octubre de 2011 anunci que Symbian tendr soporte hasta 2016, debido a que no est al mismo nivel que sus competidores directos en lo que se refiere a sistemas operativos de ltima generacin (Android, iOS, Windows-Phone y Blackberry). En la figura 6 se puede ver el logo del sistema operativo Symbian.

Figura 6: Logo Symbian

Symbian comenz a decaer en 2009, cuando fue superado por Android. En el ao 2010 perdi la mitad de su cuota de mercado (paso del 40.9% al 22.1%) [4]. Esto se debe principalmente a que el mercado de los Smartphones est en auge, mientras que el de los telfonos mviles tradicionales (su principal cuota de mercado) est en declive.

2.3.1. Estado actual de la plataforma


Symbian^3 es la ltima versin del sistema operativo Symbian, fue desarrollado por Nokia y funciona en Smartphones. Esta es la primera versin de cdigo abierto de Symbian, la cual se present un mes despus de haber liberado el cdigo fuente de todo el sistema. Symbian^3 introdujo soporte para HDMI, aceleracin de hardware en grficos 2D y 3D, y mejoras en la interfaz de usuario, entre ellas la consistencia. Tiene un solo men de opciones y varios escritorios. El kit de desarrollo de esta versin del sistema operativo est disponible desde Octubre de 2011. Los primeros dispositivos en incorporar este sistema fueron los Smartphones desarrollados por Nokia (N8, E7 y C7).

21

En la figura 7 se pueden ver los distintos escritorios que estn disponibles en Symbian^3. Aparte de la versin base de Symbian^3, hay adems otras dos actualizaciones que estn basados en este sistema: Symbian Anna: Actualizacin de Symbian^3 con soporte a NFC, un nuevo navegador con mejoras en el rendimiento general y de la batera. Viene instalada por defecto en los nuevos Nokia X7 y E6, y a partir de septiembre de 2011 se actualizaron todos los telfonos basados en Symbian^3 va OTA o Ovi Suite. Symbian Belle: Nueva actualizacin que viene por defecto en los Nokia 600, 700 y 701 y que tambin est disponible para telfonos que funcionan con Symbian^3 y Symbian Anna. Entre sus mejoras destaca la estabilidad y el menor consumo del sistema operativo, nuevas aplicaciones de Microsoft (aade complementos de Office), una nueva interfaz grfica con un nuevo men, nueva barra de navegacin, un men de notificaciones deslizable y nueva barra de notificaciones que deja ms espacio para las aplicaciones personales.

Symbian Belle fue la ltima versin desarrollada exclusivamente por Nokia, ya que despus de que se terminara el trabajo en esta versin, se anunci la retirada del soporte en 2016.

Figura 7: Symbian^3

2.3.2. Plataforma de distribucin


Symbian no distribuye aplicaciones de otros usuarios (ni propias) mediante ninguna plataforma, no obstante, s dispone de software para la actualizacin del sistema y que permite instalar software que haya desarrollado un usuario.

22

Los sistemas operativos Symbian se pueden actualizar usando dos vas. La primera de ellas es conocida como OTA (On the air), aqu solo se actualiza el sistema operativo, utilizando la red Wifi, o mediante 3G se conecta a los servidores de Nokia (usando OVI [5] ), se baja la nueva versin, se auto-instala y listo. Esta opcin, no permite ningn tipo de instalacin de otro software por lo que su uso es bastante limitado. Otra forma de actualizar Nokia es mediante el software conocido como Ovi. Este servicio puede ser utilizado por el dispositivo cuando se actualiza mediante OTA o puede usarse desde un ordenador mediante Ovi Suite. Nokia ha concentrado el servicio en cinco reas: Juegos, multimedia, mapas, mensajera y msica. Con estos servicios, Nokia pretenda competir con Microsoft, Google y Apple. Ovi significa puerta en finlands y pretenda que fuera la entrada de los usuarios a una plataforma llena de aplicaciones y servicios. En teora, permite que usuarios suban sus aplicaciones, recibiendo Nokia un 30% de los beneficios que generen esas aplicaciones; pero debido a que Nokia tiene que dar el visto bueno a la aplicacin antes de publicarla, el sistema no es lo eficiente que debera ni es comparable a otras plataformas como Android Market o AppStore. En mayo de 2011, Nokia anuncio que dejar la marca OVI en favor de la marca Nokia.

Web-OS [6] es un sistema operativo multitarea para sistemas embebidos basado en Linux, propiedad de Hewlett-Packard. Este sistema operativo fue anunciado en Enero de 2009 junto a Palm Pre, posteriormente fue lanzado Palm Pixi, siendo estos los dispositivos ms importantes con este sistema operativo. En Agosto de 2011 HP anuncio que retirara el soporte a este sistema debido a su poco calado en el mercado. La interfaz grfica de usuario de web-OS fue diseada para dispositivos con pantalla tctil y se muestra en la figura 8. Incluye un conjunto de aplicaciones para el manejo de la informacin personal y usa tecnologa web como HTML5, JavaScript y CSS. Palm asegura que el diseo alrededor de estas tecnologas fue intencionado, para evitar as el aprendizaje de un nuevo lenguaje de programacin por parte de los desarrolladores.

2.4. Web-OS

Figura 8: Men Web-OS

23

2.4.1. Estado actual de la plataforma


En Octubre de 2010 HP liber la versin 2.0 de web-OS, que contaba con numerosas versiones desde la ltima versin estable (1.4.5). Entre sus mejoras, destacan la mejora de la interfaz, la inclusin de la caracterstica Synergy, una mejora del navegador Web, el uso de la sincronizacin y una implementacin real de la multitarea. La versin actual de esta plataforma [8] ofrece uno de los gestores multitarea ms eficaces a travs de un sistema tctil que permite fcilmente cambiar entre varias aplicaciones y notificaciones abiertas. Como novedad, los montones de cartas (stacks of cards) es decir, las pantallas abiertas en cada aplicacin, se agrupan de forma lgica al abrirlas para adaptarse a la forma de trabajar del usuario. Esto se organiza a travs de un sistema que mantienen unidos los elementos relacionados, por ejemplo, un correo electrnico con una cita en un restaurante y un mapa con la direccin del lugar. La interfaz de Web-OS est basada en el mismo sistema de cartas que la multitarea. Las aplicaciones pueden ser lanzadas ya sea desde el iniciador, o desde el iniciador rpido. El usuario cambia de aplicaciones realizando un gesto en el telfono para traer las cartas al frente y movindose entre ellas, elegir una tarea. Web-OS tambin soporta gestos multitoque, posibilitando que la mayora del ingreso de datos pueda ser realizado a travs de la pantalla. Web-OS incluye una caracterstica llamada Synergy que permite integrar informacin de varias fuentes. Web-OS permite al usuario acceder a sus cuentas de Gmail, Yahoo!, Facebook, LinkedIn, etc. Los contactos de todas las fuentes son integrados en una nica lista. Los calendarios de diversas fuentes pueden ser vistos todos juntos como uno solo. Para la mensajera, Synergy combina todas las conversaciones con un contacto en una misma ventana de dialogo, por ejemplo, mensajes instantneos y SMS juntos. El navegador Web utilizado por web-OS est basado en webKit, y por lo tanto renderiza las pginas de forma similar a Safari, Google Chrome y el navegador de Android. El navegador puede ser visto tanto de forma vertical como de forma horizontal, utilizando el acelermetro del telfono para detectar la orientacin. Una caracterstica del navegador es la habilidad de poder reproducir archivos .pls sin necesidad de una aplicacin externa. Adems, tambin tiene soporte para el reproductor de Adobe Flash Player. Por ltimo, est versin del sistema operativo hace uso de la computacin en la nube para la sincronizacin de datos, pero no tiene un cliente de escritorio.

2.4.2. Plataforma de distribucin


El catlogo de aplicaciones (AppCatalog) es una tienda online de aplicaciones para dispositivos mviles con el sistema operativo Web-OS. El catalogo es similar al AppStore de Apple o al Android Market de Google. No obstante, no ha tenido tanto xito como las citadas plataformas, ya que, mientras que el AppStore sali al mercado con miles de aplicaciones, AppCatalog [9] solo dispona de 18. No obstante, un ao despus de lanzar la plataforma unas 125 aplicaciones haban logrado obtener casi 8 millones de descargas [7]. En la figura 9 se muestra el men del HP App Catalog.

24

Figura 9: HP App Catalog

2.5. Windows-Phone
Windows-Phone es un sistema operativo mvil compacto desarrollado por Microsoft, y diseado para su uso en telfonos inteligentes y otros dispositivos mviles. Windows-Phone forma parte de los sistemas operativos con interfaz natural de usuario. Se basa en el ncleo del sistema operativo Windows CE y cuenta con un conjunto de aplicaciones bsicas utilizando las API de Microsoft Windows. Est diseado para ser similar estticamente a las versiones de escritorio. Originalmente apareci bajo el nombre de Pocket PC, como una ramificacin de desarrollo de Windows CE para equipos mviles con capacidades limitadas. En la actualidad, la mayora de los telfonos con Windows-Phone vienen con un estilete digital, que se utiliza para introducir comandos pulsando en la pantalla. Windows-Phone ha evolucionado y cambiado varias veces de nombre, siendo su ltima versin la llamada Windows-Phone 7 [10]. A lo largo de su historia, Windows-Phone ha ido mejorando en cada una de sus versiones, pero ha conservado algunas caractersticas. A continuacin enumerar las caractersticas que se han conservado: Desde las versiones de Pocket PC se incluyen aplicaciones de Microsoft Office. Estas versiones incluyen muchas de las caractersticas que se utilizan en versiones de escritorio, pero algunas otras caractersticas como la insercin de las tablas e imgenes no se han incluido versiones anteriores a Windows 5.0. ActiveSync tiene la capacidad de convertir archivos de versiones de escritorio a archivos compatibles con Pocket PC. Outlook Mobile es tambin un programa que viene con Windows Mobile. Esto incluye tareas, calendario, contactos, y la bandeja de entrada. Windows Media Player para Windows-Phone se aade con el software. Actualmente, todas las versiones de Windows-Phone incluyen la versin 9 25

del reproductor, aunque la versin 10 se ha incluido en los nuevos dispositivos. Windows Media Player reproduce diversos formatos de audio y video. Algunas crticas que ha recibido este reproductor es que no soporta los archivos MPEG, por lo que para reproducirlos necesitan programas de terceros. En la pantalla Hoy nos mostrar la fecha actual, la informacin del dueo, las citas prximas, los mensajes E-mail y las tareas. En la parte inferior aparecer, generalmente, una barra con dos botones. Tambin incluye una barra que incluye iconos para notificar el estado del Bluetooth, batera, cobertura, etc. En la figura 10 se puede ver una imagen de la pantalla principal de Windows-Phone 7. En la barra de tareas muestra: la hora actual, el volumen y el estado de la conectividad. Cuando un programa o un mensaje estn abiertos el espacio en blanco, en el que estaba el reloj se con convierte en icono de ok o en una barra de cerrar. La caracterstica principal de la barra de tareas es el botn de Inicio, que est diseado para que sea parecido al botn de Inicio de las versiones de escritorio de Windows. El men de Inicio ofrece programas abiertos realmente, nuevas entradas del men personalizadas, y accesos directos a programas, ajustes, bsquedas y ayuda. La barra de tareas aparece en la figura 10, en la parte de arriba de la figura. Cliente para redes PPTP.

Figura 10: Windows Phone 7

2.5.1. Estado actual de la plataforma


Actualmente se encuentra disponible la versin 7, tambin conocida como Windows-Phone 7 [13]. Es un sistema operativo mvil desarrollado por Microsoft como sucesor de la plataforma Windows Mobile. Est pensado para el mercado de consumo generalista en lugar del mercado empresarial por lo que carece de muchas funcionales que proporciona la versin anterior. Microsoft decidi no hacer compatible esta versin con la versin anterior (Windows Mobile 6) por lo que las aplicaciones existentes no funcionan en Windows-Phone 7 haciendo necesario desarrollar nuevas aplicaciones.

26

Con Windows-Phone 7 Microsoft ofrece una nueva interfaz de usuario, integra varios servicios en el sistema operativo y planea un estricto control del hardware que implementar el sistema operativo, evitando la fragmentacin con la evolucin del sistema. Windows-Phone 7 cuenta con Internet Explorer 9. Windows-Phone 7.5 es una innovacin para Windows-Phone 7. Este cambio se anunci en Mayo de 2011, aunque an se desconoce su fecha de lanzamiento. Durante el anuncio se anunci que traera Internet Explorer 9 de serie, soporte para CSS3 y soporte para usar GPS cuando se trabaje con las aplicaciones de ubicacin geogrfica, entre otros. En la actualidad, Windows-Phone 7 contina perdiendo cuota de mercado, frente a competidores como Android o iPhone. A pesar de tener grandes ventajas respecto a su versin anterior, tiene importantes carencias que han sido muy criticadas por parte de los usuarios. Los principales inconvenientes son [12]: No soporta Adobe Flash No se pueden administrar los archivos (Aunque Microsoft ha dicho que no lo va a incluir) Conexin a puntos Wi-Fi con IP esttica Transferencia de ficheros por BlueTooth (Tampoco est en los planes de Microsoft incluirlo) Soporte para voz sobre IP Copias de seguridad Sincronizacin de contactos y calendario con PC (se elimina el soporte de ActiveSync)

En Febrero de 2011, cuando Nokia anunci que no iba a seguir dando soporte a Symbian, Microsoft informo que haba llegado a un acuerdo con dicha compaa por valor de 1.000 millones de dlares para agilizar la migracin de los dispositivos a Windows-Phone 7. El objetivo de esta alianza es la de competir con Android e iOS ya que son los que ms cuota de mercado tienen y los que estn experimentando mayor crecimiento. Windows-Phone-MarketPlace [11] es el nombre elegido por Microsoft para su plataforma de distribucin de Windows-Phone. Este servicio permite a los usuarios navegar y descargar aplicaciones que han sido desarrolladas por terceros. Al igual que gran parte de los nuevos dispositivos, se presenta en una panormica vista donde el usuario puede navegar por categoras y ttulos, y obtener detalles de valoraciones, comentarios y precios. Esta plataforma tiene soporte para compras con tarjeta de crdito, la facturacin del operador, y el contenido con publicidad. Tambin cuenta con una opcin de probar antes de comprar donde el usuario tiene la opcin de descargar una versin de prueba de una aplicacin comercial. Tiene 61 categoras divididas en 16 categoras principales y 25 sub-categoras, una aplicacin solo se puede colocar en una categora. La plataforma contar con descargas de podcasts y msica proporcionada por Zune. El desarrollo de aplicaciones de Windows-Phone 7 se basa en Silverlight, XNA, y .NET. Las principales herramientas utilizadas para el desarrollo son Visual Studio 2010 27

2.5.2. Plataforma de distribucin

y Expression Blend. Windows-Phone 7 solo ejecuta aplicaciones que han sido aprobadas por Microsoft y solo estn disponibles a travs de Windows-PhoneMarketPlace. Los desarrolladores obtienen el 70% de los ingresos [14] realizados por sus aplicaciones o pueden incluir un modelo de publicidad integrado en sus aplicaciones, los estudiantes pueden presentar sus solicitudes de forma gratuita a travs del programa Microsoft DreamSpark. Un proceso de aprobacin de la aplicacin existe para facilitar una restriccin a la violencia y a la desnudez, tambin estn prohibidas representaciones de la prostitucin o bsicamente cualquier cosa que pueda ser calificada para adultos. En la figura 11 se poder ver el men principal del MarketPlace, en el que el usuario puede buscar las aplicaciones ms populares, novedades, categoras, etc.

Figura 11: MarketPlace

2.6. Blackberry OS
Blackberry OS es un sistema operativo desarrollado por Research In Motion (RIM) para los dispositivos Blackberry. El sistema permite multitarea y tiene soporte para diferentes mtodos de entrada para su uso en ordenadores de mano. La primera versin (1999) permita el acceso a correo electrnico, navegacin web y sincronizacin con programas como Microsoft Exchange o Lotus Notes aparte de poder hacer las funciones usuales de un telfono mvil. Blackberry OS est claramente orientado a su uso profesional como gestor de correo electrnico y agenda. Desde la versin 4 se puede sincronizar el dispositivo con el correo electrnico, el calendario, tareas, notas y contactos de Microsoft Exchange Server el cual es compatible con Lotus Notes. Blackberry Enterprise Server proporciona el acceso y organizacin del email a grandes compaas identificando a cada usuario con un nico BlackBerry PIN. Los usuarios ms pequeos cuentan con el software Blackberry Internet Service, programas ms sencillos que proporciona acceso a Internet y a correo POP3/IMAP sin tener que usar Enterprise Server.

28

Al igual que en el sistema operativo Symbian, desarrolladores independientes tambin pueden crear programas para Blackberry pero en el caso de querer tener acceso a ciertas funcionalidades restringidas necesitan ser firmados digitalmente para poder ser asociados a una cuenta de desarrollador de RIM. La figura 12 muestra el escritorio de Blackberry OS, esta es la ventana que ven los usuarios cuando arrancan el sistema operativo.

Figura 12: Inicio Blackberry

Actualmente el sistema operativo va por la versin 7 [15], siendo conocido como BlackBerry 7. Los primeros dispositivos que incorporan este sistema son Blackberry Bold 9900 y BlackBerry Bold 9930. Segn el fabricante, esta versin est destinada a ofrecer una experiencia de rapidez y facilidad de uso con notables mejoras en la navegacin, bsquedas activadas por voz, la posibilidad de manejar de forma separada el contenido personal del contenido empresarial y la adicin de aplicaciones orientadas a la productividad y vida personal. Para empezar, el navegador disfruta de la mejora ofrecida por la interfaz de usuario Liquid Graphics que aporta su contribucin a temas de renderizado y zoom, Blackberry 7 usa para su navegador un nuevo compilador de JavaScript llamado JIT (Just in time) que mejora la velocidad de carga de sitios web y soporta HTML 5 [16]. Desde la versin BlackBerry 6 se ofreca una caracterstica de bsqueda universal, pero ahora, en BlackBerry 7 da un paso adelante al incluir bsquedas activadas por voz. Otra caracterstica que ha sido muy bien acogida es BlackBerry Balance que se encargar de separar la vida personal del usuario de la vida corporativa. Esto lo logra ofreciendo el uso de email, redes sociales como Facebook o Twitter, juegos y contenido multimedia de forma separada a las necesidades corporativas, como por ejemplo, Black Berry Enterprise Server. En lo referido a las aplicaciones, BlackBerry 7 ofrece a los usuarios la versin completa de Docs To Go que les permitir ver y editar documentos en formatos Word, Excel y PowerPoint directamente en sus dispositivos, y visualizar documentos en formato PDF. El fabricante ha confirmado que no existe soporte para modelos antiguos en BlackBerry 7, por lo que aquellos dispositivos anteriores a esta generacin (incluidos modelos con BlackBerry 6) no recibirn de manera oficial la actualizacin de software 29

2.6.1. Estado actual de la plataforma

por parte del fabricante, as que los usuarios de BlackBerry debern actualizar sus terminales si quieren disfrutar de esta versin del sistema operativo.

2.6.2. Plataforma de distribucin.


Blackberry comenz lanzando dos plataformas de distribucin conocidas como Application Center, donde el usuario poda descargar aplicaciones de terceros por un precio, y Application Storefront, que actuaba como un escaparate para que los desarrolladores pudieran comercializar sus aplicaciones [19]. Application Center [18] est disponible desde la versin 4.7 del sistema operativo, y ofreca a los usuarios un listado con todas las aplicaciones que hay disponibles (ver figura 13). Se puede acceder desde la pantalla de opciones lo que permite tambin borrar aplicaciones que ya han sido descargadas. Posee actualizaciones automticas, por lo que las aplicaciones que descarguen los usuarios estarn siempre actualizadas a la ltima versin.

Figura 13: Application Center

En 2009, Research In Motion (RIM) uni ambas plataforma en una sola conocida como BlackBerry App World [17]. Este servicio proporciona a los usuarios un entorno en el que navegar, descargar y actualizar aplicaciones de terceros. Aunque inicialmente la plataforma slo estaba disponible en Estados Unidos, Reino Unido y Canad, actualmente y gracias a varias actualizaciones la plataforma se encuentra disponible en 113 pases de todo el mundo, aceptando como sistema de pago Paypal en todos ellos. A diferencia de las plataformas de iOS, Android o Symbian, RIM se queda con el 20% y no el 30% del coste que paga un usuario por una aplicacin, yendo el 80% restante al desarrollador.

30

2.7. Conclusiones tecnologas

valoracin

personal

de

las

P. Distribu- Estado cin Actual iOS iTunes/iClo ud Expandin dose

Cod. Abierto No

Ventajas Gran expansin. Facilidad de uso.

Desventajas Plataforma cerrada.

Simbyan

OVI

Decayend Parcialmeno (Soporte te retirado) Soporte retirado Expandin dose No

Gran A partir de variedad de 2016 no terminales tendr soporte Diseado para tabletas Soporte retirado

Web-OS

AppCatalog

WindowsPhone

MarketPlace

No

ConectiviPlataforma dad con cerrada Windows en PCs Fiabilidad La mayora en el mbito lo utilizan empresarial para uso profesional.

Blackberry

AppCenter

Se mantiene

No

Tabla 1: Plataformas Mviles

Durante este capitulo he estado hablando de las distintas tecnologas mviles que hay en el mercado. Me he centrado en aquellas que son ms importantes o en las que hasta hace poco tiempo, eran mayoritarias entre los usuarios. Me he decantado por Android (descrita ampliamente en el capitulo siguiente), porque en la actualidad es una plataforma que est en auge, que ofrece muchsimas posibilidades de desarrollo, y a que al estar disponible en cdigo abierto, puede ser personalizada desde cero. En caso de tener que elegir otra plataforma, me decantara por utilizar iOS, ya que es la que mantiene el 2 mayor cuota de mercado y adems, a diferencia de Blackberry, est orientada a los usuarios para su uso personal y no para las empresas. Por lo que al ser el objetivo de este proyecto, una aplicacin para que un usuario encuentre a sus amigos y los lugares que le gustan a estos, obviamente, no est desarrollada para un uso profesional. Por ltimo, a la hora de desarrollar el proyecto descartara Symbian y Web-OS, ya que los desarrolladores de ambas plataformas ya han anunciado el cese del soporte a dichas tecnologas. El software de HP ya no tiene soporte, y est siendo retirado del mercado, mientras que Symbian tendr soporte hasta 2016, y ser a partir de ese 31

momento cuando Nokia deje definitivamente la plataforma para apostar por WindowsPhone.

32

Plataforma Android
3.1. Introduccin
Android es una plataforma de software y sistema operativo para dispositivos mviles basada en un kernel de Linux, desarrollada por Google y ms tarde por la Open Handset Alliance. Esta plataforma permite a los desarrolladores escribir cdigo en Java que se ejecuten en mviles mediante las libreras Java desarrolladas por Google. Tambin se pueden escribir aplicaciones en otros lenguajes, como por ejemplo C, para posteriormente compilarlas en cdigo nativo ARM y ejecutarlas, aunque este proceso de desarrollo no est soportado oficialmente por Google. La mayor parte de la plataforma de Android est disponible bajo licencia de software libre de Apache y otras licencias de cdigo abierto.

3.2. Historia de Android


Android Inc. fue fundada en Palo Alto, California, en Estados Unidos por Andy Rubin, Rich Minner, Nick Sears y Chris White en Octubre del ao 2003 [20]. La compaa fue adquirida por Google solo dos aos ms tarde y desde entonces todo ha sido una carrera de desarrollo de implementacin de tecnologas. En esa poca, poco se saba que las funciones de Android Inc. fueran el desarrollo de software para telefonas 33

mviles. Esto dio pie a rumores de que Google estaba planeando entrar en el mercado de los telfonos mviles. Ya en Google, un equipo liderado por Rubin, desarroll una plataforma para dispositivos mviles basada en el kernel de Linux que fue promocionando a fabricantes de dispositivos y operadores con la promesa de proveer un sistema flexible y actualizable. Se inform que Google haba alineado ya una serie de fabricantes de hardware y software y seal a los operadores que estaba abierto a diversos grados de cooperacin por su parte. La especulacin sobre que el sistema Android de Google entrara en el mercado de la telefona mvil se increment en diciembre de 2006. Informes de BBC y The Wall Street Journal sealaron que Google quera sus servicios de bsqueda y aplicaciones en telfonos mviles y estaba muy empeado en ello. Medios impresos y en lnea informaron que Google estaba desarrollando un telfono con su propia marca. En septiembre de 2007, se inform que Google haba solicitado diversas patentes en el rea de telefona mvil. El 5 de noviembre de 2007 la Open Handset Alliance, un consorcio de varias compaas entre las que estn Nvidia, Intel, LG, Motorola; se estren con el fin de desarrollar estndares abiertos para dispositivos mviles construidas en la versin 2.6 del kernel de Linux. El 9 de Diciembre de 2008, se anunci que 14 nuevos miembros se uniran al proyecto Android, incluyendo Sony Ericsson, Toshiba, Vodafone, etc. Android ha visto numerosas actualizaciones desde su liberacin inicial [21]. Estas actualizaciones al sistema operativo base tpicamente arreglan bugs y agregan nuevas funciones. Generalmente cada actualizacin del sistema operativo Android es desarrollada bajo un nombre en cdigo con un elemento relacionado con postres. Android ha sido criticado muchas veces por la fragmentacin que sufren sus terminales al no ser soportado con actualizaciones constantes por los distintos fabricantes. Sin embargo, esta situacin cambiar con un anuncio que hizo oficial Google en el que comunico que los fabricantes se comprometern a aplicar actualizaciones al menos 18 meses desde su salida al mercado. El primer telfono en el mercado que posee Android es el T-Mobile G1 (tambin conocido como Dream), lanzado el da 22 de octubre de 2008 que vena con la versin 1.0 de Android preinstalada. Este mvil es el resultado conjunto de T-Mobile, HTC y Google. Desde el 21 de Octubre de 2008, Android est disponible como cdigo abierto. Gracias a esto, cualquiera puede aadir nuevas aplicaciones o remplazar las existentes por otras dentro del dispositivo mvil. La ltima versin de Android fue presentada en Octubre 2011, esta versin es la 4.0, tambin conocida como IceCream Sandwich y presento numerosas mejoras respecto a las versiones 2.3.4 (mviles) y 3.2 (tabletas). En la figura 14 se muestra la cuota de mercado de cada distribucin de Android siendo la versin 2.2 o Froyo la ms extendida.

3.2.1. Historial de actualizaciones

34

Figura 14: Distribucin del SO

3.3. Caractersticas de Android


Android posee numerosas caractersticas, que son bsicas en las distintas versiones del sistema operativo: Amplia variedad de diseos Almacenamiento de datos en BBDD SQLite Conectividad con redes GSM, UMTS, Wi-Fi, Bluethoot, etc. Mensajera mediante SMS y MMS Navegador web Mquina virtual de Java Las aplicaciones escritas en Java pueden ser compiladas y ejecutadas en la mquina virtual de Dalvik, la cual es una mquina virtual especializada en el uso de dispositivos mviles. Soporte para distintos formatos como MP3, JPEG, PNG, etc. Soporte para hardware adicional (GPS, acelermetros, etc.) Entorno de desarrollo (emulador, herramientas de depuracin, perfiles de memoria y funcionamiento, plugin para Eclipse IDE (ver Anexo I)) Catlogo de aplicaciones gratuitas o de pago conocida como Android Market

Adems de las ya citadas, la versin 4.0 de Android incluye las siguientes caractersticas: Unifica el uso en cualquier dispositivo, tanto en telfonos, tabletas, televisores, notebooks, etc. Interfaz limpia y moderna con una nueva fuente llamada Roboto. Similar a la utilizada por la versin 3.0/3.1/3.2 en las tabletas Opcin de utilizar los botones virtuales de la interfaz de usuario, en lugar de los botones tctiles capacitivos. Llega la aceleracin por hardware, lo que significa que la interfaz podr ser manejada y dibujada por la GPU y aumentando notablemente su rapidez y su respuesta.

35

Multitarea mejorada. Aadiendo la posibilidad de finalizar una rarea simplemente desplazndola fuera de la lista. Aadido un gestor del trfico de datos de Internet. El entorno permite establecer alertas cuando llegue a una cierta cantidad de uso y desactivacin de los datos cuando se pasa de su lmite. Los widgets estn en una nueva pestaa, que figuran en una lista similar a las aplicaciones en el men principal. El corrector de texto ha sido rediseado y mejorado, ofreciendo la opcin de tocar en una palabra para que nos aparezca una lista con las diferentes opciones de edicin y sugerencias de palabras similares. Las notificaciones tienen la posibilidad de descartar las que no son importantes y tambin desplegar la barra de notificaciones con el dispositivo bloqueado. La captura de pantalla, con solo pulsando el botn de bajar volumen y el botn de encendido. La aplicacin de cmara ofrece nuevas utilidades como la posibilidad de hacer fotografas panormicas de forma automtica. Android Beam es la nueva caracterstica que nos permitir compartir contenido entre telfonos usando NFC (Near Field Comunication) Reconocimiento de voz del usuario. Aplicacin de telfono nuevo con funcionalidad de buzn de voz visual que le permite adelantarlo o retroceder los mensajes de voz. Reconocimiento facial. Las carpetas son mucho ms fciles de crear, con un estilo de arrastrar y soltar. Un nico y nuevo framework para las aplicaciones. Soporte nativo para MKV. Soporte nativo para el uso de Stylus (lpiz tctil).

3.4. Arquitectura de Android


Para empezar con el desarrollo de aplicaciones en Android es importante conocer como est estructurado este sistema operativo [22]. A esto le llamamos arquitectura y en el caso de Android est formado por varias capas que facilitan al desarrollador la creacin de aplicaciones. Adems, esta distribucin permite acceder a las capas ms bajas mediante el uso de libreras para que as el desarrollador no tenga que programar a bajo nivel las funcionalidades necesarias para que una aplicacin haga uso de los componentes hardware de los telfonos. Cada una de las capas utiliza elementos de la capa inferior para realizar sus funciones, es por ello que a este tipo de arquitectura se le conoce tambin como pila. Para entender mejor, en la figura 15 cito el diagrama de la arquitectura de Android tomada del sitio web de Android developers:

36

Figura 15: Arquitectura Android

Como se ver a continuacin, Android nos proporciona un entorno sumamente poderoso para que podamos programar aplicaciones que hagan cualquier cosa. Nada dentro de Android es inaccesible y podemos jugar siempre con las aplicaciones del telfono para optimizar cualquier tarea. El potencial de Android se sita en el control total que se le da al usuario para que haga de su telfono un dispositivo a su medida. A continuacin explicare cada una de las capas iniciando de abajo hacia arriba.

3.4.1. Linux Kernel


El ncleo del sistema operativo Android est basado en el kernel de Linux versin 2.6, similar al que puede incluir cualquier distribucin de Linux, como Ubuntu, solo que adaptado a las caractersticas del hardware en el que se ejecutar Android, es decir, para dispositivos mviles. El ncleo acta como una capa de abstraccin entre el hardware y el resto de las capas de la arquitectura. El desarrollador no accede directamente a esta capa, sino que debe utilizar las libreras disponibles en capas superiores. De esta forma tambin se evita el hecho de conocer las caractersticas precisas de cada telfono. Si se necesita hacer el uso de la cmara, el sistema operativo se encarga de utilizar la que incluya el telfono, sea cual sea. Para cada elemento de hardware del telfono existe un controlador dentro del kernel que permite utilizarlo desde el software. El kernel tambin se encarga de gestionar los diferentes recursos del telfono (energa, memoria, etc.) y del sistema operativo en s: procesos, elementos de comunicacin, etc.

37

3.4.2. Libraries
La siguiente capa se sita justo encima del kernel. La componen las bibliotecas nativas de Android, tambin llamadas libreras (libreries). Estn escritas en C o C++ y compiladas para la arquitectura hardware especifica del telfono. Estas normalmente estn hechas por el fabricante, quien tambin se encarga de instalarlas en el dispositivo antes de ponerlo a la venta. El objetivo de las libreras es proporcionar funcionalidad a las aplicaciones para tareas que se repiten con frecuencia, evitando tener que codificarlas cada vez y garantizando que se llevan a cabo de forma ms eficiente. Entre las libreras incluidas encontramos OpenGL (motor grfico), Biblioteca multimedia (formatos de audio, imagen y video), Webkit (navegador), SSL (cifrado de comunicaciones), FreeType (fuentes de texto), SQLite (base de datos), entre otras.

3.4.3. Android Runtime


Como podemos apreciar en el diagrama, el entorno de ejecucin de Android no se considera una capa en s mismo, dado que tambin est formado por libreras. Aqu encontramos las libreras con las funcionalidades habituales de Java as como otras especficas de Android. El componente principal del entorno de ejecucin de Android (Android Runtime) es la mquina virtual Dalvik. Las aplicaciones se codifican en Java y son compiladas en un formato especfico para que esta mquina virtual las ejecute. La ventaja de esto es que las aplicaciones se compilan una nica vez y de esta forma estarn listas para distribuirse con la total garanta de que podrn ejecutarse en cualquier dispositivo Android que disponga de la versin mnima del sistema operativo que requiera la aplicacin. Cabe destacar que Dalvik es una variacin de la mquina virtual de Java, por lo que no es compatible con el bytecode Java. Java se usa nicamente como lenguaje de programacin, y los ejecutables que se generan con el SDK de Android tienen la extensin .dex que es especfico para Dalvik, y por ello no podemos ejecutar aplicaciones Java en Android ni viceversa.

3.4.4. Application Framework


La siguiente capa est formada por todas las clases y servicios que utilizan directamente las aplicaciones para realizar sus funciones. La mayora de los componentes de esta capa son libreras Java que acceden a los recursos de las capas anteriores a travs de la mquina virtual Dalvik. Siguiendo el diagrama encontramos: 1. Activity Manager. Se encarga de administrar la pila de actividades de nuestra aplicacin as como su ciclo de vida. 2. Windows Manager. Se encargara de organizar lo que se mostrar en pantalla. Bsicamente crea las superficies en la pantalla que posteriormente pasarn a ser ocupadas por las actividades. 3. Content Provider. Esta librera es muy interesante porque crea una capa que encapsula los datos que se compartirn entre aplicaciones para tener control de cmo se accede a la informacin. 4. Views. En Android, las vistas los elementos que nos ayudarn a construir las interfaces de usuario: botones, cuadro de texto, lista y hasta elementos ms avanzados como un navegador Web o un visor de Google Maps. 5. Notification Manager. Engloba los servicios para notificar al usuario cuando algo requiera su atencin mostrando alertas en la barra de estado. 38

Un dato importante es que esta biblioteca tambin permite jugar con sonidos, activar el vibrador o utilizar los LEDs del telfono en caso de tenerlos. 6. Package Manager. Esta biblioteca permite obtener informacin sobre los paquetes instalados en el dispositivo Android, adems de gestionar la instalacin de nuevos paquetes. Con paquete nos referimos a la forma en que se distribuyen las aplicaciones Android, estos contienen el archivo .apk, que a su vez incluyen los archivos .dex con todos los recursos y archivos adicionales que necesite la aplicacin, para facilitar su descarga e instalacin. 7. Telephony Manager. Con esta librera podremos realizar llamadas o enviar y recibir SMS/MMS, aunque no permite remplazar o eliminar la actividad que se muestra cuando una llamada est en curso. 8. Resource Manager. Con esta librera podremos gestionar todos los elementos que forman parte de la aplicacin y que estn fuera del cdigo, es decir, cadenas de texto traducidas a diferentes idiomas, imgenes, sonidos o layouts. 9. Location Manager. Permite determinar la posicin geogrfica del dispositivo Android mediante GPS o redes disponibles y trabajar con mapas. 10. Sensor Manager. Nos permiten manipular los elementos de hardware del telfono como el acelermetro, giroscopio, sensor de luminosidad, sensor de campo magntico, brjula, sensor de presin, sensor de proximidad, sensor de temperatura, etc. 11. Cmara. Con esta librera podemos hacer uso de la(s) cmara(s) del dispositivo para tomar fotografas o para grabar video. 12. Multimedia. Permiten reproducir y visualizar audio, video e imgenes en el dispositivo.

3.4.5. Aplications
En la ltima capa se incluyen todas las aplicaciones del dispositivo, tanto las que tienen interfaz de usuario como las que no, las nativas (programadas en C o C++) y las administradas (programadas en Java), las que vienen preinstaladas en el dispositivo y aquellas que el usuario ha instalado. En esta capa encontramos tambin la aplicacin principal del sistema: Inicio (Home) o lanzador (Launcher), porque es la que permite ejecutar otras aplicaciones mediante una lista y mostrando diferentes escritorios donde se pueden colocar accesos directos a aplicaciones o incluso widgets, que son tambin aplicaciones de esta capa. La arquitectura Android esta dividida en cuatro capas, en la que cada capa se comunica con la capa directamente inferior. Las aplicaciones de los usuarios estn en la capa superior y estas solo se pueden comunicar con los frameworks de aplicaciones, estos se comunican con las libreras y con la maquina virtual, y por ultimo, estas libreras y la maquina virtual se comunican con el ncleo del sistema. Android SDK [23], es el kit de desarrollo necesario para crear aplicaciones para Android, el sistema operativo mvil de Google y de Open Handset Alliance. En el kit de desarrollo Android podemos encontrar todas las herramientas que los programadores necesitan para crear aplicaciones: entornos de desarrollo y depuracin, 39

3.5. Android SDK

libreras, un emulador de mviles, documentacin, tutoriales, cdigo de ejemplo, etc. El entorno de desarrollo oficialmente soportado es Eclipse conjuntamente con el plugin ADT proporcionado por Google. Desde noviembre del 2007 han ido surgiendo nuevas actualizaciones del SDK, siendo la ultima la 4.0, la cual soluciona algunos errores de las anteriores, aade nuevas funcionalidades y cambios en las APIs y ofrece compatibilidad con la ltima versin de Android (IceCream Sandwich). Por defecto, hay dos repositorios de componentes para el SDK: Repositorio de Android (Android Repository) y aadidos de terceras partes (Third party Add-ons). El repositorio de Android ofrece los siguientes componentes: SDK Tools: Pre-instalado en el paquete inicial de Android SDK. Contienen herramientas para depurar y probar una aplicacin y otras herramientas. Herramientas de la plataforma SDK: Contiene herramientas que son necesarias para desarrollar y depurar la aplicacin, pero que se desarrollan junto a la plataforma Android con el fin de apoyar las caractersticas mas recientes. Esas herramientas se actualizan normalmente solo cuando se libera una nueva plataforma. Plataforma Android: Una plataforma SDK esta disponible para todas las plataformas de despliegue para Android. Cada componente de la plataforma Android incluye una biblioteca totalmente compatible y cualquier herramienta de la versin especifica. Driver USB para Windows: Contiene los archivos necesarios para poder instalar el SDK en un ordenador con un sistema operativo de Windows y as poder probar y depurar aplicaciones con ese sistema operativo. El driver USB no es necesario a no ser que se vayan a probar aplicaciones en un sistema real. Ejemplos: Contiene cdigos de ejemplo y aplicaciones para cada plataforma de desarrollo de Android. Documentacin: Contiene una copia local de la ultima versin de la documentacin para la API de Android.

3.6. Estructura de una aplicacin de Android


Dentro de una aplicacin de Android hay cuatro componentes principales: Activity, Listeners, Servicios y Content Provider. Todas las aplicaciones de Android estn formadas por algunos de estos elementos o combinaciones de ellos [29].

3.6.1. Activity
Un Activity [24] es una clase concentrada en lo que el usuario puede hacer. Casi todos los Activities actan con el usuario, as que el Activity crea una ventana donde el desarrollador localiza los elementos de la interfaz de usuario. Se puede afirmar que cada vista es un Activity, por lo que cuando se cambie de vista, tambin se cambiar de Activity. Cuando cambiamos de vista, la anterior se queda pausada y puesta en una pila esperando una llamada al mtodo OnResume() para volver al primer plano. Tambin se pueden eliminar vistas de la pila en caso de que no vayan a ser necesitadas en el futuro.

40

Al crear una clase que extienda de Activity hay que implementar al menos la funcin OnCreate(), que es la que se ejecuta cuando se crea el Activity. Por defecto, esta funcin recibe un objeto que contiene el estado anterior de la actividad en caso de que haya sido suspendida. Para comunicarse entre Activities, tambin se utiliza este objeto que recibe la funcin OnCreate() pero esta vez utilizando la clase Intent (4.5.1.1). A continuacin voy a mostrar una imagen que resume muy bien el ciclo de vida de un Activity, en la figura 16 se pueden ver los principales mtodos y el orden de ejecucin [25].

Figura 16: Ciclo de vida de un Activity

3.6.1.1. Intent
Un Intent [26] es una descripcin abstracta de una operacin que va a ser llevada a cabo. Se puede usar al lanzar un Activity, para enviar componentes a otro Activity que est esperando a recibirlos. Un Intent proporciona gran facilidad para realizar enlaces en tiempo de ejecucin entre distintas aplicaciones. Su uso ms importante est en el inicio de los Activities, ya que se puede considerar como la unin entre varios. Se trata bsicamente de una estructura de datos pasiva con una descripcin abstracta de la accin a realizar. Las dos partes ms importantes de un Intent son la accin que se quiere realizar y la informacin necesaria que se proporciona para poder realizarla, la cual se expresa en formato URI. Relacionado con los Intent hay una clase llamada IntentFilter que es una descripcin de que Intents puede gestionar un Activity. Mediante los IntentFilters, el sistema puede resolver Intents, buscando cuales posee cada

41

Activity y escogiendo aqul que mejor se ajuste a sus necesidades. El proceso se realiza en tiempo real, lo cual ofrece dos beneficios: Los Activities pueden utilizar funcionalidades de otros componentes. Los Activities pueden ser remplazados por nuevos Activities con IntentFilters equivalentes.

3.6.2. Listeners
Un Listener es una interfaz en la clase View que contiene un solo mtodo de devolucin de llamada. Este mtodo ser llamado por el framework de Android cuando la vista en a que ha sido registrado el detector sea provocado por la interaccin del usuario con un elemento de la interfaz. Se utilizan para reaccionar a eventos externos, pero, aunque no tienen interfaz de usuario, pueden utilizar el servicio NotificationManager para avisar al usuario. Para lanzar un aviso no hace falta que la aplicacin se est ejecutando, en caso necesario, Android la iniciar si se activa el Listener por algn evento.

3.6.3. Servicios
Un servicio [27] es una aplicacin que corre de forma automtica, sin interaccin con el usuario. Desarrollan tareas importantes para el resto de las aplicaciones o para el sistema. En Android los servicios no son independientes, corren en el mismo proceso que la aplicacin que los consume. En caso de que haya mltiples servicios a la vez, se les puede indicar diferentes prioridades segn las necesidades

3.6.4. Content Provider


En Android, las aplicaciones pueden guardar su informacin en ficheros, base de datos SQLite, etc. Pero en caso de que lo que se quiera sea compartir dicha informacin con otras aplicaciones, lo necesario es un Content Provider. Un Content Provider es una clase que implementa un conjunto estndar de mtodos que permite a otras aplicaciones guardar y obtener la informacin que maneja dicho Content Provider.

3.6.4.1. Android Manifest


Toda aplicacin Android tendr un archivo llamado AndroidManifest.xml [28] en el directorio raz del proyecto. El Android Manifest contiene informacin esencial necesaria sobre el sistema Android, informacin que adems es necesaria antes de poder ejecutar cualquier lnea de cdigo. El contenido ms importante del documento es el siguiente: Nombre del paquete Java. Este nombre sirve como un identificador nico de la aplicacin. Describe todos los componentes de la aplicacin (Activity, Servicios, Broadcast receivers y Content providers). Nombra cada clase y el componente que implementa. De esta forma el sistema Android sabe que componentes hay y bajo qu condiciones se ejecutaran. El Android Manifest tambin determina qu procesos contendrn los componentes de la aplicacin. 42

Determina qu permiso tiene la aplicacin para acceder a partes protegidas de la API e interactuar con otras aplicaciones. Tambin determina qu permisos tienen otros para acceder a los componentes de la aplicacin. Lista las clases de instrumentacin que proporcionan perfiles y otra informacin de ejecucin. Esta declaracin solo estar presente en el desarrollo y pruebas, cuando la aplicacin es publicada se elimina. Declara el nivel mnimo del API de Android. Por ltimo, el Android Manifest lista las libreras que deben enlazarse a la aplicacin.

A continuacin se muestra la figura 17 que pertenece al Android Manifest de este proyecto. En el apartado correspondiente lo explicare en profundidad.

Figura 17: Android Manifest en XML

3.7. Aplicaciones en Android


Las aplicaciones para Android se instalan con un archivo con extensin .apk. Este formato es una variante del formato JAR de java y se usa para distribuir e instalar componentes empaquetados para la plataforma Android para mviles. Un archivo .apk normalmente contiene lo siguiente: AndroidManifest.xml Clases.dex Resources.arsc Res(carpeta) META-INF (carpeta)

Estos ficheros pueden ser abiertos e inspeccionados usando un software archivador de ficheros como 7-zip, WinZip, WinRAR o ARK.

3.7.1. Tareas
Al lanzar una aplicacin se crea una tarea que contendr una pila con las actividades que se vayan creando. Una tarea en Android es lo que el usuario ve como una aplicacin y el desarrollador ve como una o ms Activities donde el usuario interacciona y va pasando de Vista en Vista.

43

Dentro de las tareas, una actividad toma el papel de punto de entrada (ser la primera en mostrarse cuando se ejecute la aplicacin) y las dems, si hay, formarn parte de la misma tarea, a la espera de ser instanciadas. Una aplicacin Android corre dentro de su propio proceso Linux [30], por tanto, una caracterstica fundamental de Android es que el tiempo y ciclo de vida de una aplicacin no est controlado por la misma aplicacin sino que lo determina el sistema a partir de una combinacin de estados como pueden ser qu aplicaciones estn funcionando, qu prioridad tienen para el usuario y cunta memoria queda disponible en el sistema. Como ya se ha mencionado, cada aplicacin de Android corre en su propio proceso, el cual es creado por la aplicacin cuando se ejecuta y permanece hasta que la aplicacin deja de trabajar o el sistema necesita memoria para otras aplicaciones. Android sita cada proceso en una jerarqua de importancia basada en estados, como se puede ver a continuacin: Proceso en primer plano (Active process). Es un proceso que aloja una Activity en la pantalla y con la que el usuario esta interactuando (su mtodo onResume() ha sido llamado) o que in IntentReceiver est ejecutndose. Este tipo de procesos sern eliminados como ltimo recurso si el sistema necesitase memoria. Proceso visible (Visible process). Es un proceso que aloja un Activity pero no est en primer plano (su mtodo onPause() ha sido llamado). Esto ocurre en situaciones donde la aplicacin muestra un cuadro de dialogo para interactuar con el usuario. Este tipo de procesos no ser eliminado en caso que sea necesaria la memoria para mantener a todos los procesos del primer plano corriendo. Proceso de servicio (Started Service process). Es un proceso que aloja un Service que ha sido iniciado con el mtodo startService(). Este tipo de procesos no son visibles y suelen ser importantes para el usuario (conexin con servidores, reproduccin de msica). Proceso en segundo plano (Background process). Es un proceso que aloja un Activity que no es actualmente visible para el usuario (su mtodo onStop() ha sido llamado). Normalmente la eliminacin de estos procesos no suponen un gran impacto para la actividad del usuario. Es muy usual que existan numerosos procesos de este tipo en el sistema, por lo que el sistema mantiene una lista para asegurar que el ltimo proceso visto por el usuario sea el ltimo en eliminarse en caso de necesitar memoria. Proceso vaco (Empty process): Es un proceso que no aloja ningn componente. La razn de existir de este proceso es tener una cach disponible de la aplicacin para su prxima activacin. Es comn, que el sistema elimine este tipo de procesos con frecuencia para obtener memoria disponible.

3.7.2. Procesos

Segn esta jerarqua, Android prioriza los procesos existentes en el sistema y decide cuales han de ser eliminados, con el fin de liberar recursos y poder lanzar la aplicacin requerida. Para los procesos en segundo plano, existe una lista llamada LRU (Least Recently Used). En funcin de esta lista se van eliminando los procesos; los primeros que se 44

eliminan son aquellos que llevan ms tiempo sin usarse. As el sistema se asegura de mantener vivos los procesos que se han usado recientemente. A continuacin muestra la figura 18 con la pila de procesos y la posicin de cada uno de los indicados anteriormente:

Figura 18: Pila de procesos

El objetivo de la pila de procesos es: Mejora la estabilidad o seguridad de las aplicaciones. Reducir la sobrecarga de proceso ejecutando el cdigo de mltiples aplicaciones en el mismo proceso. Ayudar al sistema a gestionar los recursos separando partes del cdigo pesado en un proceso separado que puede ser eliminado independientemente de otras partes de la aplicacin.

3.7.3. Hilos
Aunque cada aplicacin se ejecuta en proceso distinto, todos los componentes y procesos de dicha aplicacin (en principio) corren en el mismo hilo [31]. Esto se puede modificar con el atributo process de cada componente (Activity, provider, receiver, y Service). En la etiqueta application del Manifest podemos poner este atributo para que sea aplicado a todos sus elementos. Para gestionar tareas pesadas podemos usar hilos para ejecutar dichas tareas en un hilo aparte (ejecutarlas en segundo plano). Para llevar a cabo esta operacin usaremos el objeto Thread de java, aunque Android proporciona otros objetos para facilitar el trabajo, como Handler, AsyncTask o Looper (entre otros).

3.8. Recursos
Android soporta principalmente dos tipos de recursos: archivos XML y archivos raw (como imgenes, audio, video, etc.). Incluso dentro de los archivos XML, se ver, que en algunos casos los recursos estn definidos como valores dentro del archivo XML (las cadenas de texto, por ejemplo). En otras ocasiones, un archivo XML es un recurso por s mismo, como los Layout [32].

45

Podemos encontrar dos tipos de archivos XML: uno se compilar a formato binario y el otro se copiar tal como es al dispositivo. Como ejemplo podemos poner los ficheros XML de recursos String y los ficheros de layout, ambos se compilaran a un formato binario antes de formar parte del paquete de instalacin. Estos ficheros XML tienen formatos predefinidos en los que los nodos XML se traducen a IDs. Tambin se pueden guardar los archivos XML con su formato propio, estos archivos no sern interpretados y se les asignar un ID de recurso para poder identificarlos. Sin embargo, podemos querer que estos ficheros tambin se compilen a un formato binario. Para lograrlo, hay que colocarlos en el directorio ./res/xml. En tal caso, deberemos usar los lectores XML que proporciona Android para acceder a los nodos del fichero. Si se coloca cualquier tipo de archivo, incluyendo ficheros XML, bajo ./res/raw, no se compilarn a un formato binario. Para leer estos archivos habra que usar Strem. Los archivos de audio y video entran tambin en esta categora. Los recursos se almacenan en varios subdirectorios segn su tipo, a continuacin se indicarn los subdirectorios ms importantes de la carpeta: Anim: Archivos compilados de animaciones Drawable: Bitmaps Layout: Definicin de vistas e interfaces de usuario Values: Arrays, colores, dimensiones, string y estilos Xml: ficheros XML arbitrarios Raw: ficheros raw no compilados

El compilador de recursos AAPT (Android Asset Packagin Tool), compila todos los recursos excepto los raw y lo coloca en el fichero .apk (Android package) final. Este fichero es el que contiene el cdigo de las aplicaciones Android y los recursos, similar a los .jar de Java. Estos ficheros son los que se usan para instalar aplicaciones en Android.

3.9. Herramientas de desarrollo


Para poder desarrollar para Android hay que tener un software especfico y cumplir unos requisitos hardware mnimos. En el Anexo I indicar a modo de manual cuales son esos requisitos y los pasos que hay que seguir para poder desarrollar aplicaciones para Android. Para poder instalar el SDK de Android es necesario tener instalado previamente la maquina virtual de Java y el IDE Eclipse. El SDK nos proporciona las herramientas bsicas de desarrollo en Android, por lo que una vez descargado de la pagina oficial, es necesario incluirlo en Eclipse para poder compilar los proyectos y poder probarlos. Adems de la mquina virtual de Dalvik, se instala tambin un emulador Android configurable, lo que permite poder probar las aplicaciones sin necesidad tener un telfono real con el sistema operativo. Para poder todas las caractersticas los emuladores de Android es necesario tener activa una conexin telnet con emulador que se est ejecutando. de de de el

3.10.Conclusiones
En este captulo se han explicado en profundidad las distintas caractersticas de Android, se ha profundizado en el diseo del sistema operativo, explicando desde el ncleo (basado en Linux) hasta los distintos frameworks que hay en capas superiores y que permiten la comunicacin de la aplicacin con las capas intermedias e incluso con 46

el ncleo. Adems de la estructura del ncleo, tambin se ha explicado el ciclo de vida de una aplicacin, as como el funcionamiento de los distintos mtodos que se heredan de la clase Activity. Tambin se han explicado los diferentes aspectos que hay que tener en cuenta a la hora de desarrollar una aplicacin. Como pueden ser el uso de servicios, Intent, la estructura del manifiesto, etc. Por ltimo se ha explicado el uso que hacen las aplicaciones de hilos, procesos, etc. Utilizar Android presenta una serie de ventajas y desventajas, que enumerar a continuacin: Ventajas: Cdigo abierto: El hecho de que Android est liberado con licencia Apache y cdigo abierto lo convierte en un sistema operativo totalmente libre para que un desarrollador no solo pueda desarrollar su cdigo sino tambin mejorarlo. A travs de esas mejoras puede publicar el nuevo cdigo y con el ayudar a mejorar el sistema operativo para futuras versiones sin depender de fabricantes u operadoras para ver si se libera o no dicha mejora. Del mismo modo, al ser cdigo abierto garantiza que, en caso de haber un bug o error, sea detectado y reparado con mayor rapidez al no existir ninguna traba legal para indagar en su interior ni depender de nadie para pedir autorizacin en su cambio. Libertad: Android da completa libertad al propietario de un terminal a instalar lo que quiera, sea desde Android Market o desde un ejecutable aparte, no limitando la libertad del usuario ni imponiendo software propietario para poder instalar desde el cable USB. Comunidad: Android no solo cuenta con la comunidad ms grande mundial de desarrolladores sino tambin el mayor de estos con multitud de eventos, competiciones y reuniones as cmo mltiples vas de comunicacin como foros y chats oficiales para fomentar la participacin y la colaboracin para encontrar mejoras e ideas para futuras versiones. Personalizable: Al ser abierto y libre, Android es completamente personalizable tanto por usuarios (instalando fondos de pantalla, aplicaciones, widgets, etc) como para fabricantes con la posibilidad de crear sus propias capas como HTC Sense permitiendo a unos y a otros poder personalizar sus telfonos de la mejor manera posible y dando a elegir al usuario la interfaz ms adecuada para su gusto, evitando imponer un determinado estilo o interfaz Multitarea: Android con un sistema multitarea inteligente es capaz de gestionar varias aplicaciones abiertas a la vez dejando en suspensin aquellas que no se utilicen y cerrarlos en caso de resultar ya intiles para evitar un consumo de memoria innecesario. No solo mviles: La libertad del cdigo de Android ha hecho que en poco tiempo se implante en multitud de dispositivos electrnicos, desde mviles hasta ordenadores porttiles e incluso navegadores de abordo en coches. Esto convierte a Android en un sistema operativo multifuncin y completamente escalable que garantizar su crecimiento y expansin en el futuro. Duracin de la batera: El consumo de batera en sistemas Android no est optimizado, un usuario que utiliza mucho sus aplicaciones la batera tiende 47

Desventajas:

a no durar. De todas formas, hay aplicaciones externas que permiten optimizar el uso de la batera. Fragmentacin: Android est totalmente fragmentado provocando problemas de incompatibilidad con algunas aplicaciones del Market que funcionan en determinadas versiones de Android. Oficialmente Android tiene la versin 2.1, 2.2, 2.3 y prximamente la versin 4 (adems de la 3.0, 3.1 y 3.2 para tabletas). Multitarea: A pesar de ser una ventaja el ser un sistema multitarea, el hecho de tener varias aplicaciones abiertas hacen que el consumo de la batera aumente y como Android no cierra todas las aplicaciones hay que instalar una aplicacin para que las cierre.

48

Aplicacin Facebook-Tourism
4.1. Introduccin
En este captulo me voy a centrar en la aplicacin que he desarrollado para este proyecto. Comenzar explicando cmo crear una aplicacin sencilla, la he realizado basndome en un manual. Esta aplicacin sirve como toma de contacto con el entorno, y en los siguientes apartados me centrar en el desarrollo del Facebook-Tourism. En la seccin de Facebook-Tourism comenzar hablando de Google, ya que es la empresa que ha desarrollado Android, seguidamente hablar de Facebook ya que tambin es una parte muy importante de la aplicacin, por ultimo entrar a explicar detalladamente todos los aspectos de la aplicacin, mostrando el diagrama de clases y de secuencia, etc.

4.2. Aplicacin Location GPS


La aplicacin Location-GPS es una aplicacin muy sencilla, cuyo manual se puede encontrar en Internet (http://es.scribd.com/doc/47667225/desarrollo-en-android-pdf), y siguindolo paso a paso se obtiene la aplicacin. 49

El objetivo que se persigue al crear esta aplicacin no es otro que el de familiarizarse con el entorno y comprender el funcionamiento de los componentes del dispositivo. Esta aplicacin utiliza el sistema GPS, se conecta a Internet y dispone de una interfaz grfica con algunos de los componentes ms utilizados por las aplicaciones. Esta aplicacin, est formada por slo una clase java (adems de todos los archivos de configuracin que genera el proyecto) encargada de crear todos los componentes grficos, activar el GPS, obtener su ubicacin y mostrrsela al usuario. Como se puede ver en la figura 19, el planteamiento de la interfaz es muy sencillo. Se dispone de una etiqueta, que se utiliza para mostrar un texto por pantalla y es el elemento ms sencillo de crear, y un botn. Para que funcione la aplicacin slo hay que pulsar el botn.

Figura 19: Location GPS

Una vez que se ha pulsado el botn, la aplicacin, utilizando el sistema GPS localizar la posicin del dispositivo y la mostrar por pantalla. Adems, de forma predeterminada, al actualizar la localizacin GPS, sta se guardar en memoria de forma que est disponible para otras aplicaciones. Esta aplicacin fue probada dos veces, la primera en un emulador, y mostraba coordenadas que no son correctas, posiblemente, al introducirlas a mano para simularlas, comet algn error. Cuando la prob en un telfono, con toda su funcionalidad ejecutndose sobre un dispositivo real, la precisin de la seal era extremadamente alta. En la figura 20 se muestra la posicin que indicaba el emulador.

50

Figura 20: Posicin localizada

Por ltimo, tambin puede ocurrir, que nos encontremos en una zona de sombra para el GPS, en el interior de un edificio o que el dispositivo GPS del terminal no est activado. En este caso, la aplicacin mostrar un mensaje por pantalla tal y como se muestra en la Figura 21.

Figura 21: Seal no encontrada

Observando el cdigo de la aplicacin, he descubierto que utiliza mucho los documentos XML que van adjuntos al proyecto, no solo los de la interfaz grfica, sino tambin para almacenar valores de cadenas de caracteres. De hecho, hasta el texto que aparece en el botn es importado desde un documento XML, esto se puede apreciar en la figura 22.

Figura 22: Documento XML de fuentes

51

Por supuesto, antes de instalar la aplicacin en ningn dispositivo, hay que comprobar los permisos que le vamos a asignar, para que no disponga de ninguno que no necesite. Puesto que la aplicacin, solo va a localizar nuestra posicin basndose en el GPS, solo tendr el permiso para utilizar esa caracterstica. Lgicamente, ese permiso ser asignado en el manifiesto. En la figura 23 se muestran los permisos de la aplicacin.

Figura 23: Permisos

Por ltimo, esta aplicacin puede actualizar en cada momento su posicin GPS y no es necesario que haya habido un movimiento mnimo ni que haya pasado cierto tiempo. Esta caracterstica la aprovechar para el desarrollo de la Facebook-Tourism. Para poder utilizar esa funcionalidad, es necesario, que cuando se crea el hilo para la gestin del GPS, en la variable que almacenar la posicin se le indique que no espere ningn tiempo para actualizarse ni a que se haya recorrido ninguna distancia. En la Figura 24 mostrar el cdigo para mostrarlo claramente. El principal inconveniente de utilizar esta configuracin es que el GPS est siempre activado, por lo que la batera del terminal se gasta rpidamente.

Figura 24: Actualizacin GPS

En el cdigo de la figura 24, tambin se muestra que se utilice el sistema GPS y no el 3G, que ese haba sido descartado por impreciso. Realizando esta pequea aplicacin, se pueden obtener los conocimientos bsicos sobre Android para poder comenzar a desarrollar Facebook-Tourism y por ende, cualquier aplicacin que nos propongamos. Obviamente, con esta aplicacin no se ha tratado ni un 1% del potencial que ofrece Android, pero nos ha servido para entender cmo funciona el manifiesto, los permisos, el desarrollo de una interfaz grfica, el acceso a dispositivos hardware del telfono, etc. En el manual que utilic para realizar esta aplicacin, sugera como posible mejora, la introduccin de un men que nos permitiera elegir como queramos localizarnos (GPS o 3G) y que adems lo mostrara en un mapa. En el momento que lo desarrolle 52

todava no haba aprendido a utilizar la API de Google, por lo que decid posponerlo hasta que hubiese adquirido los conocimientos necesarios.

4.3. Google
Google Inc. es la empresa propietaria de la marca Google (cuyo logo aparece en la figura 25), cuyo principal producto es el motor de bsqueda de contenido en Internet del mismo nombre [32]. Dicho motor es resultado de la tesis doctoral de Larry Page y Sergey Brin para mejorar las bsquedas en Internet. La coordinacin y asesoramiento se debieron al mexicano Hector Garca Molina, director por entonces del Laboratorio de Sistemas Computacionales de la misma Universidad de Stanford y para la aplicacin de los algoritmos de bsqueda contaron con el apoyo de Rajeev Motwani. El dominio Google fue registrado el 15 de septiembre de 1997. Partiendo del proyecto concluido, Page y Brin fundan, el 4 de septiembre de 1998, la compaa Google Inc. que estrena en Internet su motor de bsqueda el 27 de septiembre siguiente. Contaban con un servidor con 80 CPU, y dos routers HP. Este motor de bsqueda supero al otro ms popular de la poca, AltaVista, que haba sido creado en 1995. Aunque su principal producto es el buscador, la empresa ofrece tambin entre otros servicios: un comparador de precios llamado Google Product Search, un motor de bsqueda para material almacenando en discos locales, Google Desktop Search, un servicio de correo electrnico llamado Gmail, su mapamundi en 3D Google Earth, un servicio de mensajera instantnea basado en XMPP llamado Google Talk y, su ms reciente creacin, el servicio de red social Google+. Su infraestructura principal est compuesta por varios data centers que funcionan con la distribucin RedHat del sistema operativo GNU/Linux, cuya eleccin fue llevada a cabo debido a la flexibilidad del mismo, por lo que la mayora de sus trabajadores usan tambin esta misma distribucin en sus estaciones de trabajo por comodidad.

Figura 25: Logo de Google

Actualmente Google est trabajando en nuevos proyectos como el PC de 100$, un nuevo sistema operativo (Chromium), Google Docs & Spreadsheets, colaboracin y promocin de aplicaciones de software libre como Firefox, instalacin de varias redes inalmbricas gratuitas, desarrollo de un sistema de protocolo abierto de comunicacin por voz entre otros. Adems se especula que estara trabajando en el desarrollo de un Google Office y una red global de fibra ptica.

53

Vint Cerf, considerado uno de los padres de Internet, fue contratado por Google en 2005. La compaa cotiza en NASDAQ bajo la clave GOOG. En Octubre de 2006, Google adquiri por 1650 millones de dlares la famosa pgina de videos Youtube. En Abril de 2007, Google compro DoubleClick, una empresa especializada en publicidad en Internet, por 3100 millones de dlares. Ese mismo mes, Google se convirti en la marca ms valiosa del mundo, alcanzando la suma de 66.000 millones de dlares, superando a empresas emblemticas como Microsoft y Coca-Cola. En Julio de 2007, Google compro Panoramio, un sitio web dedicado a exhibir las fotografas que los propios usuarios crean y geo posicionan, siendo algunas de ellas subidas al sitio para que puedan ser vistas a travs del software Google Earth, cuyo objetivo es permitir a los usuarios del mencionado software a aprender ms sobre una zona especfica del mapa, observando las fotografas que otros usuarios han tomado ah. En Septiembre de 2010, Google implement Google Instant Search, una funcin que permite hacer bsquedas a medida que el usuario va tecleando su trmino de bsqueda. En principio solo fue accesible para usuarios de la versin inglesa, y para usuarios en la versin espaola. En Agosto de 2011, Google adquiere Motorola Mobility por 8.800 millones de euros. Con esta adquisicin, Google controlar la mayor parte del mercado de telfonos Android y tendr sus propias fbricas de telfonos mviles al igual que Apple.

4.3.1. API Google Maps


Google Maps dispone de una amplia matriz de API que permite al usuario insertar las funciones ms completas [35] y la utilidad diaria de Google Maps en su propio sitio Web y en sus propias aplicaciones, as como superponer sus propios datos sobre ellas. Hay numerosas versiones de la API disponibles para distintas tecnologas: JavaScript API: JavaScript permite a los usuarios insertar un mapa de Google en sus pginas Web, as como manipular el mapa y aadir contenido a travs de diferentes servicios. Con esta API se pueden crear mapas como los que aparecen en la figura 26.

Figura 26: Javascript API

Maps API para Flash: ActionScript API permite a los usuarios insertar un mapa de Google en sus aplicaciones o en sus pginas Web basadas en Flash. Asimismo, les permite manipular el mapa en tres dimensiones y aadir contenido a travs de diferentes servicios. Con esta API se pueden crear mapas como los que aparecen en la figura 27.

54

Figura 27: Flash API

Google Earth API: Permite a los usuarios insertar un globo digital en 3D en sus pginas Web. De este modo, los usuarios que visiten la pgina del usuario podrn viajar por cualquier lugar del mundo (incluso por debajo del ocano) sin salir de la pgina. Con esta API se pueden crear mapas como los que aparecen en la figura 28.

Figura 28: Google Earth API

Static Maps API: Permite a los usuarios insertar una imagen rpida y sencilla de Google Maps en sus pginas Web o en sus sitios para mviles sin necesidad de utilizar JavaScript ni ningn sistema de carga de pginas dinmicas. Con esta API se pueden crear mapas como los que aparecen en la figura 29.

Figura 29: Static Maps API

Servicios Web: Puedes utilizar las solicitudes URL para acceder a informacin de lugares, de direcciones o de codificacin geogrfica de las aplicaciones cliente, y manipular los resultados en JSON o XML. Con esta API se pueden crear mapas como los que aparecen en la figura 30.

55

Figura 30: Servicios web API

Maps Data API: Puedes visualizar, almacenar y actualizar datos de mapas a travs de los feeds de Google Data API, mediante un modelo de funciones (marcadores, lneas y formas) y conjuntos de las mismas. Con esta API se pueden crear mapas como los que aparecen en la figura 31.

Figura 31: Maps Data API

Para el desarrollo de la aplicacin, he utilizado una clase que hereda de


MapActivity, la cual me permite insertar un mapa manipulable en el que podr incluir

puntos, dibujar rutas, cambiar el tipo de vista, etc. Para poder utilizar esas funciones hay que tener una API Key, la cual explicar como obtenerla en el Anexo IV.

4.4. Facebook
Facebook es una red social creada por Mark Zuckerberg y fundado por Eduardo Saverin, Chris Hughes, Dustin Moskovits y Mark Zuckerberg [34]. Originalmente era un sitio para estudiantes de la universidad de Harvard, pero actualmente est abierto a cualquier persona que tenga una cuenta de correo electrnico. Los usuarios pueden participar en una o ms redes sociales, en relacin con su situacin acadmica, su lugar de trabajo o regin geogrfica. Ha recibido mucha atencin en la blogosfera (comunidad de blogs) y en los medios de comunicacin al convertirse en una plataforma sobre la que terceros pueden desarrollar aplicaciones y hacer negocio a partir de la red social. A mediados de 2007 lanzo las versiones en francs, alemn y espaol para impulsar su expansin fuera de Estados Unidos, ya que sus usuarios se concentran en Estados Unidos, Canad y Gran Bretaa. En Julio de 2010, Facebook cuenta con 500 millones de miembros, y traducciones a 70 idiomas. En mayo de 2011, alcanza los 600 millones de usuarios. Su infraestructura principal est formada por una red de ms de 50.000 servidores que usan distribuciones del sistema operativo GNU/Linux usando LAMP. 56

Facebook comenz a permitir que los estudiantes de universidades agregasen a estudiantes, cuyas escuelas no estaban incluidas en el sitio, debido a las peticiones de los usuarios. En marzo de 2006, BusinessWeek divulgo que una adquisicin potencial del sitio estaba bajo negociacin. Facebook declin una oferta de 750 millones de dlares. En Mayo de 2006, la red de Facebook se extendi con xito en la India, con apoyo de institutos de tecnologa de aquel pas. En Junio de 2006, hubo un acuerdo con iTunes Store para que iTunes conociera los gustos musicales de los usuarios y ofrecer as un enlace de descarga en su propio sitio. En Agosto de 2006, Facebook agreg universidades en Alemania e Israel a su red. Tambin introdujo la importacin de blogs de Xanga, LiveJournal o Blogger. Desde Septiembre de 2006 Facebook se abre a todos los usuarios de Internet, a pesar de protestas de gran parte de sus usuarios, ya que perdera la base estudiantil sobre la cual se haba mantenido. En Julio de 2007, Facebook anunci su primera adquisicin, Parakey Inc. de Blake Ross y Joe Hewitt. En agosto del mismo ao se le dedic la portada de la prestigiosa revista Newsweek; adems de una integracin con Youtube. A finales de Octubre de 2007 Facebook vendi una parte, el 1.6% a Microsoft por 240 millones de dlares, con la condicin de que Facebook se convirtiera en un modelo de negocio para marcas de fbrica en donde se ofrezcan sus productos y servicios, segn los datos del usuario y del perfil de ste. Esta adquisicin valor Facebook en quince mil millones de dlares, aunque el consenso de los analistas fuera que esta cifra supera el valor real de la empresa (para Microsoft no se trataba slo de una inversin financiera, sino tambin de un avance estratgico en Internet). Actualmente, cuenta con ms de 800 millones de usuarios, segn se confirm en la Developer Conference celebrada el 22 de Septiembre de 2011. En la figura 32 se muestra el logo de Facebook.

Figura 32: Logo Facebook

Facebook ofrece una gran cantidad de servicios, entre los que destacan: Lista de Amigos: En ella el usuario puede agregar a cualquier persone que conozca y est registrada, siempre que acepte su invitacin. En Facebook se pueden localizar amigos con quien se perdi el contacto o agregar otros nuevos con quienes intercambiar fotos o mensajes. Para ello, el servidor de Facebook posee herramientas de bsqueda y de sugerencia de amigos. Grupos y Pginas: Es una de las utilidades de mayor desarrollo reciente. Se trata de reunir personan con intereses comunes. En los grupos se pueden aadir fotos, videos, mensajes, etc. Las pginas, se crean con fines especficos y a diferencia de los grupos no contienen foros de discusin, ya 57

que estn encaminadas hacia marcas o personajes especficos y no hacia ningn tipo de convocatoria. Adems, los grupos tambin tienen su normativa, entre la cual se incluye la prohibicin de grupos con temticas discriminatorias o que inciten al odio y falten al respeto y la honra de las personas. Si bien esto no se cumple en muchas ocasiones, existe la opcin de denunciar e informar los grupos que vayan contra esta regla, por lo cual Facebook incluye un enlace en cada grupo el cual se dirige hacia un muro de reclamaciones y quejas. Las aplicaciones ms utilizadas en Facebook son el muro, las fotos y los regalos: Muro: El muro es un espacio en cada perfil de usuario que permite que los amigos escriban mensajes para que el usuario los vea. Solo es visible para usuarios registrados. Permite incluir imgenes y poner cualquier tipo de logotipos en tu publicacin. Fotos: Segn Facebook, hay: o 5 mil millones de fotos de usuario. o 160 terabytes de almacenaje Regalos: Los regalos o gifts son pequeos iconos con un mensaje. Los regalos dados a un usuario aparecen en el muro con el mensaje del donante, a menos que el donante decida dar el regalo en privado, en cuyo caso el nombre y el mensaje del donante no se exhibe a otros usuarios. Una opcin annima est tambin disponible, por la cual cualquier persona con el acceso del perfil puede ver el regalo, pero solamente el destinatario ver el mensaje. Algunos regalos son gratuitos y el resto cuestan un dlar, (es necesario un nmero de tarjeta de crdito o cuenta Paypal). o Aplicaciones: Son pequeas aplicaciones con las que puedes averiguar tu galleta de la suerte, quien es tu mejor amigo, descubrir cosas de tu personalidad, etc. o Juegos: La mayora de aplicaciones encontradas en Facebook se relacionan con juegos de rol. Entre los clebres se encuentran juegos como FarmVille, CityVille, etc.

4.4.1. API Facebook


La API de Facebook ofrece los mtodos necesarios para obtener toda la informacin de la red social del usuario que est ejecutando la aplicacin. En el caso de este proyecto, va a ser necesario acceder a la informacin personal del usuario, los amigos de ste y los intereses de dichos amigos [36]. En la zona de recursos de Facebook se ofrecen dos APIs oficiales para el desarrollo, una en PHP y otra en Java. Puesto que la aplicacin est desarrollada para Android, para la realizacin de este proyecto ha sido requerido la API para Java. Para el desarrollo de la aplicacin ha sido necesario obtener una API Key (ver Anexo IV).

4.5. Facebook-Tourism
Una vez comentados los dos pilares principales de la aplicacin, explicar el desarrollo de la misma, centrndome en los componentes, explicar los archivos XML, las distintas clases, el uso del GPS, etc. 58

4.5.1. Arquitectura de la aplicacin

Figura 33: Arquitectura de la aplicacin

En la figura 33, se muestra la arquitectura de la aplicacin, en primer lugar, sta se conecta a Facebook, para obtener los amigos y los lugares de estos. Cuando tiene esos datos, se los enva a la clase Mapa, y una vez recibidos, se conecta con el servidor de amigos para ver cuales estn cerca y utiliza el servidor de Google Maps para localizar los lugares que les gustan a esos amigos. Cuando el usuario pulsa el botn Acceder la aplicacin se conecta a los servidores de Facebook y obtiene los datos relacionados con el usuario, a continuacin se produce la comunicacin entre las clases Principal y Mapa, y se obtienen los amigos que estn cerca. Cuando un usuario selecciona a un amigo en concreto se cargan los lugares que le gustan y cuando un usuario selecciona un lugar se utilizan los servicios web de Google para obtener la ruta desde la posicin del usuario hasta el lugar indicado. 59

4.5.2. Android Manifest


El documento Manifest de la aplicacin est formado por cuatro secciones que se pueden configurar de forma grfica, o se puede utilizar una quinta seccin, en la que se escribira el cdigo en XML. La primera seccin que encontramos es el Manifest propiamente dicho, esta seccin es como un ndice en el que hay que indicar el paquete, la versin de la aplicacin, los extras, etc. Adems contiene enlaces a las dems secciones del documento. La figura 34 muestra en detalle esta seccin del Manifest.

Figura 34: Manifest

La segunda seccin que encontramos est centrada en la aplicacin. Esta seccin es sumamente importante, ya que, aparte de poder personalizar el icono o indicar la etiqueta de la aplicacin; es en esta seccin donde se indicaran que clases son las que se van a mostrar en la aplicacin, y cul de ellas es la primera. Todos los detalles de esta seccin se muestran en la figura 35.

60

Figura 35: Application

La tercera seccin se corresponde con los permisos que tiene la aplicacin. sta es otra de las secciones fundamentales del manifiesto, ya que si no incluimos permisos a las caractersticas hardware o software que necesita la aplicacin, sta no funcionar correctamente. Para el caso de la aplicacin Facebook-Tourism es necesario que pueda conectarse a Internet, que pueda escribir en disco, que pueda administrar cuentas de usuario, que pueda acceder al GPS y utilizar el vibrador del mvil. Los permisos de la aplicacin Facebook-Tourism se muestran en la figura 36.

Figura 36: Permissions

La ltima seccin grfica es la seccin Instrumentation que en este proyecto no ha sido utilizada. Para finalizar esta seccin mostrar, en la figura 37, el cdigo en XML del documento. Todo este cdigo ha sido generado por las distintas interfaces grficas, aunque se puede editar directamente desde el cdigo fuente. 61

Figura 37: Cdigo XML

Como se puede ver en la figura 37, al comienzo del documento se declara el paquete, la versin del cdigo, la localizacin de los documentos XML, etc. A continuacin se muestran los permisos, tambin se incluye la librera de mapas necesaria para poder mostrar el mapa en la aplicacin. En la seccin del cdigo donde se indican las clases hay una especificacin que no se puede utilizar desde la ventana grfica, esta especificacin es necesaria para que la aplicacin no gire la pantalla cuando se gire el telfono. Tambin se indica qu ventana de la aplicacin ser la primera en lanzarse.

4.5.3. Permisos
Los permisos son muy importantes en una aplicacin Android. Cuando se instala una aplicacin en Android, el usuario tiene que aceptar los permisos y en caso de creer que no son necesarios (por ejemplo permisos de acceso a datos personales para una aplicacin de linterna) rechazarlos y buscar otra aplicacin que ofrezca los mismos servicios pero con menos permisos [37]. Cada uno de los permisos tiene distinto grado de peligrosidad dependiendo del perfil de usuario que use el telfono. A partir de aqu voy a exponer todos los permisos que hay en Android en su nombre en clave para desarrolladores, con una breve explicacin e indicar adems, cules de ellos estoy usando en la aplicacin: Android.permission.ACCESS_CHECKIN_PROPERTIES: Permite la lectura/escritura de la tabla de propiedades de la base de datos del registro pudiendo cambiar los valores que son actualizables. Android.permission.ACCESS_COARSE_LOCATION: Permite la localizacin usando las redes inalmbricas en las que te encuentres. Bsicamente es una localizacin por IP. Android.permission.ACCESS_FINE_LOCATION: Permite localizar al usuario utilizando la antena GPS del dispositivo. Este permiso es requerido en la aplicacin. Android.permission.ACCESS_LOCATION_EXTRE_COMMANDS: Permite el acceso a la localizacin otorgada por los operadores de telefona. Para poder utilizar este permiso en Espaa (de forma legal) necesitas una orden judicial. Android.permission.ACCESS_MOCK_LOCATION: Es un permiso de depuracin, emula a un operador de telefona y sirve para la localizacin.

62

Android.permission.ACCESS_NETWORK_STATE: Permite conocer el estado de la red. Android.permission.ACCESS_SURFACE_FLINGER: Permite el acceso a las caractersticas de bajo nivel del deflector. Permite el acceso a los identificadores de cuenta. Android.permission.WIFI_STATE: Permite leer informacin sobre las redes Wifi. Android.permission.ACCOUNT_MANAGER: Slo el sistema y las aplicaciones del sistema pueden obtener este permiso. Permite el acceso a los identificadores de cuenta. Android.permission.AUTHENTICA_ACCOUNTS: Permite a una aplicacin emular un identificador de cuenta para acceder al administrador de cuentas. Android.permission.BATTERY_STATS: Permite el acceso a las estadsticas de la batera. Android.permission.BIND_APPWIDGET: Permite la comunicacin entre una aplicacin y los datos que gestiona el servicio AppWidget. El AppWidget es el encargado de manejar los widgets de la pantalla y el permiso se usa para acceder a los datos que hayan sido generados por los distintos widgets Android.permission.BIND_DEVICE_ADMIN: Este permiso es requerido por el receptor de la administracin del dispositivo para asegurar que slo el sistema puede interactuar con l. Android.permission.BIND_INPUT_METHOD: Este permiso es requerido por un InputMethodService para asegurarse que slo el sistema puede unirse a l. Android.permission.BIND_REMOTEVIEWS: Este permiso es requerido por un RemoteViewsService para asegurarse que solo el sistema puede unirse a l. Android.permission.BIND_WALLPAPER: Este permiso es requerido por WallpaperService para asegurarse que slo el sistema puede unirse a l. Android.permission.BLUETOOTH: Permite la conexin entre aplicaciones y dispositivos conectados por bluetooth. Android.permission.BLUETOOTH_ADMIN: Permite a una aplicacin buscar y conectar dispositivos bluetooth. Android.permission.BRICK: Es necesario para conectar o desconectar el telfono (es muy peligroso). Android.permission.BROADCAST_PACKAGE_REMOVED: Permite a una aplicacin difundir una notificacin cuando una aplicacin ha sido desinstalada. Android.permission.BROADCAST_SMS: Permite a una aplicacin difundir una notificacin de mensaje sms recibido. Android.permission.BROADCAST_STICKY: Permite la difusin de mensajes pegajosos (broadcast). Android.permission.BROADCAST.WAP.PUSH: Permite a una aplicacin difundir notificaciones de mensajes wap entrantes. Android.permission.CALL_PHONE: Permite a una aplicacin realizar llamadas de telfono sin necesidad de usar el dialer de Android.

63

Android.permission.CALL_PRIVILEGED: Igual que la anterior pero adems permite usar las llamadas de emergencia. Android.permission.CAMERA: Permite usar la cmara de fotos/video. Android.permission.CHANGE_COMPONENT_ENABLED_STATE: Permite a una aplicacin cambiar de estado si un componente (que no sea de la aplicacin) esta iniciado o no. Android.permission.CHANGE_CONFIGURATION: Permite cambiar la configuracin del sistema (como por ejemplo los Locale). Android.permission.CHANGE_NETWORK_STATE: Permite el cambio de conectividad de la red. Android.permission.CHANGE_WIFI_MULTICAST_STATE: Permite a las aplicaciones acceder al modo Wifi multicast. Android.permission.CHANGE_WIFI_STATE: Permite el cambio de estado de la conexin Wifi. Android.permission.CLEAR_APP_CACHE: Permite a una aplicacin borrar la cach creada por otras aplicaciones. Android.permission.CLEAR_APP_USER_DATA: Permite a una aplicacin el borrado de los datos de usuario. Android.permission.CONTROL_LOCATION_UPDATES: Permite activar/desactivar la ubicacin sobre las actualizaciones del proveedor de telefona. No se suele usar por aplicaciones normales. Android.permission.DELETE_CACHE_FILES: Permite el borrado de los ficheros en cach. Android.permission.DELETE_PACKAGES: Permite el borrado de aplicaciones. Android.permission.DEVICE_POWER: Permite el acceso de bajo nivel al administrador de energa del dispositivo. Android.permission.DIAGNOSTIC: Permite el acceso de lectura/escritura a las herramientas de diagnstico. Android.permission.DISABLE_KEYGUARD: Permite a una aplicacin el desbloqueo del bloqueo del teclado Android.permission.DUMP: Permite a una aplicacin recuperar la informacin volcada por los servicios del sistema. Android.permission.EXPAND_STATUS_BAR: Permite expandir o contraer la barra de estado. Android.permission.FACTORY_TEST: Sirve para iniciar una aplicacin en modo text. Solo el usuario root puede usar este permiso en una ROM compilada en modo de pruebas. Android.permission.FLASHLIGHT: Permite el acceso al flash. Android.permission.FORCE_BACK: Permite a una aplicacin volver atrs sea cual sea la aplicacin que hay en primer plano. Android.permission.GET_ACCOUNTS: Permite acceder al listado de cuentas registradas en el sistema. Android.permission.GET_PACKAGE_SIZE: Permite a una aplicacin saber el tamao de cualquier paquete. Android.permission.GET_TASKS: Permite saber las aplicaciones que hay en ejecucin.

64

Android.permission.GLOBAL_SEARCH: Este permiso es utilizado por proveedores de contenido (Content Proveider) para permitir la bsqueda global del sistema y acceder a sus datos. Android.permission.HARDWARE_TEST: Permite el acceso a los perifricos de hardware. Est diseado para chequear hardware. Android.permission.INJECTS_EVENTS: Permite a una aplicacin insertar eventos tales como una pulsacin en pantalla, uso de trackball, etc. Android.permission.INSTALL_LOCATION_PROVIDER: Permite a una aplicacin instalar un proveedor de localizacin en el location manager. Android.permission.INSTALL_PACKAGES: Permite a una aplicacin la instalacin de otras aplicaciones. Android.permission.INTERNAL_SSTEM_WINDOW: Permite a una aplicacin abrir ventadas utilizadas por la interfaz de usuario del sistema. Android.permission.INTERNET: Permite a una aplicacin abrir sockets. Este permiso se utiliza en la aplicacin. Android.permission.KILL_BACKGROUND_PROCESSES: Permite a una aplicacin llamar al killBackgroundProcesses. Android.permission.MANAGE_ACCOUNTS: Permite a una aplicacin administrar las cuentas almacenadas en el AccountMAnager. Este permiso se utiliza en la aplicacin. Android.permission.MANAGE_APP_TOKENS: Slo es usado por el sistema, permite crear o destruir tokens. Android.permission.MASTER_CLEAR: No pone nada sobre este permiso en la documentacin de Android. Android.permission.MODIFY_AUDIO_SETTINGS: Permite la modificacin de las caractersticas del sonido. Android.permission.MODIFY_PHONE_STATE: Permite la modificacin del estado del telfono (encendido, apagado,). No permite realizar llamadas. Android.permission.MOUNT_UNMOUNT_FILESYSTEMS: Permite montar sistemas de almacenamiento externo. Android.permission.MOUNT_FORMAT_FILESYSTEMS: Permite formatear sistemas de almacenamiento externo. Android.permission.NFC: Permite las operaciones de entrada/salida de los dispositivos NFC. Android.permission.PROCESS_OUTGOING_CALLS: Permiso obsoleto Android.permission.READ_CALENDAR: Permite leer los datos almacenados en el calendario por el usuario Android.permission.READ_CONTACTS: Permite a una aplicacin acceder a la lectura de los datos de tus contactos. Android.permission.READ_FRAME_BUFFER: Permite a una aplicacin tomar una captura de pantalla y generalmente el acceso a los datos del
frame buffer.

Com.Android.browser.permission.READ_HISTORY_BOOKMARKS: Permite el acceso en modo lectura al historial y los favoritos del buscador. Android.permission.READ_INPUT_STATE: Permite a una aplicacin recuperar el estado de teclas o interruptores. Slo es usado por el sistema

65

Android.permission.READ_LOGS: Calificado como permiso peligroso. Permite el acceso a los logs creados por el sistema. En los logs puedes encontrar claves de usuario. Android.permission.READ_PHONE_STATE: Acceso de solo lectura al estado del telfono. Android.permission.READ_SMS: Permite a una aplicacin leer los sms. Android.permission.READ_SYNC_SETTINGS: Permite a una aplicacin leer la configuracin de la sincronizacin. Android.permission.READ_SYNC_STATS: Permite a una aplicacin leer estadsticas de la sincronizacin Android.permission.RECEIVE_BOOT_COMPLETED: Permite a una aplicacin recibir el ACTION BOOT COMPLETED. Android.permission.RECEIVE_MMS: Permite monitorizar los mms recibidos Android.permission.RECEIVE_SMS: Permite monitorizar los sms recibidos. Android.permission.RECEIVE_WAP_PUSH: Permite a una aplicacin monitorizar las notificaciones wap entrantes. Android.permission.RECORD_AUDIO: Permite grabar audio. Android.permission.REORDER_TASKS: Permite a una aplicacin reorganizar las tareas. Android.permission.RESTART_PACKAGES: Permiso obsoleto. Android.permission.SEND_SMS: Permite a una aplicacin enviar sms. Android.permission.SET_ACTIVITY_WATCHER: Slo se usa en modo de depuracin Com.android.permission.SET_ALARM: Permite a una aplicacin crear una alarma en el sistema. Android.permission.SET_ALWAYS_FINISH: Permite a una aplicacin controlar si las actividades en segundo plano son finalizadas. Android.permission.SET_DEBUG_APP: Configura una aplicacin para ser depurada. Android.permission.SET_ORIENTATION: Permite a una aplicacin acceder a los parmetros de la rotacin de pantalla. Android.permission.SET_POINTER_SPEED: Acceso de bajo nivel al puntero Android.permission.SET_PREFERRED_APPLICATIONS: Permiso obsoleto. Android.permission.SET_PROCESS_LIMIT: Permite a una aplicacin limitar el nmero de aplicaciones que se pueden ejecutar en un sistema Android Android.permission.SET_TIME: Permite cambiar la hora del sistema. Android.permission.SET_TIME_ZONE: Permite cambiar la zona horaria. Android.permission.SET_WALLPAPER: Permite a una aplicacin poner un salvapantallas. Android.permission.SIGNAL_PERSISTENT_PROCESSES: Permite a una aplicacin enviar una seal a los procesos persistentes. Android.permission.STATUS_BAR: Permite a una aplicacin abrir, cerrar o deshabilitar la barra de estado y sus iconos. 66

Android.permission.SUBSCRIBED_FEEDS_READ: Permite a una aplicacin acceder al feed del proveedor de contenido Android.permission.SUBSCRIBED_FEEDS_WRITE: No hay informacin disponible sobre este permiso. Android.permission.SYSTEM_ALERT_WINDOW: Permite a una aplicacin abrir ventanas usando TYPE SYSTEM ALERT. Android.permission.UPDATE_DEVICE_STATS: Permite actualizar las estadsticas del dispositivo. No es usado por aplicaciones normales. Android.permission.USE_CREDENTIALS: Permite a una aplicacin solicitar tokens de autenticacin del account manager. Android.permission.USE_SIP: Permite a una aplicacin usar el servicio SIP Android.permission.VIBRATE: Permite el acceso al vibrador del dispositivo. Este permiso se utiliza en la aplicacin. Android.permission.WRITE_APN_SETTINGS: Permite a una aplicacin modificar los ajustes APN. Android.permission.WAKE_LOCK: Permite el acceso a los bloques de energa para mantener el procesador durmiendo o mantener la pantalla apagada. Android.permission.WRITE_CALENDAR: Permite escribir datos en el calendario. No permite leer los datos. Android.permission.WRITE_CONTACTS: Permite escribir contactos en la agenda. No permite leer los datos. Android.permission.WRITE_EXTERNAL_STORAGE: Permite a una aplicacin escribir en el almacenamiento externo. Este permiso se utiliza en la aplicacin. Android.permission.WRITE_GSERVICES: Permite a una aplicacin modificar el servicio de mapa de Google. Com.Android.browser.permission.WRITE_HISTORY_BOOKMARKS: Permite a una aplicacin aadir favoritos y modificar el historial del navegador. Android.permission.WRITE_SETTINGS: Permite a una aplicacin leer y escribir los ajustes del sistema. Android.permission.WRITE_SMS: Permite a una aplicacin escribir sms. Android.permission.WRITE_SNC_SETTINGS: Permite a una aplicacin escribir los ajustes de sincronizacin.

4.5.4. Interfaz de la aplicacin


La aplicacin de este proyecto est compuesta por dos ventanas diseadas para el programa, ms otra que aparece al identificarse en la red social Facebook. Esta ltima aparece debido a la API de Facebook La primera de las ventanas es introductoria, est compuesta por un mensaje de bienvenida, dos botones (uno se usa para conectarse, y el otro para salir de la aplicacin) y un enlace a la pgina de Facebook, para que aquellos usuarios que no tienen una cuenta en dicha red social puedan registrarse y as usar la aplicacin. Dicha ventana se muestra en la figura 38.

67

Figura 38: Ventana Principal

Cuando se pulsa el botn Acceder, se lanza un evento que trata de conectarse a la red social Facebook. Lo primero que se necesita es identificar al usuario, para as poder bajarse la lista de amigos y los intereses de estos. La interfaz que se muestra la figura 39 es la que proporciona la API de Facebook, donde, al que igual que en Internet, hay que poner el nombre de usuario y la contrasea. Cuando se pulsa el botn Entrar salta el aviso de si se quiere guardar la contrasea o no. Al ser un dispositivo que se puede perder, no es aconsejable guardar la contrasea en el mvil.

Figura 39: Identificacin

68

La ltima interfaz que tiene la aplicacin es en la que el usuario pasar la mayor parte del tiempo. En la parte de arriba de la pantalla se muestra el nombre del usuario. Justo debajo, hay dos etiquetas, una para amigos y otra para lugares, cuando el usuario pulsa sobre la de amigos, aparecer un men con un listado de todos los amigos que tiene el usuario. Cuando el usuario elige a un amigo, puede pulsar en la etiqueta lugares y ver todos los lugares que le gustan a ese amigo en concreto. Al elegir un lugar, se mostrar en el mapa la ruta para llegar desde la posicin del usuario hasta ese lugar. El usuario tambin podr cambiar la vista del mapa a vista de trfico, a vista de satlite o vista de StreetView. El mapa tambin puede ser manipulado por el usuario, aumentando el zoom, eligiendo alguna direccin, etc. Todos estos detalles se pueden ver en la figura 40.

Figura 40: Ventana del Mapa

4.5.5. Archivos XML


Para la realizacin del proyecto, ha sido necesaria la utilizacin de cuatro documentos XML. De uno de ellos (AndroidManifest.xml) ya he hablado anteriormente, por lo que no es necesario que vuelva a repetir lo mismo. Uno de los documentos XML del proyecto es el que se ha utilizado para crear la ventana del mapa. En el apartado anterior ya he mostrado la vista del siguiente documento XML y la he explicado. En esta seccin voy a aadir los datos que no he explicado en la seccin anterior. En el documento XML es donde se declaran todos los elementos de la interfaz grfica, la mayora de los elementos se aaden directamente con etiquetas de TextView o Checkbox, pero para insertar el mapa hay que insertar una clase MapView con una clave que explicare como obtenerla en el ANEXO IV. Al declarar un nuevo elemento se declaran todas las caractersticas que se quieran utilizar, como por ejemplo la posicin en el eje X, en el eje Y, el texto que queremos mostrar, etc. La figura 41 muestra el documento mapa.xml donde se puede ver como se declara la clase necesaria para mostrar el mapa.

69

Figura 41: Mapa.xml

De la misma forma que es necesario un documento XML para la ventana del mapa, es necesario otro documento para la ventana principal (main.xml). Esta ventana no tiene ningn mapa, y ninguno de los elementos que aparecen en ella es importado desde ninguna clase. Este documento se ve en la figura 42, en l se puede apreciar como se crean cinco textView que se muestran en la ventana y los dos botones (necesarios para entrar y salir de la aplicacin). En la declaracin de cada elemento hay que indicar el texto que van a mostrar, la posicin de los elementos (eje X e Y), su layout, etc. Estos indicadores son necesarios para que los elementos se muestren correctamente, adems, en este documento se indica que la orientacin de la pantalla sea siempre vertical, y que no se gire cuando se gire el telfono.

Figura 42: Main.xml

70

Adems de los documentos ya mencionados, tambin ha sido necesaria la creacin de otro documento donde se declaran las variables (Strings.xml). Estas variables se declaran como String y son llamadas desde los otros documentos XML. Por ejemplo, se han declarado el color azul y negro, que ser utilizado para interfaz grfica. En la figura 43 se ve este documento.

Figura 43: Strings.xml

4.5.6. Geo localizacin


El SDK de Android incluye un paquete que proporciona soporte primario para montar servicios de localizacin: Android.location. Este paquete contiene varias clases relacionadas con los servicios de localizacin y, adems, incluye el servicio LocationManager el cual proporciona una API para determinar la localizacin del dispositivo. LocationManager no puede ser instanciado directamente sino que se debe obtener un controlador, tal y como se muestra en la figura 44.

Figura 44: LocationManager

Cuando se obtiene el control de un LocationManager, se pueden realizar las 3 siguientes acciones: Solicitar una lista de todos o algunos de los LocationProviders disponibles. Registrarse o des-registrarse para actualizaciones peridicas de la posicin. Registrarse o des-registrarse de eventos cuando el dispositivo se encuentra en determinada ubicacin.

Para obtener la localizacin, hay que llamar al mtodo getLastKnownLocation tal y como se muestra en la figura 45.

Figura 45: getLastKnowLocation

Para

obtener

actualizaciones

peridicas

se

utiliza

el

mtodo

requestLocationUpdate. La figura 46 muestra la llamada al mtodo y los

parmetros necesarios para su funcionamiento.

Figura 46: requestLocationUpdates

71

4.5.7. Mapas
El SDK de Android, tambin incluye un paquete que proporciona soporte primario para los mapas. Este paquete es com.google.android.maps. En este paquete se incluyen varias clases relacionadas con el rendering, control y dibujo sobre mapas. La ms importante es la clase MapView que automticamente dibuja un mapa bsico de GoogleMaps cuando se aade al layout de la aplicacin. Para obtener el mapa del documento XML hay que ejecutar la sentencia mostrada en la figura 47.

Figura 47: Mapa

Para poder obtener un MapView, se necesita previamente un API Key de GoogleMaps (ver ANEXO IV). Adems, para poder hacer uso de esta clase, se ha de aadir el permiso en el manifiesto dado que no es un paquete estndar de Android. La figura 48 muestra el cdigo que hay que aadir al documento AndroidManifext.xml para poder utilizar los mapas de Google en la aplicacin.

Figura 48: Usando librera

Despus de todo el procedimiento, se puede trabajar sobre la vista del mapa con la clase Overlay. En la figura 49 se muestra un ejemplo de uso.

Figura 49: Capas de un mapa

4.5.8. Servidor
Una de las caractersticas de esta aplicacin es que el usuario puede localizar a los amigos que usan esta aplicacin. Para hacerlo, al comienzo de la ejecucin la aplicacin se conecta a un servidor que he preparado con una base de datos (ver apartado 4.5.8.) e indica el Id de usuario de Facebook, y sus coordenadas. Como respuesta del servidor el cliente recibe una lista con todos los usuarios de la aplicacin que estn a una distancia inferior a 500 metros. Posteriormente, la aplicacin filtra esos usuarios y muestra slo de los que estn en la lista de amigos. El clculo de la distancia se hace en dos partes. Una parte la realiza el cliente y otra el servidor. El servidor calcula la distancia euclidea entre dos usuarios y enva los que estn a una distancia menor de la indicada. Por otra parte, cuando el cliente recibe las coordenadas de los amigos que estn cerca, calcula la ruta que tendra que seguir el usuario caminando para encontrar a esa persona, si la distancia de esta ruta (no olvidemos que no es en lnea recta, sino callejeando) es menor de 500 metros, entonces se mostrar la ruta en el mapa, en caso contrario se descartar. Debido a que el servidor tiene que aceptar conexiones de mltiples usuarios de forma simultnea, he decido utilizar un servidor concurrente que escucha en el puerto 15858. Cada vez que llega una nueva conexin, el servidor crea un objeto que hereda de la clase Thread y recibe el socket de la conexin como parmetro, por lo que cada vez 72

que se instancia un objeto se crea un nuevo hilo y se pueden atender varias conexiones simultneamente.

4.5.9. Base de datos


La base de datos que utiliza el servidor es una base de datos muy sencilla compuesta slo por una tabla con tres campos. Estos campos son el id del usuario, la latitud y la longitud. No son necesarias ms tablas debido a que el servidor se encarga de localizar los usuarios y ya es la propia aplicacin la que se encarga de filtrar qu usuarios son amigos y cules no. A continuacin mostrar las figuras 50 y 51 que se corresponden con la tabla de amigos con varios amigos registrados con sus coordenadas GPS y otra de la definicin de la tabla de amigos.

Figura 50: Contenido Tabla amigos

Figura 51: Definicin de la tabla amigos

4.5.10. Diagrama de clases informal


Los diagramas de clases permiten describir las clases que implementarn el sistema, las interfaces, las relaciones, etc. Es este caso, se trata del diagrama de clases informal, por lo que solo describir la estructura de clases. Ser posteriormente, en el diagrama de clases formal, cuando se especifiquen los atributos, mtodos y dems caractersticas de las clases. Estos diagramas informales, se usan para la fase de anlisis. Para cada clase e interfaz se describen las asociaciones, relaciones de dependencia y de realizacin. Las clases se unen mediante asociaciones, que tienen asociada una multiplicidad, teniendo cada componente que interviene en la asociacin un rol. Adems, y como se puede apreciar en la figura 52, expresamos para las asociaciones la navegabilidad que indica quin almacena a quin. Una parte muy importante de los diagramas de clases son las especificaciones de las asociaciones. Las composiciones son asociaciones fuertes entre un objeto y sus componentes, se representan mediante un rombo negro en el extremo opuesto. En este caso el objeto componente pertenece solamente al objeto compuesto, siendo el objeto compuesto el responsable de sus objetos componentes. Por otro lado, las agregaciones dbiles se dan entre un objeto y sus componentes, las cuales crea, y se representa con un rombo blanco en cada objeto compuesto. En este caso, el objeto componente puede estar incluido en varias agregaciones, ser el componente de varios objetos compuestos. El objeto puede ser creado por otras clases y cuando el objeto se destruye no implica que los componentes se destruyan. Esta es la diferencia con las agregaciones fuertes, en el que el objeto compuesto crea y destruye sus componentes. 73

Adems, en el diagrama de clases informal se representan las herencias y las dependencias entre clases. Las relaciones de dependencia se dan cuando por ejemplo una clase contiene en alguno de sus mtodos como parmetro formal a otra, o una clase contiene en alguno de sus mtodos una variable local de esa clase.

Figura 52: Diagrama de clases informal

4.5.11. Diagrama de clases formal


Un diagrama de clases formal es un tipo de diagrama esttico que describe la estructura de un sistema mostrando sus clases, atributos y las relaciones entre ellos. Los diagramas de clases son utilizados durante el proceso de anlisis y diseo de los sistemas, donde se crea el diseo conceptual de la informacin que se manejar en el sistema, y los componentes que se encargaran del funcionamiento y la relacin entre uno y otro no. La aplicacin est formada por cinco clases, dos de esas clases son heredadas de la clase Activity, tienen componentes grficos y son las que se le mostrarn al usuario. En la figura 53 se muestra el diagrama de clases formal de la aplicacin.

74

Figura 53: Diagrama de clases formal

75

4.5.12. Diagramas de secuencia


Los diagramas de secuencia, como vamos a ver en cada uno de los presentados, permiten ver con claridad y rpidamente la interaccin de las distintas clases descritas en el diagrama de clases a travs de las funcionalidades de que dispone el proyecto. Los diagramas de secuencia formales describen la interaccin mediante el uso de mtodos y parmetros, de forma que especifican todas las clases que intervienen realmente en la implementacin.

4.5.12.1. Actividad conectar


En la figura 54 muestro el diagrama de secuencia para la actividad de conectar. Esta actividad se realiza cuando el usuario quiere acceder a la aplicacin y tiene que conectarse primero a la red social para bajar la lista de amigos y los intereses de estos.

Figura 54: Diagrama secuencia conectar

4.5.12.2. Actividad registrarse


La figura 55 muestra la llamada de los mtodos necesarios para que un usuario que no est registrado en Facebook pueda registrarse y utilizar la aplicacin.

Figura 55: Diagrama de secuencia registrarse

76

4.5.12.3. Buscar un amigo


La figura 56 se corresponde con el diagrama de actividad de obtener la lista de amigos de Facebook, ste se realiza mediante una peticin al servidor, en el que devuelve un objeto con todos los amigos, y este objeto (convertido en cadena) se enva a la clase Mapa.

Figura 56: Diagrama Secuencia buscar amigo

4.5.12.4. Buscar un lugar


La figura 57 muestra el diagrama de secuencia que sigue la aplicacin a la hora de obtener los lugares que les gustan a los amigos. Cuando el usuario se conecta a la aplicacin, sta manda un mensaje http al servidor de Facebook para obtener el listado de amigos. Con el listado de amigos descargado, se proceder a buscar los lugares que le gustan a cada amigo, de ah, que la segunda peticin que se le hace al servidor est en un bucle. Una vez descargados todos los lugares de todos los amigos, se enviarn los datos desde la clase Principal a la clase Mapa, donde sern tratados para que el usuario pueda elegir el lugar que ms le interese.

77

Figura 57: Diagrama de secuencia buscar lugares

4.5.13. Activity Principal


En este punto, ya he explicado cmo est estructurado el documento XML del Activity principal as como su funcionamiento desde el punto de vista de la interfaz de usuario. A continuacin voy a explicar cmo esta implementado dicho Activity. Al ser una clase que tiene que mostrarse al usuario, es fundamental que herede de la clase Activity. Los atributos grficos han sido declarados como globales para poder acceder a ellos desde cualquier mtodo de la clase. Al heredar de la clase Activity es necesario la implementacin de varios mtodos, uno de ellos es onCreate(), algo as como un mtodo Main en una aplicacin Java. Este mtodo es el primero en ejecutarse cuando se inicializa la 78

aplicacin y en l se instancian todas las interfaces grficas y se crea el objeto Facebook, necesario para acceder a la red social. Para poder instanciar el objeto Facebook, es necesario obtener el API Key de aplicacin (ver Anexo V). En la figura 58 mostrar el cdigo necesario para la inicializacin de la clase:

Figura 58: Cdigo Principal (I)

Para poder utilizar la API, es necesario indicar qu permisos va a tener la aplicacin, estos se declaran como cadenas y se insertan en un vector, y ser ese vector el que se le pasar como parmetro al mtodo encargado de realizar la conexin. Adems del vector de permisos y el Activity ah que pasarle tambin un dialogListener, que es el que aparece pidiendo la direccin de correo electrnico y la contrasea al usuario. Como ya dije anteriormente, esta interfaz es creada por Facebook, por lo que yo no tengo ningn control en su diseo ni en su comportamiento. La figura 59 muestra la fraccin de cdigo necesaria para poder acceder mediante la API de Facebook.

Figura 59: Cdigo Principal (II)

Una vez que el usuario ha sido identificado correctamente, procederemos a obtener el listado de amigos que tiene y para cada amigo se realizar la peticin de sus intereses. Como ya se coment durante la explicacin de la interfaz del mapa, aparece el nombre del usuario registrado, por lo que habr que realizar una consulta para obtener el nombre del usuario. La API de Facebook, nos proporciona un mtodo capaz de realizar las consultas al servidor indicndole por parmetros que queremos buscar. La primera consulta que se realiza es para obtener los datos del usuario, de esta forma podemos obtener el nombre y el Id de dicho usuario. Para realizar esta bsqueda, se utiliza el parmetro me.

79

La siguiente consulta que se realiza es para obtener el listado de amigos del usuario, esta consulta devuelve un objeto JSON con el nombre, el Id, y todos los dems datos que hayan proporcionado esos usuarios. Esta consulta se realiza utilizando como parmetro me/friends. Una vez que tenemos el objeto JSON, hay que extraer los Ids de dichos usuarios para poder realizar la consulta de los lugares que le gustan a dichos usuarios. Esos Ids se guardarn en un vector, que ser usando ms adelante. El ltimo conjunto de consultas que se realiza es para obtener los intereses de cada usuario que es amigo del usuario de la aplicacin. Para realizar esta consulta utilizaremos como parmetro la cadena formada por el Id del usuario en cuestin seguido de /likes. Esa bsqueda, devuelve un objeto JSON, que al tratarlo devuelve un vector con los lugares que le gustan a ese amigo. Ese vector es insertado en una matriz, en la que cada fila representa los lugares que le gustan a un usuario en concreto. Si a un usuario no le gusta ningn lugar, en su posicin estar el valor null. La figura 60 muestra el cdigo necesario para hacer todas las consultas indicadas.

Figura 60: Cdigo Principal (III)

La ltima parte importante de esta clase es la encargada de enviar la informacin desde el Activity principal al Activity del mapa. Para hacerlo tenemos que utilizar un Intent e ir aadiendo los datos que queremos mandar mediante el mtodo putExtra. A este mtodo se le pasan dos atributos, el primero es la clave que utilizaremos para recuperarlo y el segundo es el dato que queremos mandar. Durante la implementacin del cdigo, este mtodo present un problema, y es que no puedes mandar datos que no se pueden serializar, por lo que todas las consultas a Facebook, hay que realizarlas antes de mostrar la vista del mapa. Otro inconveniente que hubo que afrontar fue el envo de la matriz de lugares a la clase Mapa. Esta matriz no es cuadrada, por lo que antes de enviar el vector convertido en array, hay que enviar la longitud de dicho array, y a continuacin se envan los datos. Cuando se reciben los arrays hay que volver a construir la matriz. 80

A continuacin muestro la figura 61 con el cdigo responsable del envo de los datos entre Activities:

Figura 61: Cdigo Principal (IV)

4.5.14. Activity de Mapas


Es este apartado voy a explicar la clase encargada de gestionar toda la funcionalidad de la clase que implementa la mayora de las funcionalidades del programa. Como todas las clases que heredan de Activity, o de alguna de sus subclases, es necesario que haya un mtodo onCreate(). En esta clase es, adems, el mtodo encargado de recibir los datos de la clase principal. Los datos se almacenan en un objeto de tipo Bundle, y sern recuperados cuando la aplicacin los requiera. En la figura 62 mostrar el cdigo encargado de recibir toda la informacin de a clase principal:

Figura 62: Cdigo Mapas (I)

Uno de los principales problemas que hubo a la hora de la comunicacin entre las aplicaciones es la limitacin del envo de datos. Ya expuse como haba solucionado el envo en la clase principal, y en la figura 63 muestro el cdigo necesario para la recepcin de datos:

Figura 63: Cdigo Mapas (II)

81

Uno de los principales requisitos de la aplicacin es el uso del GPS y la posibilidad de que se vaya actualizando la posicin cada vez que el usuario la cambie. Para mantener actualizada la posicin, es necesario que la gestin del GPS este ejecutndose en otro hilo. Para ello utilizar las clases Thread y Loop tal y como se muestra en la figura 64.

Figura 64: Cdigo Mapas (III)

Adems de las funciones ya indicadas, esta clase (Activity) tambin se encarga de dibujar en el mapa la posicin en el mapa del usuario, para hacerlo, utiliza las coordenadas obtenidas del GPS. Otra de las funcionalidades que realiza la clase Activity es la de mostrar amigos. Para hacerlo, se conecta al servidor y obtiene una lista de los usuarios de la aplicacin que estn a menos de 500 metros a la redonda. Cuando se han descargado todos los usuarios, el sistema comprueba si estn o no en la lista de amigos, y si es as, calcula la ruta para llegar hasta dnde est ese amigo. Una vez obtenida esa ruta, se calcula la distancia que recorrer el usuario, y si son menos de 500 metros se acepta y se muestra por pantalla. Despus de todo el proceso anterior, si algn amigo ha pasado el filtro, la aplicacin generar un aviso que se mostrar por pantalla y avisar al usuario mediante una vibracin de 0.5 segundos. A continuacin, en la figura 65, mostrar el cdigo necesario para generar el aviso al usuario:

Figura 65: Cdigo Mapas (VI)

Tal y como expuse cuando expliqu el funcionamiento de la interfaz grfica, son necesarios dos mens para cargar la informacin de esos mens, adems es necesario obtener la informacin que enva la clase principal. En el primer men se carga un listado con todos los amigos del usuario, estos datos vienen como un vector y se insertan en la vista del men. Una vez elegido un amigo, se cargan los lugares que le gustan a ese usuario. Para saber qu lugares hay que cargar de la matriz de lugares, y se utiliza el Id de usuario que identifica la posicin en la matriz en la que se encuentran los lugares. La ltima funcionalidad que implementa esta clase es mostrar los lugares que le gustan a los amigos y el lugar donde se encuentran estos, indicando la ruta para llegar hasta ellos. 82

4.5.15. Clase TratamientoJSON


Hasta este punto de la memoria ya he explicado cmo funcionan todos los Activities del proyecto, pero no he comentado nada de ninguna clase auxiliar. La clase que se trata en este apartado es utilizada para poder extraer los datos de las cadenas JSON que se obtienen del servidor de Facebook. Estos datos se obtienen cuando al API del cliente de Facebook se conecta al servidor y por ejemplo se descarga un listado de objetos JSON con todos los datos del usuario de Facebook, y de estos objetos se extraen el nombre de usuario y el Id. El Id es necesario almacenarlo para poder realizar las bsquedas de los intereses y el nombre de usuario lo utilizaremos para mostrarlo en el men de los amigos. Otra funcin que implementa esta clase es para obtener los lugares que les gustan a los amigos. Al igual que en el caso del usuario, cuando la API hace bsquedas de los lugares al servidor de Facebook, hay que tratar los objetos JSON obtenidos. Cuando se descargan los lugares, y se empiezan a tratar se insertan en objetos de tipo Intereses (ver 4.5.15.). Despus de tener todos los intereses almacenados, se le pasar un filtro y en funcin de la categora, se descartar o no. Por ltimo, esta clase tiene una funcin que se utiliza para filtrar qu lugares se encuentran cerca del usuario. Esta funcin es necesaria debido a que no se pueden realizar bsquedas de lugares usando Google Maps, por lo que hay que hacer una bsqueda de los lugares que hay cerca y filtrar los que les gustan a los amigos. La bsqueda se realiza utilizando el motor de bsqueda de Google Places, pero, en Espaa el proveedor de bsquedas son las paginasAmarillas.

4.5.16. Clase Intereses


Esta clase se utiliza para almacenar los datos relacionados con los intereses, tales como la fecha de creacin del muro, el id, la categora y el nombre. Es utilizada por la clase TratamientoJSON para guardar los lugares que les gustan a los usuarios, para posteriormente mostrarlos en el men de la pantalla cuando el usuario quiera ver los lugares que le gustan a un usuario concreto.

4.5.17. Clase Lugares


Esta clase se utiliza para almacenar los lugares que estn cerca del usuario. Como parmetros fundamentales se almacena la latitud, la longitud, el id y el nombre. Se utiliza para poder filtrar los lugares que estn cerca del usuario, de forma que cuando se crucen los datos con los de la clase Intereses, la aplicacin pueda mostrar (gracias a las coordenadas) los lugares que les gustan a los amigos del usuario.

4.5.18. Clase R
Esta clase es autogenerada cuando se crea el proyecto y se utiliza para enlazar los elementos de la interfaz grfica con las clases Java para poder modificarlo.

4.5.19. Problemas encontrados y soluciones propuestas


Durante la realizacin del proyecto me he enfrentado a numerosos problemas y contratiempos, algunos de ellos derivados de mi propia inexperiencia en el desarrollo de aplicaciones en esta plataforma, y otros causados por problemas de incompatibilidades y fallos que todava no se han solucionado en las distintas APIs que he utilizado.

83

En este apartado, expondr los problemas ms importantes y explicar como los he solucionado. El primer problema que tuve durante el desarrollo de la aplicacin fue la imposibilidad de identificarme en Facebook usando la aplicacin. Este problema se debi a un fallo en la documentacin de la API. En dicha documentacin, indicaba que los datos de registro del usuario haba que pasarlos convertidos en array como parmetro en el mtodo authorize(). Efectivamente, el segundo parmetro del mtodo es un array, pero ese array es para almacenar los permisos de los que dispone la aplicacin, no para guardar los datos del usuario. Buscando informacin en Internet, descubr que los datos los coga del dialog que crea la propia API y que no era necesario pasarlos implcitamente en el mtodo. En revisiones posteriores de la documentacin esa errata fue eliminada y actualmente se explica correctamente como utilizar la API. Una vez superado el primer problema, continu con el desarrollo de la aplicacin y comprob que no poda enviar el objeto de tipo Facebook que haba creado en la clase Principal a la clase Mapa. Esto supone un contratiempo importante, debido a que es necesario realizar numerosas consultas usando la API de Facebook y que no se dispone de dicha API en la clase Mapa. Este problema se presenta porque no se pueden enviar objetos no serializables entre activities, y la API de Facebook no se puede serializar. La solucin de este problema conllev que la aplicacin sea bastante ms lenta en el cambio de activities de lo que inicialmente se tena previsto. El motivo es porque en vez de realizar slo las consultas que el usuario indicara, por ejemplo buscando los lugares de slo un amigo. Ahora hay que realizar todas las consultas antes de mostrar el Activity del mapa y enviarlos desde el Activity principal, por lo que cuando hay un gran nmero de amigos, se realizan un gran nmero de solicitudes que son lentas. Una vez que tena claro cmo solucionar el problema, utilice varios arrays y una matriz para enviar datos entre los activities. Para hacerlo utilic la clase Intent, que ofrece el soporte necesario para ese tipo de comunicacin. Este ha sido sin duda el problema ms grave que me he encontrado mientras desarrollaba la aplicacin. Otro problema que tuve que solventar fue como identificar los amigos que estaban cerca del usuario de la aplicacin. Este problema presentaba dos fases, por un lado tena que almacenar en algn sitio ajeno a la aplicacin o conocer de alguna forma la posicin de los usuarios de la aplicacin, y por otro lado, tena que diferenciar los amigos que estn cerca o no. La primera parte del problema lo solucione con una base de datos centralizada (ver 4.5.6), de esa forma tendra localizados en todo momento a los usuarios de la aplicacin y podra enviarle a otros usuarios dicha informacin. La segunda parte era derivada de que un usuario que est a 500 metros a la redonda, cuando tiene que ir andando por las calles de una ciudad, puede ocurrir que se encuentre a 1000 metros o incluso ms. Estos datos el servidor no los puede calcular por lo que hay que hacer el clculo en dos veces, para estar seguro de que un usuario efectivamente est a menos de 500 metros. Para solucionarlo, hago un primer filtro en el servidor, este filtro calcula los usuarios (no necesariamente son amigos) que estn a menos de 500 metros del usuario, cuando el cliente recibe los datos, comprueba cuales de esos datos estn referidos a sus amigos y elimina los que no sean amigos. Utilizando un servicio Web de Google, puedo obtener un archivo XML con la informacin de la ruta a seguir, esto es, los puntos que marcar en el mapa, y entre los cuales hay una lnea recta. En este momento, vuelvo a utilizar la distancia euclidea para calcular la distancia que hay 84

entre cada par de puntos, si la suma de todas esas distancias es menor de 500 metros, entonces se avisa al usuario, en caso contrario se descarta. El ltimo problema importante que tuve que solucionar fue debido a un cambio en la poltica de uso de la API de Google Maps. En la versin anterior a la que yo he utilizado en este proyecto, se inclua un servicio que permita al usuario dibujar una ruta en el mapa indicando slo el punto de origen y el punto de fin. En la versin que haba disponible cuando fue necesario para el proyecto ese servicio haba sido eliminado, por lo que fue necesario el desarrollo de una clase o un mtodo que prestara el mismo servicio. Para solucionar ese problema tuve que recurrir a la documentacin y aprender a dibujar una lnea entre dos puntos, luego extrapolar ese sistema para un nmero indeterminado de puntos, y por ltimo, preparar esa solucin para que se actualice cuando se haga zoom en el mapa. Finalmente consegu solucionar todos los problemas que se presentaron, unos de forma ms eficiente, otros menos eficientemente, pero al final, los objetivos del proyecto se han cumplido, y los pequeos inconvenientes que se han tenido que permitir no son tan importantes como para rechazar el uso de la aplicacin. No obstante, todo es mejorable.

4.6. Pruebas
En esta seccin voy a explicar detalladamente en que consistieron las pruebas que realic al finalizar la aplicacin, y las conclusiones que extraje de ellas. Para aclarar dichas pruebas he dividido la seccin en dos, primero explicar las pruebas para la localizacin de lugares y a continuacin, explicar las pruebas para la localizacin de los amigos.

4.6.1. Localizacin de lugares


Como ya he comentado en secciones anteriores, para mostrar una posicin en un mapa, primero hago una bsqueda de los lugares que le interesan a un amigo en concreto, y despus, busco los lugares que estn a m alrededor y cruzo los datos. Si se produce algn resultado positivo se genera un aviso y se muestra la ruta al usuario. La figura 66 muestra la ventana de la aplicacin cuando ha encontrado un resultado.

85

Figura 66: Lugar encontrado

Para buscar los lugares que estn a m alrededor, utilizo un motor de bsqueda proporcionado por las pginasAmarillas y si algn lugar no se anuncia, entonces no aparecer en los resultados, aunque tenga un perfil en Facebook.

4.6.2. Localizacin de amigos


Para localizar los amigos, se realizarn tres tipos de pruebas que se exponen a continuacin:

4.6.2.1. Amigos fuera del radio


Esta prueba consisti en poner la posicin de un amigo fuera del radio de 500 metros y comprobar que efectivamente esos datos no se enviaban al cliente. Para comprobarlo, utilic un cdigo auxiliar que mostraba el id de los amigos descartados. Una vez comprobado que el funcionamiento era el esperado, se elimin el cdigo auxiliar para hacer ms eficiente el servidor.

4.6.2.2. Amigos dentro del radio, pero demasiado lejos


El objetivo de esta prueba era comprobar que la aplicacin es capaz de calcular la distancia que tendra que recorrer un usuario desde su posicin hasta la de un amigo. Si la distancia es mayor de 500 metros, se considera que ese amigo est demasiado lejos y ni siquiera se le avisa al usuario. Efectivamente, al realizar la prueba se obtuvo el resultado esperado, que era el descarte de esa informacin.

4.6.2.3. Amigos cerca


Por ltimo, esta prueba estaba pensada para comprobar que efectivamente el sistema calculaba la ruta para aquellos amigos que estaban lo suficientemente cerca. Para ello, introduje en la base de datos el id de una amigo, y su posicin eran unos 100 metros en lnea recta, cuando el servidor envi esos datos a la aplicacin, sta calcul la ruta y comprob que eran menos de 500 metros. Por este motivo, muestro un aviso al usuario de la aplicacin y adems indico la ruta ms corta que tendra que seguir caminando desde su posicin hasta la de su amigo. 86

Para calcular la distancia que se recorre en la ruta utilizo un servicio Web de Google, en el que dado el origen y el destino en coordenadas, devuelve un documento XML con el itinerario a seguir. Con estos datos, ya es muy fcil calcular la distancia a recorrer, basta con ir calculando la distancia entre dos puntos y luego ir sumando esas distancias para comparar con la distancia lmite. La figura 67 muestra un ejemplo de lo descrito en esta seccin.

Figura 67: Amigo encontrado

4.7. Conclusiones
Durante la realizacin del proyecto he tenido que afrontar y superar diversos problemas, as como implementar varias soluciones para un mismo problema y comprobar cul era la ms eficiente. El problema ms importante que encontr a la hora del desarrollo de la aplicacin fue el envo del objeto Facebook entre Activities, ya que al no ser un objeto serializable no se poda enviar. La solucin que encontr fue realizar las consultas antes del cambio de Activities y as al obtener los datos, los cuales se podan enviar al Activity del mapa. Otro problema que tuve que solventar durante la implementacin del cdigo fue idear una manera de localizar a los amigos que se encontraban cerca del usuario para poder avisarle. Lo solucion creando un servidor con una base de datos que almacenara las posiciones de todos los usuarios de la aplicacin y cada vez que un nuevo usuario se conecta este le enva que usuarios estn a menos de 500 metros de l. Cuando la aplicacin recibe los datos, se utiliza un servicio Web de Google para calcular la ruta y mostrarla en el mapa en caso de que sea menor de 500 metros. El ltimo gran problema que tuve que solventar fue poder dibujar las rutas para ir desde la posicin del usuario hasta el amigo o lugar encontrado. Este problema era causado por dos razones, por un lado Google ha suprimido un servicio que se encargaba de dibujar rutas, y por otro lado, para dibujar en el mapa no se utilizan GeoPoints, sino puntos creados a partir de esos GeoPoints. Lo solucione leyendo la documentacin y utilizando ejemplos que encontr en la bibliografa [48]. 87

Como conclusin final, puedo afirmar que el desarrollo de este proyecto me ha aportado conocimientos y experiencias que sin duda me sern de gran utilidad para proyectos Android futuros, ya sea mejorando la aplicacin expuesta en este documento o en la creacin de aplicaciones nuevas.

88

Conclusiones y trabajo futuro


En este captulo se va a realizar un pequeo resumen de cada uno de los captulos anteriores, destacando las conclusiones que se pueden obtener de cada uno de ellos, as como una conclusin general de la realizacin del proyecto. Para finalizar se han presentado unas lneas de trabajo futuro a partir de este proyecto, las cuales se detallarn a lo largo del captulo.

5.1. Conclusiones
A lo largo del desarrollo del proyecto se han ido cumpliendo los objetivos que se marcaron al comienzo del mismo. Gracias a este proyecto, los usuarios dispondrn de una aplicacin que les permitir localizar a sus amigos y los lugares que les gustan a ellos. El primer captulo sirve para introducirnos en el entorno del proyecto, se hizo un breve resumen de los objetivos que se perseguan con el proyecto, se explic el mbito de trabajo, se dise un plan de trabajo, y se expusieron la metodologa a seguir y las herramientas a utilizar. En este captulo se definieron algunas de las caractersticas del proyecto, como la localizacin de los amigos basndose en GPS y no en 3G, o la

89

utilizacin de la API de Google Maps para mostrar la posicin de los lugares y la ruta hasta ellos. El segundo y tercer captulo sirven para ponernos en situacin de cmo est actualmente el mercado de telefona mvil. El segundo captulo sirve para ver una comparativa de las plataformas mviles con ms cuota de mercado (iOS, Web-OS, BlackBerry OS, Symbian y Windows-Phone). A lo largo del captulo se realiza una comparativa de las distintas plataformas de distribucin que tienen dichos sistemas operativos. Tambin se hace una valoracin del estado actual de la plataforma, sus posibilidades de evolucin, etc. Al ser la temtica del proyecto el desarrollo de una aplicacin para Android he credo conveniente utilizar un captulo de este documento a explicar detalladamente las caractersticas de Android. A lo largo del tercer captulo se expliqua cmo funciona el sistema operativo, como estn interconectadas las distintas capas del sistema y cul es el ciclo de vida de una aplicacin. Este captulo sirve para poder entender cmo funciona el sistema, y como se desarrollan aplicaciones para l, adems se entrar en detalle en explicar los diferentes permisos que se le pueden asignar a una aplicacin ya que es una parte muy importante de las aplicaciones en Android. En el cuarto captulo es donde se expone el desarrollo de la aplicacin. Es en este captulo cuando explico el funcionamiento de las APIs de Google y de Facebook que son fundamentales para el desarrollo de la aplicacin. Por otro lado, tambin utilizo este captulo para mostrar todos los aspectos relacionados con la ingeniera del software de esta aplicacin. Adems de lo ya comentado, en este captulo se explica cmo funciona la aplicacin, como se han solucionado algunos problemas, etc. En lneas generales, puedo concluir que se han alcanzado los objetivos que se propusieron y que fueron desarrollados en el captulo 1. Adems, el desarrollo de la aplicacin me ha servido para profundizar mis conocimientos en la creacin de aplicaciones Android, ya que es un mercado emergente, que de momento, crece todos los aos y ofrece grandes posibilidades. Lamentablemente, al ser una plataforma tan amplia, es imposible recoger todas las caractersticas que ofrece Android y reunirlas en un solo proyecto.

5.2. Lneas futuras


Una vez finalizado el proyecto, y revisado concienzudamente en distintos pases y comprobado que funciona en todos ellos, se abren varias vas de mejora, a tener en cuenta para desarrollos futuros: Integracin con Tuenti: En Espaa, adems de Facebook, la red social Tuenti es muy utilizada, por lo que se podra desarrollar otra versin de la aplicacin para dicha red social. Integracin con Twitter: Actualmente, la red social twitter se est expandiendo y aumentando su nmero de usuarios activos, debido al tipo de red social que es twitter, se podran incorporar los comentarios que ha hecho un usuario sobre un lugar. Disponibilidad con ms dispositivos: Como hemos visto en el captulo dos, existen numerosos sistemas operativos para Smartphones, estos sistemas operativos tienen muchsimos usuarios, por lo que con vistas a una posible comercializacin, sera razonable, lanzar versiones de la aplicacin

90

compatible con dichas plataformas (iOS y Windows-Phone serian los candidatos ms probables). Disponibilidad para todos los usuarios: Siguiendo la lnea de trabajo anterior, es muy importante, desarrollar la aplicacin para personas que tengan algn tipo de discapacidad fsica, por ejemplo, con letras ms grandes y sonido para personas con problemas de visin, etc.

91

Bibliografa
[1] http://www.developer.apple.com [Noviembre-2011] [2] http://www.apple.com/es/icloud/what-is.html [Noviembre-2011] [3] http://www.todoiphone.net/index.php/2011/09/26/android-gana-cuota-de-mercadopero-sin-afectar-a-ios-que-mantiene-su-posicion/ [Noviembre-2011] [4] http://www.cincodias.com/articulo/empresas/nokia-sufre-dura-perdida-cuotamercado-movil/20110812cdscdiemp_3/ [Noviembre-2011] [5] http://en.wikipedia.org/wiki/Ovi_(Nokia) [Noviembre-2011] [6] http://www.movilzona.es/2010/10/20/palm-webos-2-0-todos-los-detalles-ycaracteristicas/ [Noviembre-2011] [7] http://www.webosmania.com/webos/10-millones-descargas-software-webos/ [Noviembre-2011] [8] http://www.blogdemoviles.com.ar/caracteristicas-palm-webos-2-0/ 2011] [Noviembre-

92

[9] http://www.precentral.net/app-catalog-update-pushed-app-update-adds-new-iconmaybe-other-stuff-1 [Noviembre-2011] [10] http://www.xataka.com/moviles/windows-phone-7 [Noviembre-2011] [11] http://www.windowsphone.com/es-ES/marketplace?wa=wsignin1.04 [Noviembre2011] [12] http://es.wikipedia.org/wiki/Windows_Phone_7 [Noviembre-2011] [13] http://es.wikipedia.org/wiki/Windows_Phone [Noviembre-2011] [14] http://en.wikipedia.org/wiki/Windows_Phone_Marketplace [Noviembre-2011] [15] http://www.infonucleo.com/2011/05/02/blackberry-os-7-caracteristicas-del-nuevo-s [Noviembre-2011] [16] http://www.amenazabarrial.com/2011/05/caracteristicas-y-detalles-blackberry.html [Noviembre-2011] [17] http://en.wikipedia.org/wiki/BlackBerry_App_World [Noviembre-2011] [18] http://www.celularis.com/blackberry/finalmente-lo-construyeron-blackberryapplication-center.php [Noviembre-2011] [19] http://www.idg.es/pcworldtech/mostrarnoticia.asp?id=72800&seccion=actualidad [Noviembre-2011] [20] http://conecti.ca/2011/07/26/infografia-la-historia-de-android/ [Noviembre-2011] [21] http://es.wikipedia.org/wiki/Android [Noviembre-2011] [22] http://androideity.com/2011/07/04/arquitectura-de-android/ [Noviembre-2011] [23] http://www.visualbeta.es/647/movil/android-sdk-ya-disponible/ [Noviembre-2011] [24] http://developer.android.com/reference/android/app/Activity.html 2011] [Noviembre-

[25] http://www.tecnocaos.com/desarrollo-en-android-iii-la-clase-activity-y-cambioentre-actividades/ [Noviembre-2011] [26] http://developer.android.com/reference/android/content/Intent.html [Noviembre2011] [27] http://androide.hijodeblog.com/2010/06/17/creacion-de-aplicaciones-android-parte4-servicios/ [Noviembre-2011] [28] http://www.nosolounix.com/2011/01/android-manifest-archivo-con.html [Noviembre-2011] [29] https://sites.google.com/site/swcuc3m/home/android/generalidades/aplicacionesandroid [Noviembre-2011] [30] https://sites.google.com/site/swcuc3m/home/android/generalidades/aplicacionespag2 [Noviembre-2011] [31] http://www.elbauldelprogramador.com/2011/06/fundamentos-programacionandroid_17.html [Noviembre-2011] [32] http://www.elbauldelprogramador.com/2011/09/programacion-androidrecursos.html [Noviembre-2011] [33] http://es.wikipedia.org/wiki/Google [Noviembre-2011] 93

[34] http://es.wikipedia.org/wiki/Facebook [Noviembre-2011] [35] http://code.google.com/intl/es/apis/maps/index.html [Noviembre-2011] [36] http://www.maestrosdelweb.com/editorial/trabajando-con-la-api-de-facebook-yjavascript/ [Noviembre-2011] [37] http://www.androidzona.net/analisis-de-los-permisos-en-android/ 2011] [Noviembre-

[38] http://apiconz.blogspot.com/2011/11/android-como-generar-api-key-degoogle.html [Noviembre-2011] [39] http://www.facebook.com [40] http://code.google.com/intl/es-ES/apis/maps/index.html [Agosto-2011] [41] http://developer.android.com/sdk/index.html [Agosto-2011] [42] http://developers.facebook.com/docs/guides/mobile/#android [Agosto-2011] [43] https://www.facebook.com/developers/apps.php [Agosto-2011] [44] https://developers.facebook.com/docs/reference/api/permissions/ [Agosto-2011] [45] http://www.android-spa.com/viewtopic.php?p=58781#58781 [Agosto-2011] [46] http://developer.android.com/reference/packages.html [Agosto-2011] [47] http://www.androidsis.com/foro/ [Agosto-2011] [48] Android Essentials (Chis Haseman) [49] The busy coders guide to Android development (Mark L. Murphy) [50] Beginning Android (Mark L. Murphy) [51] Hello, Android (Ed Murnette) [52] Pro Android (Sayed Y. Hashimi & Satya Komatineni)

94

ANEXOS
ANEXO I: Instalacin del SDK de Android
El objetivo de este anexo es explicar cmo se tienen que instalar los plugins necesarios en eclipse para que un usuario pueda desarrollar sus aplicaciones en dicho IDE. El primer paso es descargarse el SDK, para ello, vamos a la pgina oficial de desarrolladores de Android (http://developer.android.com/sdk/index.html), y nos descargamos el instalador adecuado para la versin del sistema operativo (en este caso se dispone del sistema operativo Windows). En la figura 68 muestro la pgina Web desde donde se puede descargar el SDK para los sistemas operativos ms populares.

Figura 68: Descarga SDK

Una vez descargado el software, procederemos a realizar la instalacin como cualquier otro programa de Windows. Al comienzo de la instalacin, indicaremos la ruta donde se va a instalar el SDK, tal y como se muestra en la figura 69.

Figura 69: Ruta instalacin

95

Una vez instalado el SDK, tendremos que elegir que APIs vamos a instalar, aunque, en teora, instalando la ltima versin de la API (actualmente la versin 14) los programas deberan funcionar en versiones anteriores. Esto no siempre es as, por lo que instalaremos todas las versiones, aunque el tiempo de instalacin aumente considerablemente. Esto se muestra en la figura 70. Adems de por motivos de compatibilidad, hay otro motivo que explicar ms adelante.

Figura 70: Eleccin de paquetes

Con todos los paquetes seleccionados, se nos informar del acuerdo de licencia, que debemos aceptar para que comience la descarga de los archivos y la posterior instalacin. Al haber tantas versiones de la API, este proceso puede tardar bastante tiempo. En la figura 71 se muestra el acuerdo de instalacin.

Figura 71: Trminos de licencia

96

En este punto ya tenemos instalado el SDK de Android, ahora tenemos que aadir el plugin para poder utilizar Eclipse como entorno de desarrollo, para ello tendremos que aadir el repositorio del ADT (Android Developers Tool), tal y como se muestra en la figura 72. El motivo de haber instalado el SDK es porque proporciona un emulador de dispositivos en el que podemos elegir la versin del sistema operativo a instalar para no tener que hacer pruebas sobre un telfono de verdad.

Figura 72: Adicin de repositorio ADT

Durante la instalacin tendremos que elegir las herramientas que vamos a instalar. Por defecto, las elegiremos todas, para as evitar problemas de incompatibilidades con dispositivos. La figura 73 muestra lo descrito en este prrafo.

Figura 73: Seleccin de tems

97

Debido a que estamos instalando nuevo software algunas licencias deben ser aceptadas de nuevo. Si no las aceptamos no podremos continuar con la instalacin. Las licencias se muestran en la figura 74.

Figura 74: Aceptacin de licencia

Antes de comenzar la instalacin, tendremos que volver a instalar la ltima versin del SDK, de esta forma se integrar correctamente con Eclipse. Tambin se puede utilizar la opcin de utilizar SDKs existentes, pero basndome en mi experiencia personal, el plugin no se integrar correctamente y algunas veces fallar sin razn aparente. La figura 75 muestra lo descrito en este prrafo.

Figura 75: Eleccin de ruta de instalacin

La figura 76, es similar a la que nos apareci cuando estbamos instalando el SDK, solo que en este caso, tendremos que instalar solo la ltima versin.

98

Figura 76: Trminos de licencia

Una vez finalizada la instalacin, reiniciaremos Eclipse y ya podremos crear proyectos para el sistema operativo Android (ver anexo II).

99

ANEXO II: Creacin de un nuevo proyecto Android


En el anexo anterior, he explicado como instalar el SDK de Android en el IDE Eclipse, y en este anexo, voy a explicar como hacer un nuevo proyecto de Android para el desarrollo de una aplicacin. En primer lugar, al igual que para cualquier otro proyecto en Eclipse tenemos que ir a File New Project Other y se nos abrir la ventana que muestro a continuacin. En esa ventana elegimos la carpeta Android, y dentro de ella, elegimos Android Project, con esta opcin, al finalizar, se crearan todos los archivos necesarios. La figura 77 muestra el proyecto que hay que elegir.

Figura 77: Seleccin de proyecto

En la siguiente ventana hay que elegir el nombre del proyecto (que no puede estar repetido), el nombre de la aplicacin, el nombre del paquete, y de forma opcional el nombre del primer Activity del proyecto. Adems, hay que indicar la API que utilizara la aplicacin, ya que cuando se suba a la plataforma de distribucin (Android Market) solo estar disponible para aquellos dispositivos con una versin igual o superior a la indicada. Tambin es recomendable, si se va a utilizar un mapa o cualquier servicio de Google elegir una API de Google, en lugar de una API genrica. En la figura 78 muestro una imagen donde se ven todos los detalles comentados en el prrafo anterior:

100

Figura 78: Especificaciones del proyecto

101

Para insertar una clase nueva en el proyecto se hace como con cualquier aplicacin Java normal: New Class. Si lo que se desea es insertar una ventana para la aplicacin, se utiliza New Android XML File, y aparecer la siguiente ventana en la que podremos elegir qu tipo de archivo XML se va a crear (recordar que no slo los interfaces estn en XML). Esto se muestra en la figura 79.

Figura 79: Creacin de un documento XML

102

ANEXO III: Creacin de un dispositivo virtual


Un consejo que deben seguir los desarrolladores, es no probar una aplicacin directamente en un telfono, ya que pueden provocar problemas en el hardware del telfono. Por este motivo, el SDK de Android proporciona dispositivos virtuales, en los que probar la aplicacin sin ningn riesgo. Para crear un dispositivo, tenemos que acceder a la aplicacin previamente instalada (ver anexo I) SDK Manager en el men de la izquierda selecciona Virtual Devices y pulsar en el botn New. La figura 80 muestra la ventana para crear un nuevo dispositivo virtual.

Figura 80: Administracin dispositivos virtuales

Al pulsar el botn New, nos aparecer una ventana en la que tendremos que elegir, las distintas caractersticas del dispositivo que queremos crear. Para este caso, hemos creado un dispositivo con 2Gb de memoria (no son necesarios, pero es recomendable), indicaremos una resolucin de pantalla de 800x600 y habilitaremos las siguientes unidades hardware: Soporte a tarjetas SD Soporte GPS (al ser virtual, hay que emular las posiciones) Acelermetro

Todas las caractersticas que se han seleccionado se muestran en la figura 81.

103

Figura 81: Configuracin nuevo dispositivo

Al pulsar en el botn Aceptar, se nos mostrara una ventana resumiendo las caractersticas (ver figura 82). Al pulsar el botn OK, comenzara la creacin del dispositivo.

Figura 82: Confirmacin

104

Una vez finalizado el proceso de creacin, en la ventana inicial de dispositivos, aparecer el que utilizaremos en este proyecto (Facebook-Tourism). En la figura 83 se muestra un listado de los dispositivos virtuales que se han creado.

Figura 83: Lista de dispositivos virtuales

105

ANEXO IV: Obtener una API Key para Google Maps


Para obtener la clave necesitamos generar una huella digital de certificado MD5, empleando la herramienta keytool que viene con Java SDK y que no forma parte del Android SDK. Para ello se ejecuta el comando que aparece en la figura 84 [38]. El comando que hay que ejecutar es:
keytool list keystore debug.keystorepass Android -key

Figura 84: Generacin de certificado

Con la huella digital obtenida, iremos a la pgina de registro e insertaremos el dato generado. Aceptamos los trminos y condiciones y pulsamos en Generate API Key. La pantalla que aparecer nos muestra el API Key generado, la huella del certificado y un ejemplo de uso. Dicha pantalla se muestra en la figura 85:

Figura 85: Clave generada

Esta clave tiene una validez de 6 meses, por lo que pasado ese tiempo, para que la aplicacin siga funcionando tendr que regenerar la API Key.

106

ANEXO V: Obtener una API Key para Facebook


Para obtener al API Key necesaria de Facebook, necesaria para nuestra aplicacin, tendremos que acceder a la pgina de desarrolladores de Facebook y otorgarle permisos bsicos. Seleccionamos Crea una y acto seguido saltar una ventana para validar nuestra cuenta usando el mvil o la tarjeta de crdito (para probarlo, te cobran y te devuelven 0,72). Con la cuenta validada, volvemos a pulsar Crea una y saldr la ventana que aparece en la figura 86. En dicha ventana, introduciremos el nombre de la aplicacin. En este ejemplo la aplicacin se llama Facebook-Tourism pero por motivos de acuerdos de licencia, el nombre de la aplicacin no puede contener el nombre de la red social.

Figura 86: Registro de aplicacin

Una vez creada la aplicacin, podremos editar todos los permisos. La pgina principal de una aplicacin, la muestro en la figura 87:

Figura 87: Datos de la aplicacin

Al igual que para Google Maps, para poder utilizar la API de Facebook, tenemos que generar un certificado digital para que nos genere la clave a partir de ese certificado. Para hacerlo, iremos a la ventana de comandos e introduciremos la orden que se muestra en la figura 88. Durante el proceso, nos pedir una contrasea que si no la introducimos correctamente, no podremos terminar el proceso. El comando que hay que ejecutar es:
Ketool exportvert alias androiddebugkey keystore ./android/debug.keystore | openssl sha1 binary | openssl base64

107

Figura 88: Generando certificado

La clave generada anteriormente se indicar en la pgina de la aplicacin y esta generar la Key necesaria. Dicha Key puede verse en la figura 89.

Figura 89: Generacin de Key

Aunque ya tenemos la clave generada, todava no podemos utilizar la API de Facebook. Esto se debe a que no hemos instalado el programa Git. Este es un programa similar al SVN, y es necesario para poder descargar la API. Para instalarlo tendremos que utilizar el comando que aparece en la figura 90:

Figura 90: Descarga de API

Ahora ya si podremos utilizar la API, simplemente se incorpora al proyecto como una librera externa y se instancia un objeto de la clase Facebook, tal y como se muestra en la figura 91.

Figura 91: Instanciacin Facebook

108

ANEXO VI: Manual de usuario de la aplicacin


En este anexo voy a explicar cmo funciona la aplicacin del proyecto. El primer requisito es tenerla instalada en el telfono, la explicacin comenzar a partir de ese punto. Accederemos a travs del men y la ejecutaremos. En la figura 92 se muestra el men de emulador con la aplicacin ya instalada.

Figura 92: Men Android

Esta es la primera ventana del proyecto (ver figura 93), desde aqu tenemos diferentes caminos, por un lado, si estamos registrados en la red social podemos acceder a la aplicacin, y si pulsamos sobre la etiqueta Regstrate! se lanzar un navegador para que el usuario se registre.

Figura 93: Inicio de la aplicacin

109

Cuando el usuario pulsa el botn Acceder, se lanzar un dialog proporcionado por Facebook, en el que el usuario introduce su nombre direccin de correo electrnico y su contrasea. Una vez introducidos los datos se comprobarn en el servidor de Facebook, y si son correctos, se realizaran las consultas de amigos y de lugares para mostrarlos en la siguiente ventana. El dialog de Facebook aparece en la figura 94.

Figura 94: Identificacin Facebook

Esta es la ventana donde el usuario de la aplicacin pasar ms tiempo, desde aqu puede acceder a su listado de amigos (pulsando en la etiqueta de amigos) y ver los lugares que le gustan a cada uno de los amigos (pulsando en la etiqueta lugares). Una vez elegido un lugar, si este se encuentra cerca, se le mostrar la ruta para llegar hasta l. Sin necesidad de que el usuario haga nada, cuando se conecte a la aplicacin o cambie su posicin, se le mostrar un aviso indicando los amigos que se encuentran cerca y la ruta para llegar hasta ellos. Esto se muestra en la figura 95.

Figura 95: Ventana Principal

110

Una funcionalidad aadida de esta ventana, es la de poder cambiar la vista del mapa eligiendo el tipo de mapa que se quiere mostrar (StreetView, Satlite o Trafico). Estas vistas son auto-excluyentes, por lo que el usuario no podr tener seleccionadas dos vistas al mismo tiempo. Cuando el usuario mantiene pulsado sobre la etiqueta Amigos se cargar un men con un listado de todos sus amigos. Al seleccionar sobre un amigo, el sistema cargar automticamente los lugares que le gustan a ste y si est cerca, tambin mostrar la ruta para llegar hasta l. En la figura 96 se muestra el men con el listado de amigos.

Figura 96: Men Amigos

Cuando el usuario ha seleccionado un amigo, podr visualizar un men con los lugares que le gustan a ste. Para hacerlo basta con mantener pulsado la etiqueta Lugares. Si el usuario selecciona un lugar y este lugar est cerca, la aplicacin mostrar la ruta para llegar desde la posicin del usuario hasta el lugar seleccionado. El men con los lugares que le gustan a un amigo en concreto aparece en la figura 97.

Figura 97: Men Lugares

111

Por ltimo, mostrar en la figura 98 una imagen del navegador Web de Android, con la pgina de Facebook cargada. Esta pantalla se mostrar cuando un usuario no registrado en Facebook intente usar la aplicacin y pulse en la etiqueta Regstrate!.

Figura 98: Registro en Facebook

112

ANEXO VII: Tutorial Location-GPS


1. Introduccin Android es el sistema operativo que Google especialmente diseo para ejecutar en dispositivos mviles. Todo naci all por el 2007 cuando se estableci la OHA (Open Handset Alliance) que se conforma por ms de 40 empresas relacionadas con la fabricacin (hardware y software) y distribucin de dispositivos mviles. Desde su lanzamiento, numerosos programadores han encontrado en este sistema operativo la primera plataforma de programacin sencilla, potente y fiable para programar en sistemas mviles. En este documento vamos a realizar una introduccin a la programacin en la plataforma Android cuyo fin ser que podamos construir una aplicacin sencilla basada en Activity, ActivityMap y Services. 2. Que es y que no es este anexo Este anexo SI: Es una introduccin a la programacin en Android Te describir los distintos procesos existentes en Android Te ayudar a realizar tu primera aplicacin Android Te ensear a utilizar mapas, gps y servicios de tu aplicacin Android Te ensear a instalar el entorno (SDK, Eclipse, ) Es un documento explicativo sobre la filosofa de Android Es un documento avanzado sobre programacin en Java/Android.

Este anexo NO:

3. Fundamentos de una aplicacin Android La plataforma de Android proporciona diferentes componentes a la hora de programar en funcin del objetivo de tu aplicacin. Android provee cuatro tipos diferentes de componentes: Activity: Un Activity es el componente ms usado en las aplicaciones Android. Normalmente un Activity representa una pantalla individual en el terminal y presenta una interfaz grfica al usuario. Por ejemplo, en una aplicacin de listado de telfonos mviles utilizaramos dos Activities. Una para mostrar el listado de nombres y telfonos y la segunda, para mostrar la informacin detallada del contacto seleccionado. La navegacin entre las pantallas se realiza iniciando nuevas Activities. Cuando una Activity es abierta, la Activity previa es puesta en pausa y agregada al history stack y no volver hasta el estado de ejecucin hasta que vuelva a ser invocada. Services: Un service no tiene interfaz grfica, pero puede ejecutarse en background por un tiempo indefinido (se asemeja mucho al demonio de los sistemas Linux). Por ejemplo, podemos utilizar un service para que vaya capturando cada cierto tiempo la posicin GPS y nos avise cuando estemos cerca de algn amigo. Mientras tanto el usuario puede seguir realizando otras tareas. Broadcast receivers: Este tipo de componentes se utilizan para recibir y reaccionar ante ciertas notificaciones broadcast. Este tipo de componentes no tiene interfaz grfica y pueden reaccionar ante eventos 113

como cambio de zonas horarias, llamadas, nivel de batera, etc. Todos los receivers heredan de la clase BroadcastReceiver. Intent: Este tipo de componentes es una clase especial que usa Android para moverse de una pantalla a otra. Un Intent describe lo que una aplicacin desea hacer. Cualquiera Activity puede reutilizar funcionalidades de otros componentes con solo hacer una solicitud en la forma de Intent.

4. Ciclo de vida de una aplicacin Android En la mayora de los casos, una aplicacin Android ejecuta dentro de su propio proceso Linux. El proceso es creado para ejecutar el cdigo de la aplicacin y es el sistema quien pedir y reclamar su memoria para reasignarla a otra aplicacin. Una caracterstica peculiar de Android es que el tiempo de vida de un proceso es controlado directamente por la aplicacin. Es el sistema quien decide y determina el tiempo de vida basndose en el uso y capacidades del sistema. Para determinar los procesos que deberan ser eliminados ante una condicin baja de memoria, Android prioriza los procesos bajo una jerarqua para asignar a cada proceso una importancia en el sistema. Existen diferentes procesos de acuerdo a esta jerarqua: Foreground Process: Es un proceso en primer plano que aloja una Activity en la pantalla y con la que el usuario est interactuando (su mtodo onResume() ha sido llamado) o que un IntentReceiver est ejecutndose. Este tipo de procesos sern eliminados como ltimo recurso si el sistema necesitase memoria. Visible Process: Es un proceso que aloja una Activity pero no est en primer plano (su mtodo onPause() ha sido llamado). Esto ocurre en situaciones donde la aplicacin muestra un cuadro de dialogo para interactuar con el usuario. Este tipo de procesos no ser eliminado a causa de que sea necesaria la memoria para mantener a todos los procesos del primer plano corriendo. Service Process: Es un proceso que aloja un Service que ha sido iniciado con el mtodo startService(). Este tipo de procesos no son visibles y suelen ser importantes para el usuario (conexin con servidores, reproduccin de msica). Background Process: Es un proceso que aloja un Activity que es actualmente visible para el usuario (su mtodo onStop() ha sido llamado). Normalmente la eliminacin de estos procesos no suponen un gran impacto para la actividad del usuario. Es muy usual que existan numerosos procesos de este tipo en el sistema, por lo que el sistema mantiene una lista para asegurar que el ltimo proceso visto por el usuario sea el ltimo en eliminarse en caso de necesitar memoria. Empty Process: Es un proceso que no aloja ningn componente. La razn de existir de este proceso es tener una cach disponible de la aplicacin para su prxima activacin. Es comn, que el sistema elimine este tipo de procesos con frecuencia para obtener memoria disponible.

114

5. Desarrollo en Android Una vez que hemos explicado los diferentes procesos y sus ciclos de vida dentro del sistema operativo Android, vamos a pasar a detallar la implementacin de alguno de estos procesos. 5.1. Desarrollo de un Activity El primer ejemplo prctico que vamos a ver es la creacin de una Activity sencilla, simple, que nicamente tenga un par de componentes y una finalidad clara. Vamos a crear una Activity que contenga un botn y una etiqueta (textView) para mostrar la posicin GPS actual. La figura 99 muestra un fragmento de los permisos para poder utilizar GPS.

Figura 99: Permisos GPS

Ahora lo que crearemos es el layout (escrito en XML) que representar la interfaz grfica que tendr nuestra actividad. Ser una interfaz sencilla donde tendremos un botn y un textView para mostrar nuestra localizacin. El documento XML necesario para la creacin de la interfaz se muestra en la figura 100.

Figura 100: Creacin de interfaz

Ahora que ya tenemos el layout (que llamaremos main.xml) de la interfaz y los permisos correspondientes, vamos a pasar a la descripcin del cdigo de la clase. La cabecera de la clase se muestra en la figura 101.

Figura 101: Creacin de la clase

115

Nuestra clase LocationActivity hereda de la clase Activity, y adems implementa las interfaces OnClickListener (para poder capturar los eventos onClick del botn) y Runnable (ya que vamos a ejecutar en un thread aparte la obtencin de la posicin GPS). La figura 102 muestra el cdigo de los mtodos onCreate() y onClick().

Figura 102: Cdigo de la clase

El mtodo onCreate() se encarga de iniciar la Activity por primera vez, por ello realizamos la conexin de los widgets grficos con la definicin del archivo XML. nicamente tenemos dos, un Button y un TextView. Es importante comentar que al botn le establecemos un listener para el evento onClick, que ejecutar el mtodo updateSignalGPS que se detallar en las siguientes lneas. La figura 103 muestra el cdigo del mtodo writeSignalGPS().

Figura 103: Tratamiento GPS

116

Como vemos, el mtodo writeSignalGPS instancia un processDialog para que se muestre por pantalla mientras se encuentra la posicin GPS, y adems ejecuta un Thread cuyo cdigo mostramos en la figura 104:

Figura 104: Cdigo thread

En el cdigo de la figura 104 podemos ver como se configura el provider de GPS como fuente de localizacin.

Figura 105: Location Listener

Es necesario implementar un LocationListener (tal y como se muestra en la figura 105) para ejecutar nuestro cdigo cuando el sistema encuentra la posicin GPS. Cuando el mtodo onLocationChanges se llame, nos indicar que la posicin GPS ha cambiado y por tanto podemos escribir dicha informacin en nuestra actividad. Como nos encontramos ejecutando un thread, no podemos acceder a la interfaz grfica para poder modificar el textView (es una caractersticas tpica de los sistemas grficos). 117

Por ello vamos a utilizar el mecanismo de paso de mensajes que Android implementa como Handlers. El cdigo es mostrado en la figura 106.

Figura 106: Handler

Por ltimo, podemos ver como el manejador que hemos implementado se llama cuando encuentra la posicin GPS y por tanto desde aqu si podemos actualizar la interfaz grfica, por lo que mostramos la informacin en el textView txtLocation. En la figura 107 se muestra la ventana de la aplicacin cuando ha encontrado un resultado.

Figura 107: Pantalla del Activity

5.2. Desarrollo de un Activity Map Una vez que sabemos desarrollar sin problemas una Activity, vamos a ver como incluir un mapa (google maps) en dicha actividad. Lo primero que tenemos que hacer es heredar de la Actividad MapActivity tal y como se muestra en la figura 108.

Figura 108: Modificacin de la clase

118

Aadiremos en el layout el widget del mapa, el cdigo necesario aparece en la figura 109.

Figura 109: Widget mapa

Como vemos en la figura 110, necesitamos un apiKey para poder utilizar los mapas de Google desde Android. Para generar la clave debes seguir los siguientes pasos:

Figura 110: keytool

Despus se deber ir a la siguiente url: http://code.google.com/intl/es-ES/android/maps-api-signup.html y obtener tu clave a partir del MD5 que se ha generado anteriormente. Cuando obtengas tu clave gurdala en un sitio seguro y adela al layout, concretamente en la etiqueta Android:apiKey. Por ultimo solo nos queda aadir en el archivo Manifest.xml la declaracin de la figura 111:

Figura 111: Uso de la API

Una vez que hemos configurado el layout para que aparezca el mapa y hemos creado la clave que nos permitir descargar mapas de Google, en la figura 112 se muestra el cdigo necesario para mostrar nuestra localizacin en dicho mapa.

119

Figura 112: Mostrar posicin en el mapa

Como vemos en el anterior cdigo, conectaremos el widget mapView a la definicin del mapView del archivo Manifest.xml. Despus calcularemos las coordenadas en el mapa gracias a la localizacin actual que se ha obtenido a travs del GPS. Y por ltimo aadiremos un Overlay o capa al mapa para mostrar nuestro nombre al lado de la posicin. En la figura 113 se muestra el cdigo de la clase PositionOverlay.

120

Figura 113: Clase Overlay

121

Por ltimo, slo nos quedar aadir el cdigo correspondiente para que cuando se encuentra la seal GPS, se llame al mtodo showMap que es el encargado de mostrar nuestra posicin en el mapa. En la figura 114 se muestra el cdigo necesario y el resultado obtenido.

Figura 114: Posicin mostrada en el mapa

5.3. Desarrollo de un Activity List Despus de ver como creamos un Activity o un ActivityMap vamos a ver cmo crear un ActivityList que nos ayudar a disear listas fcilmente. La idea principal de un ActivityList es la creacin de un layout que nos permite representar una lista con informacin. En nuestro ejemplo, vamos a mostrar una lista con informacin de nuestros amigos. Por lo tanto lo primero, vamos a disear el layout, el cdigo necesario aparece en la figura 115.

122

Figura 115: Diseo del layout

Como vemos en la figura 115, slo generamos el layout para el tipo de fila que tendr la lista. Dicha fila tiene dos columnas (dos LinearLayout): la primera es una imagen, y la segunda se compone de dos TextViews donde mostraremos el nombre e informacin de nuestros amigos. En la figura 116 se muestra el cdigo Java de la lista.

Figura 116: Clase friendlist

123

Figura 117: Clase friendsAdpater

Como hemos podido observar en la figura 117, la clase FriendList es una clase ActivityList en la cual hemos creado un adaptador personalizado para mostrar la informacin en la lista. Observar que el mtodo getFriendList debe devolver una lista con la informacin de los amigos. 124

Es necesario generar un adaptador para mostrar la lista, ya que Android slo permite generar listar automticamente basadas en listas o arrays de enteros o strings. Si queremos generar una lista ms compleja debemos crear nuestro propio adaptador, como hemos detallado en el cdigo anterior. No hay que olvidar dar permisos en el Manifest.xml. En la figura 118 se muestra la lista con varios usuarios, y las imgenes aadidas.

Figura 118: Pantalla del ActivityList

6. Mens y mens contextuales Los mens son una parte importante de toda aplicacin, y ms en Android, ya que nos permite mostrar numerosa informacin cuando el usuario lo solicite. En este apartado vamos a ver cmo implementar mens de pantallas y mens contextuales sobre listas. 6.1. Mens Vamos a incorporar un men en nuestra aplicacin para poder seleccionar si queremos utilizar el proveedor GPS o Wi-Fi para obtener la localizacin.

Figura 119: Creacin del men

En el cdigo de la figura 119 implementamos el mtodo onCreateOptionsMenu para detallar las partes que tendr nuestro men. En este caso, hemos creado un men principal llamado Location que tiene dos sub-mens GPS y WIFI.

125

Figura 120: Seleccin de men

En el de la figura 120, implementamos el mtodo onOptionItemSelected para definir qu acciones se llevan a cabo cuando se seleccionan estas opciones en el submen. En la figura 121 se muestran los mens creados.

Figura 121: Pantallas del men y sub-men

5.3.

Mens contextuales

Los mens contextuales son aquellos que aparecen dependiendo del contexto que tengas en la aplicacin. Por ejemplo, vamos a ver un caso donde podemos mostrar un men contextual cuando se realiza una pulsacin prolongada sobre un tem de la lista. Lo primero que haremos ser aadir el cdigo de la figura 122 en el mtodo onCreate del Activity FriendList:

Figura 122: Especificacin para el men contextual

126

A continuacin sobrescribiremos el mtodo de la figura 123 para detallar que mens aparecern:

Figura 123: Rescritura del men

Y para finalizar, deberemos detallar las acciones que queremos ejecutar cuando se pulsen estos mens, tal y como se muestra en la figura 124:

Figura 124: Especificacin de acciones

La ejecucin del cdigo anterior nos mostrar la figura 125:

127

Figura 125: Ejemplo de men contextual

6. Resumen Recuerde: Una pantalla = Una actividad = Una clase El archivo Manifest.xml define los permisos y caractersticas de la aplicacin cuando se ejecuta en el mvil Ests programando en un sistema empotrado, piensa en eficiencia, eficiencia y eficiencia. Android te ofrece diferentes tipos de procesos con ciclos de vida diferentes, estudia bien tu caso y haz uso de ellos Comparte tu cdigo: es bueno para ti, es bueno para todos.

128