Escolar Documentos
Profissional Documentos
Cultura Documentos
ESCUELAPOLITCNICASUPERIOR(EPS)
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.
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
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
3.2.1.
3.4.1.
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.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
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.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
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).
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.
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
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
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
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.
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.
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.
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
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
23
24
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.
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
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.
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.
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
por parte del fabricante, as que los usuarios de BlackBerry debern actualizar sus terminales si quieren disfrutar de esta versin del sistema operativo.
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
valoracin
personal
de
las
Cod. Abierto No
Simbyan
OVI
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
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.
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.
34
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).
36
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.
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.
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
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.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].
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
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.
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:
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.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.
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.
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
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.
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.
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.
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.
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.
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.
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
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.
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.
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
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.
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.
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.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
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
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
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.
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
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.
67
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.
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.
69
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.
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.
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.
Para
obtener
actualizaciones
peridicas
se
utiliza
el
mtodo
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.
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.
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.
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.
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.
74
75
76
77
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:
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.
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.
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:
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:
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.
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:
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.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.
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.
85
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
Una vez finalizada la instalacin, reiniciaremos Eclipse y ya podremos crear proyectos para el sistema operativo Android (ver anexo II).
99
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
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.
102
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
103
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.
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.
105
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:
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
Una vez creada la aplicacin, podremos editar todos los permisos. La pgina principal de una aplicacin, la muestro en la figura 87:
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
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.
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:
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.
108
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.
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.
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.
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.
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.
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!.
112
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.
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.
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.
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().
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().
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:
En el cdigo de la figura 104 podemos ver como se configura el provider de GPS como fuente de localizacin.
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.
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.
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.
118
Aadiremos en el layout el widget del mapa, el cdigo necesario aparece en la figura 109.
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:
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:
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
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
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.
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
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.
123
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.
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.
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
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.
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:
126
A continuacin sobrescribiremos el mtodo de la figura 123 para detallar que mens aparecern:
Y para finalizar, deberemos detallar las acciones que queremos ejecutar cuando se pulsen estos mens, tal y como se muestra en la figura 124:
127
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