Está en la página 1de 93

ESCUELA T

ECNICA SUPERIOR DE INGENIER

IA INFORM

ATICA
INGENIER

IA INFORM

ATICA
RECURSOS ANDROID BASADOS EN GEOLOCALIZACI

ON
Realizado por
Francisco Javier Martn Otero
Dirigido por
Jose Ramon Portillo Fernandez
Departamento
Matematica Aplicada I
Sevilla, (Junio/2012)
Resumen
Esta documentacion corresponde a la memoria del Proyecto Fin de
Carrera de recursos Android basados en geolocalizacion, desarrollado para
la titulacion de Ingeniera Informatica en la Escuela Tecnica Superior de
Ingeniera Informatica de la Universidad de Sevilla.
Se incluye, ademas de una introduccion al sistema operativo Android,
todos los pasos realizados para lograr el objetivo, desde el nacimiento de
la idea hasta completar su desarrollo, incluida la publicacion en la tienda
Google Play de Android y la puesta a disposicion de todos los usuarios.
Ademas de esta documentacion, tambien adjuntamos el codigo fuente
de la aplicacion en un chero aparte, as como su ejecutable listo para ser
instalado en un terminal Android.
I
Agradecimientos
En primer lugar quisiera agradecer a Jose Ramon Portillo la oportu-
nidad que me ha brindado para realizar este proyecto y al Departamento
de Matematica Aplicada I, el permitirme realizarlo.
A toda mi familia por la conanza que depositaron en m, sobre todo
a mis padres y hermanos.
A todos mis profesores, desde el colegio hasta la universidad, por todo
lo que he aprendido gracias a vosotros.
A todos mis amigos, porque gracias a ellos he podido llegar hasta el
nal y he pasado momentos memorables con todos vosotros.
A Alba Casti neira Mouzo y Seyfedin Ben Gamra Lobo por colaborar
desinteresadamente en las traducciones de esta aplicacion.
A todos los compa neros de piso que he tenido durante estos a nos, en
especial a Adrian y Javi por ayudarme con los problemas que me han
surgido durante el desarrollo de este proyecto.
Gracias a todos.
III

Indice general

Indice general V

Indice de cuadros VII

Indice de guras IX

Indice de codigo XI
1 Introduccion 1
1.1 GeoTask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Denicion de objetivos 7
3 Analisis de antecedentes y aportacion realizada 9
4 Analisis temporal y costes de desarrollo 13
4.1 Analisis temporal . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2 Costes de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3 Software Utilizado . . . . . . . . . . . . . . . . . . . . . . . . . 16
5 Instalacion del entorno de trabajo 19
5.1 Requisitos del Sistema . . . . . . . . . . . . . . . . . . . . . . . 19
5.2 Instalacion de Eclipse ide . . . . . . . . . . . . . . . . . . . . . 20
5.3 Instalacion sdk Android . . . . . . . . . . . . . . . . . . . . . 20
5.4 Instalacion del plugin ADT de Eclipse . . . . . . . . . . . . . . 21
5.5 Descargando el proyecto desde la forja de REDIRIS . . . . . . 24
6 Analisis de requisitos, dise no e implementacion 25
6.1 Analisis de Requisitos . . . . . . . . . . . . . . . . . . . . . . . 25
6.2 Dise no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.3 Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.3.1 A nadir una nueva tarea . . . . . . . . . . . . . . . . . . . 36
6.3.2 Problemas encontrados . . . . . . . . . . . . . . . . . . . 41
V
VI

Indice general
7 Pruebas 43
7.1 Pruebas unitarias . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.2 Pruebas de integracion . . . . . . . . . . . . . . . . . . . . . . 44
8 Manual 47
8.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
8.2 Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . 48
8.3 Consideraciones sobre el idioma . . . . . . . . . . . . . . . . . 54
9 Publicacion de una aplicacion 55
9.1 Publicar fuera de Google Play . . . . . . . . . . . . . . . . . . 55
9.2 Publicar en Google Play . . . . . . . . . . . . . . . . . . . . . . 56
10 Comparacion con otras alternativas 57
Conclusiones 59
Apendices 61
Bibliografa 63
Licencia 65

Indice de cuadros
4.1 Etapas del proyecto . . . . . . . . . . . . . . . . . . . . . . 13
7.1 Coordenadas usadas en las pruebas . . . . . . . . . . . . . . 44
VII

Indice de guras
1.1 Arquitectura de Android . . . . . . . . . . . . . . . . . . . . 4
1.2 Ciclo de vida de una aplicacion Android . . . . . . . . . . . 6
4.1 HTC Dream . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.1 Descarga de eclipse . . . . . . . . . . . . . . . . . . . . . . . 20
5.2 Descarga de sdk de Android . . . . . . . . . . . . . . . . . 21
5.3 Descarga de las distintas apis . . . . . . . . . . . . . . . . . 22
5.4 Instalacion de Android Developer Tools . . . . . . . . . . . 22
5.5 Especicar ubicacion del sdk . . . . . . . . . . . . . . . . . 23
5.6 adv Manager . . . . . . . . . . . . . . . . . . . . . . . . . . 24
6.1 Diagrama de clases de GeoTask . . . . . . . . . . . . . . . . 33
6.2 Estructura del proyecto GeoTask en eclipse . . . . . . . . . 34
6.3 Interaccion usuario sistema a la hora de elegir el area de
proximidad de un perl . . . . . . . . . . . . . . . . . . . . 34
6.4 Interaccion usuario sistema a la hora de autorizar una cuen-
ta de una red social . . . . . . . . . . . . . . . . . . . . . . 35
8.1 Pantalla principal de GeoTask sin perles . . . . . . . . . . 48
8.2 Pantalla con las cuentas de redes sociales que puede utilizar
GeoTask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
8.3 Pantalla de un perl en GeoTask . . . . . . . . . . . . . . . 49
8.4 Pantalla para elegir el area de proximidad en GeoTask . . . 50
8.5 Pantalla con todas las tareas que permite GeoTask . . . . . 51
8.6 Pantalla de la tarea recordatorio en GeoTask . . . . . . . . 51
8.7 Pantalla de la tarea twitter en GeoTask . . . . . . . . . . . 52
8.8 Pantalla de la tarea lista blanca en GeoTask . . . . . . . . . 53
8.9 Pantalla principal de GeoTask con perles . . . . . . . . . . 53
IX

Indice de codigo
6.1 Algunos atributos de la clase DBAdapter . . . . . . . . . . 36
6.2 Metodos onCreate y onUpgrade de la clase DBAdapter . . . 37
6.3 Metodo onListItemClick de la clase Perl . . . . . . . . . . 38
6.4 Metodo removeTask de la clase Perl . . . . . . . . . . . . . 39
6.5 Metodo llData de la clase Accounts . . . . . . . . . . . . . 40
6.6 Metodo CrearDialogoCuentas de la clase Accounts . . . . . 40
XI
CAP

ITULO 1
Introduccion
1.1 GeoTask
GeoTask es una aplicacion para moviles con SO Android que permite
realizar automaticamente ciertas tareas sin la intervencion del usuario al
cumplirse una determinada condicion.
En nuestro caso, dicha condicion sera que la aplicacion detecte que nos
encontramos en un determinado lugar.
GeoTask se cimenta en un concepto fundamental: el perl.
El perl nos indica que tareas queremos realizar en un area de proxi-
midad determinado.
Un perl esta compuesto por:
Nombre.
El nombre que pongamos sera el que aparezca en la pantalla principal
de GeoTask.


Area de proximidad.
El area de proximidad no es mas que el area geograca que se encuen-
tra a una distancia del punto que elegimos como direccion, menor o
igual al radio que hemos seleccionado.
Se compone de un punto central (direccion) y el radio.
Tareas que queremos realizar.
Estas tareas pueden ser :
Recibir recordatorios.
Enviar sms.
Realizar llamadas.
1
2 1. Introduccion
Realizar una lista negra de nuestros contactos.
Realizar una lista blanca de nuestros contactos.
Enviar tweets.
Actualizar nuestro estado en Facebook.
El primer paso que debemos hacer es crear una perl. Para ello debe-
mos de proporcionarle un nombre un nombre y elegir el area de proximidad
que queremos que tenga esa tarea.
El ultimo paso es elegir las distintas tareas que queremos que se ha-
gan. Algunas tareas podran ser seleccionadas una sola vez, como realizar
llamadas y realizar una lista negra o blanca de nuestros contactos, las
restantes podran ser seleccionadas las veces que queramos.
Cada perl podra ser activado/desactivado desde la pantalla principal.
Para que funcione correctamente nuestra aplicacion y se realicen au-
tomaticamente las tareas, debemos habilitar un servicio, que se encar-
gara de actualizar la ubicacion en tiempo real del telefono, que podremos
parar en el momento que consideremos oportuno.
GeoTask fue galardonado con el Primer Premio en el V Premio Local
de Sevilla del VI Concurso Universitario de Software Libre el 13 de Abril
de 2012 y con el Premio al mejor proyecto comunitario en la Fase Final
del VI Concurso Universitario de Software Libre el 11 de Mayo de 2012.
1.2 Android
Android es un sistema operativo basado en el n ucleo Linux dise nado
originalmente para dispositivos moviles, tales como smartphones, pero que
posteriormente se expandio su desarrollo para soportar otros dispositivos
tales como tablet, reproductores mp3, netbook, PC, televisores, lectores
de e-book e incluso, se han llegado a ver en el ces, microondas y lavadoras.
Fue desarrollado inicialmente por Android Inc., una rma comprada
por Google en 2005. Es el principal producto de la Open Handset Alliance,
un conglomerado de fabricantes y desarrolladores de hardware, software y
operadores de servicio.
Android, al contrario que otros sistemas operativos para dispositivos
moviles como iOS o Windows Phone, se desarrolla de forma abierta y se
puede acceder tanto al codigo fuente como al listado de incidencias donde
se pueden ver problemas a un no resueltos y reportar problemas nuevos.
El que se tenga acceso al codigo fuente no signica que se pueda tener
siempre la ultima version de Android en un determinado movil, ya que el
codigo para soportar el hardware (controladores) de cada fabricante nor-
malmente no es p ublico, as que faltara un trozo basico del rmware para
poder hacerlo funcionar en dicho terminal, y porque las nuevas versiones
1.2. Android 3
de Android suelen requerir mas recursos, por lo que los modelos mas an-
tiguos quedan descartados por razones de memoria (ram), velocidad de
procesador, etc.
La estructura del sistema operativo Android se compone de aplicacio-
nes que se ejecutan en un framework Java de aplicaciones orientadas a
objetos sobre el n ucleo de las bibliotecas de Java en una maquina virtual
Dalvik con compilacion en tiempo de ejecucion. Las bibliotecas escritas
en lenguaje C incluyen un administrador de interfaz graca (surface ma-
nager), un framework OpenCore, una base de datos relacional SQLite,
una api graca OpenGL ES 2.0 3D, un motor de renderizado WebKit, un
motor graco sgl, ssl y una biblioteca estandar de C.
A continuacion voy a presentar los principales componentes de Android
de una forma mas extensa:
Un n ucleo Linux que proporciona una capa de abstraccion de hard-
ware basica as como servicios de gestion, memoria y sistema de
archivos. En el n ucleo se implementan controladores de hardware
especcos, funciones como WI-FI y Bluetooth. La pila de Android
tiene un dise no exible, con diferentes componentes opcionales que
dependen de la disponibilidad de hardware concreto en cada dispo-
sitivo, como por ejemplo pantallas tactiles, camaras, receptores gps
o acelerometros.
Entre las principales bibliotecas de codigo destacan las siguientes:
Tecnologa de navegador WebKit, el mismo motor de codigo
abierto de Safari de Macintosh y del navegador Mobile Safari
del iPhone.
Compatibilidad con bases de datos a traves de SQLite, una base
de datos SQL sencilla de utilizar.
Compatibilidad graca avanzada, con 2D, 3D, animacion de
sgl y OpenGL.
Compatibilidad con audio y vdeoa traves de OpenCore de Pac-
ket Video.
Funciones ssl del proyecto Apache.
Diferentes administraciones de servicios para:
Actividades y vistas.
Telefona.
Windows.
Recursos.
Servicios basados en ubicacion.
4 1. Introduccion
Figura 1.1: Arquitectura de Android
El entorno de ejecucion de Android proporciona lo siguiente:
Paquetes Java para obtener un entorno de programacion Java
practicamente completo. No es un entorno J2ME.
La maquina virtual Dalvik utiliza los servicios del n ucleo basa-
do en Linux para proporcionar un entorno de alojamiento para
las aplicaciones Android.
El Framework de Android permite una sencilla reutilizacion de com-
ponentes y comunicacion ente aplicaciones, siempre sujetas a ciertas medi-
das de seguridad, que facilita, por ejemplo, la actualizacion o sustitucion
de componentes por parte del usuario, resultando un sencillo y efectivo
metodo para utilizar novedades o introducir mejoras en el software. Los
principales conjuntos de servicios ofrecidos son los siguientes:
Un extenso y variado conjunto de vistas (Views) ofrecidas para el
dise no de interfaces gracas de usuario y su interactividad con el
sistema, como los tpicos botones, cuadros de texto o listas.
Los proveedores de contenidos (Contents Providers) son el metodo
de intercambio de informacion entre aplicaciones, ya sea compartien-
do los datos propios o accediendo a los de otras aplicaciones.
1.2. Android 5
Los gestores de recursos (Resources Manager) permiten el acceso
indexado a recursos como cadenas o gracos, en un intento de mo-
dularaun mas el dise no de las aplicaciones y el uso de sus recursos.
El gestor de noticaciones (Notication Manager) dirige alertas per-
sonalizadas al software, que son mostradas en una barra de estado.
Finalmente, el gestor de actividades (Activities Manager) es respon-
sable del ciclo de vida de las aplicaciones.
En el ambito de desarrollo, dispone de un complemento para el ide
Eclipse, as como herramientas de simulacion y depuracion. Las aplicacio-
nes creadas pueden ponerse a disposicion del usuario a traves de Google
Play, donde podran ser descargadas e instaladas por los usuarios, sirviendo
igualmente como fuente de reporte de fallos y errores en el funcionamiento.
Otra peculiaridad de Android es el ciclo de vida de las aplicaciones,ya
que no se trata unicamente de abrir y cerrar a gusto del usuario, si no
que estas, una vez iniciadas, permanecen cargadas en memoria siempre
que se disponga de recursos para ello. En caso contrario el propio sistema
operativo se encargar de destruirlas denitivamente. Dicho ciclo de vida se
rige por las llamadas a los metodos onCreate, onStart, onResume, onPau-
se, onStop, onStop, onDestroy y onRestart. En el graco adjunto puede
entenderse este ujo de forma mas intuitiva.
6 1. Introduccion
Figura 1.2: Ciclo de vida de una aplicacion Android
CAP

ITULO 2
Denicion de objetivos
El sistema operativo para dispositivos moviles de Google, Android,
centra el desarrollo de este proyecto n de carrera. Para poder dirigir con
mayor exito los esfuerzos para conocer y comprender las caractersticas
de este nuevo sistema, es necesario jar unos objetivos que abarquen las
actividades que se pretenden realizar y, ademas, permitan al nal de las
mismas conocer el grado de desarrollo y cumplimiento alcanzado.
Para ello, los objetivos perseguidos en el desarrollo de este proyecto
n de carrera son:
El principal objetivo que se ha perseguido a lo largo del desarrollo de
este proyecto ha sido crear una aplicacion que dada una condicion
(en nuestro caso sera la ubicacion de nuestro movil) ejecute de forma
automatica y sin la intervencion del usuario una serie de tareas que
hayamos elegido previamente.
Asegurar que el sistema sea facil de mantener, extender y escalar.
Para ello tomaremos una serie de medidas, por ejemplo, hacer in-
dependiente nuestro codigo de la base de datos usada en nuestra
aplicacion, estructurar el codigo para conseguir que a nadir una nue-
va tarea sea lo mas sencillo posible, etc.
Investigacion del funcionamiento del sistema operativo Android, las
posibilidades que nos ofrece y su gestion por parte de las apis dis-
ponibles y el manejo de aplicaciones.
Centrandonos en las tareas de desarrollo, es indispensable el cono-
cimiento de la completa herramienta ofrecida para tal n, as como
su integracion y uso en entornos de desarrollo ya existentes.
Estudiar el entorno de desarrollo de Android.
7
8 2. Denicion de objetivos
Al lanzarse bajo una licencia de software libre, el sdk completo
esta disponible para cualquier desarrollador que desee descargarlo.

Este incluye numerosas ayudas para comenzar a crear aplicaciones


en Android, desde la api completa con todas las clases y paquetes,
hasta herramientas de programacion y un completo emulador para
poder realizar pruebas. Todos estos elementos han de ser estudiados
y explicados. Dispondremos de una completa gua de instalacion de
su sdk (kit de desarrollo de software) y explicaremos como instalar
el plugin adt en Eclipse o en el entorno de desarrollo que estemos
utilizando, necesario para empezar a crear aplicaciones propias en
Android.
Desarrollar una aplicacion para Android totalmente funcional que
sea muy intuitiva y facil de utilizar.
Para ello la aplicacion sera testeada por un conjunto de personas.
As conseguiremos comprobar si la aplicacion cumple con este crite-
rio y en caso negativo, podremos mejorarla siguiendo las pautas que
nos sean marcadas.
Demostrar lo sencillo que resulta en Android realizar tareas de forma
automatica.
En este caso nos basamos en nuestra localizacion, pero se podra
realizar igualmente basandonos en la hora, en el nivel de bateria,
etc.
CAP

ITULO 3
Analisis de antecedentes y aportacion realizada
Determinar en todo el mundo la posicion de un objeto, una persona
o un vehculo con la mayor precision posible, es algo que lleva haciendose
desde hace a nos gracias al gps (Sistema de posicionamiento global).
En 1957, la Union Sovietica lanzo al espacio el satelite Sputnik I, que
era monitorizado mediante la observacion del efecto Doppler de la se nal
que transmita. Debido a este hecho, se comenzo a pensar que, de igual
modo, la posicion de un observador podra ser establecida mediante el
estudio de la frecuencia Doppler de una se nal transmitida por un satelite
cuya orbita estuviera determinada con precision.
La armada estadounidense rapidamente aplico esta tecnologa, para
proveer a los sistemas de navegacion de sus otas de observaciones de
posiciones actualizadas y precisas. As surgio el sistema TRANSIT, que
quedo operativo en 1964, y hacia 1967 estuvo disponible, ademas, para
uso comercial.
Las actualizaciones de posicion, en ese entonces, se encontraban dis-
ponibles cada 40 minutos y el observador deba permanecer casi estatico
para poder obtener informacion adecuada.
Posteriormente, en esa misma decada y gracias al desarrollo de los
relojes atomicos, se dise no una constelacion de satelites, portando cada
uno de ellos uno de estos relojes y estando todos sincronizados con base
en una referencia de tiempo determinado.
En 1973 se combinaron los programas de la Armada y el de la Fuer-
za Aerea de los Estados Unidos (este ultimo consistente en una tecnica
de transmision codicada que provea datos precisos usando una se nal
modulada con un codigo de prn (Pseudo-Random Noise: ruido pseudo-
aleatorio), en lo que se conocio como Navigation Technology Program
(programa de tecnologa de navegacion), posteriormente renombrado co-
mo NAVSTAR gps.
9
10 3. Analisis de antecedentes y aportacion realizada
Entre 1978 y 1985 se desarrollaron y lanzaron once satelites prototi-
po experimentales NAVSTAR, a los que siguieron otras generaciones de
satelites, hasta completar la constelacion actual, a la que se declaro con
((capacidad operacional inicial)) en diciembre de 1993 y con ((capacidad
operacional total)) en abril de 1995.
En 2009, este pas ofrecio el servicio normalizado de determinacion
de la posicion para apoyar las necesidades de la OACI, y esta acepto el
ofrecimiento.
Actualmente dentro del mercado de la telefona movil la tendencia es
la de integrar, por parte de los fabricantes, la tecnologa gps dentro de sus
dispositivos. El uso y masicacion del gps esta particularmente extendido
en los telefonos moviles smartphone, lo que ha hecho surgir todo un eco-
sistema de software para este tipo dispositivos, as como nuevos modelos
de negocios que van desde el uso del terminal movil para la navegacion
tradicional punto-a-punto hasta la prestacion de los llamados Servicios
Basados en la Localizacion (lbs).
Dentro del mercado de los smartphones, podemos observar que An-
droid se ha ido extendiendo rapidamente entre la sociedad hasta poseer
aproximadamente el 32,9 % de cuota de mercado a escala mundial de los
smartphones, por delante de Symbian OS que posee una cuota aproxima-
da del 30,6 %. En tercer lugar se sit ua iOS con una cuota de mercado del
16 %.
El principal atractivo que posee Android es que su codigo ha sido
liberado (excepto la version 3.0, HoneyComb), lo que lo convierte en un
sistema operativo totalmente libre para que un desarrollador no solo pueda
ver su codigo sino tambien mejorarlo.
A traves de esas mejoras puede publicar el nuevo codigo 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 codigo abierto garantiza que, en caso de haber
un bug o error, sea detectado y reparado con mayor presteza al no existir
ninguna traba legal para indagar en su interior ni depender de nadie para
pedir autorizacion a su cambio.

Esto ha propiciado una gran acogida por parte de desarrolladores in-


dependientes, dando lugar a una gran comunidad internacional que, en
apoyo a la propia documentacion ocial disponible, abre puertas a casi
cualquier persona que quiera iniciarse en la programacion de dispositivos
moviles.
En la seleccion de esta plataforma, ademas de los motivos ya se nalados,
ha inuido decisivamente el hecho de que el lenguaje de desarrollo sea
Java, ampliamente estudiado en la Escuela Tecnica Superior de Ingeniera
Informatica de la Universidad de Sevilla.
Ademas del propio sdk (Software Development Kit), Android dispone
de un plugin que lo integra perfectamente en el ide Eclipse, herramienta
11
ya utilizada en la Escuela Tecnica Superior de Ingeniera Informatica de
la Universidad de Sevilla, tanto en el ambito de la programacion como el
de la simulacion, incluyendo todas las funcionalidades de un terminal real,
lo que facilita las tareas de testeo y depuracion del software.
En el mercado ya existen aplicaciones basadas en la localizacion am-
pliamente utilizadas en la comunidad Android, como Locale [11] o Tasker
[12], aunque nuestra aplicacion ofrece algo que no poseen ninguna de las
dos aplicaciones anteriormente citados: interaccion con las redes sociales.
Hacemos uso de los 4 componentes que una aplicacion Android puede
disponer: Activity, Service, BroadcastReceiver y Content Provider, por lo
que creo que es una magnca aplicacion para entender como funciona
Android y todas las posibilidades que nos ofrece.
Ademas, hemos contado con un grupo de usuarios que nos han dado
su opinion para tener una aplicacion que sea muy facil de utilizar y muy
intuitiva. Pautas muy importantes para no fracasar en una aplicacion a
causa del dise no o de la usabilidad, conceptos que son muy importantes
para cualquier aplicacion software.
CAP

ITULO 4
Analisis temporal y costes de desarrollo
4.1 Analisis temporal
En esta seccion se exponen las diferentes etapas del desarrollo del
proyecto. En primer lugar se adjunta una tabla resumen con las horas
aproximadas dedicadas a cada etapa. A continuacion se a nade un breve
comentario sobre cada tarea.
Tarea N umero de horas
Planicacion 50
Investigacion 150
Desarrollo de GeoTask 300
Pruebas 15
Documentacion 50
Total 565
Cuadro 4.1: Etapas del proyecto
Planicacion
Dada la envergadura del proyecto, era necesaria una etapa de plani-
cacion en la que se ha estudiado de forma cuidadosa el alcance del
mismo, los objetivos que debamos alcanzar y las posibles diculta-
des a encontrar durante el desarrollo.
Investigacion
Al comienzo del proyecto desconoca por completo el uso de la api
de Android. Por tanto, fue necesaria una larga etapa de formacion
personal utilizando varios recursos bibliogracos, as como realizar
peque nos ejemplos para familiarizarme con los conceptos y funcio-
nalidades que eran necesarios para la realizacion de la aplicacion.
13
14 4. Analisis temporal y costes de desarrollo
Desarrollo de GeoTask
Tras el periodo de formacion inicial y familiarizarme con la api de
Android en la etapa de investigacion, dio comienzo el desarrollo de
GeoTask. Fue la etapa mas larga debido a que cada funcionalidad
a nadida era probada e investigada antes de continuar.
Pruebas
Durante la implementacion se fueron realizando pruebas para ve-
ricar que las tareas que a nadamos funcionaban correctamente de
forma individual, pero al nalizar GeoTask se realizaron pruebas pa-
ra testear la abilidad y el correcto funcionamiento de la aplicacion
en su conjunto.
Documentacion
Conjuntamente con el desarrollo de la aplicacion, se procedio a la
redaccion del presente documento.
4.2 Costes de desarrollo
El unico gasto que ha ocasionado el proyecto es la adquisicion de un
terminal Android, en concreto un HTC Dream, adquirido libre por un
precio aproximado de 200 euros.
Aunque en el kit de desarrollo de Android se incluye un emulador muy
completo de la plataforma no es posible simular algunas caractersticas co-
mo el posicionamiento va WiFi o por torre celular. Por esto fue necesario
adquirir este terminal.
Las especicaciones completas del terminal son las siguientes:
Medidas: 117 x 55.7 x 17.1 mm
Peso: 158 g
Bateria: Li-Ion 1150 mAh. Brinda hasta 5 h 20 min de conversacon
y hasta 406 h de standby
Pantalla multitactil capacitiva de 3.2 pulgadas HVGA con 320 x 480
pixels de resolucion
Procesador: Qualcomm MSM7201A ARM11 528 MHz
Camara de 32 megapixels con Autofocus (desde 6cm hasta el in-
nito)
Android 2.2.1 (no ocial)
256 mb rom
4.3. Software Utilizado 15
Figura 4.1: HTC Dream
192 mb ram
Tarjeta microSD de 1gb expandible hasta 16 gb
Dual band UMTS 1700 2100 MHz
HSDPA/HSUPA 7.2/2 Mbit/s
GPRS/EDGE
Wi-Fi (802.11b/g)
Bluetooth 2.0 + edr
Receptor a-gps
Posicionamiento por torre celular y Wi-Fi
Br ujula digital
Acelerometro
Es un terminal de gama media y, aunque ya hay en el mercado
moviles con mayor potencia de procesado, tiene potencia de sobra
para realizar este proyecto.
El equipo de desarrollo ha sido mi ordenador personal, con un coste
aproximado de unos 1000 euros y el coste del software utilizado es
nulo al tratarse de herramientas gratuitas y en la mayora de los
casos libres.
16 4. Analisis temporal y costes de desarrollo
4.3 Software Utilizado
En esta seccion vemos de las herramientas utilizadas durante el desa-
rrollo de GeoTask. Para cada herramienta se ofrece una peque na descrip-
cion de sus funcionalidades y se adjuntan las razones por las cuales ha
sido elegida para el desarrollo frente a sus competidoras.
Eclipse
Es un Entorno Integrado de Desarrollo, del ingles Integrated Deve-
lopment Environment (ide), para todo tipo de aplicaciones libres,
inicialmente desarrollado por IBM, y actualmente gestionado por la
Fundacion Eclipse.
Herramienta para el programador desarrollada principalmente para
el desarrollo de aplicaciones Java, es posible a nadirle nuevas fun-
cionalidades al editor, a traves de nuevos modulos (plugins), para
programar en otros lenguajes de programacion ademas de Java co-
mo C/C++, PHP, Python, Ruby, Cobol, etc.
Es ademas el entorno mas utilizado por los desarrolladores de apli-
caciones Android, por esto ha sido elegido para la realizacion de este
proyecto.
SVN
Subversion es un sistema de control de versiones libre cuya primera
version fue lanzada en el a no 2000 por CollabNet. Es compatible
en mayor parte con su predecesor CVS. Gracias a esta herramienta
podemos guardar un historial de todas las versiones de los cheros
fuente del proyecto as como deshacer cambios en caso de que fuera
necesario. Con SVN conseguimos acceso al codigo del proyecto desde
cualquier equipo.
Ademas, pone a disposicion de cualquier interesado el codigo fuente
de forma sencilla.
Existen otros sistemas de control de versiones como Git o Mercurial.
Se ha elegido Subversion por su sencillez y por mostrarse sucien-
temente potente para gestionar el codigo de un proyecto de un solo
programador.
Inkscape
Inkscape es un editor de gracos vectoriales de codigo abierto, con
capacidades similares a Illustrator, Freehand, CorelDraw o Xara X,
usando el estandar de la W3C: el formato de archivo Scalable Vector
Graphics (SVG).
Las caractersticas soportadas incluyen: formas, trazos, texto, mar-
cadores, clones, mezclas de canales alfa, transformaciones, gradien-
tes, patrones y agrupamientos.
4.3. Software Utilizado 17
Inkscape tambien soporta meta-datos Creative Commons, edicion
de nodos, capas, operaciones complejas con trazos, vectorizacion de
archivos gracos, texto en trazos, alineacion de textos, edicion de
XML directo y mucho mas.
Puede importar formatos como Postscript, EPS, JPEG, PNG, y
TIFF y exporta PNG asi como muchos formatos basados en vec-
tores.
CAP

ITULO 5
Instalacion del entorno de trabajo
En este manual se va a tratar la instalacion paso a paso de las herra-
mientas necesarias para comenzar a desarrollar nuestra aplicacion sobre
un sistema Android. Los principales componentes son el sdk de Android,
el plugin ADT para eclipse, as como el propio ide Eclipse.
5.1 Requisitos del Sistema
Para desarrollar aplicaciones en Android usando las herramientas que
aporta su sdk, es necesario disponer del siguiente software en nuestro PC:
Sistema Operativo:
Windows XP (32-bit), Vista (32 o 64-bit), o Windows 7 (32 o
64-bit)
Mac OS X 10.5.8 or superior (x86 solo)
Linux (probado en Ubuntu Linux, Lucid Lynx)
GNU C Library (glibc) 2.7 o superior.
En Ubuntu Linux, version 8.04 o superior.
Entorno de desarrollo:
Eclipse ide
Eclipse 3.5 (Galileo) o superior.
Eclipse JDT plugin.
JDK 5 or JDK 6 (JRE no es suciente).
Android Development Tools plugin (recomendado).
No compatible con Gnu Compiler para Java (gcj).
Otros entornos de desarrollo:
19
20 5. Instalacion del entorno de trabajo
Apache Ant.
Ahora procederemos a explicar la instalacion del sdk de Android tra-
bajando en Windows 7 con el ide Eclipse Indigo.
5.2 Instalacion de Eclipse ide
Aunque la instalacion del ide no forma parte del proyecto vamos a
proceder a su instalacion, que es facilmente abordable desde su propia
web[13]. En la seccion Download, se elige la version deseada, que en
nuestro caso sera Eclipse ide for Java Developers para Windows 32 bits,
con un tama no de 128mb.
Una vez descargado, basta descomprimir y ejecutar eclipse.exepara
comenzar a usar la aplicacion.
Figura 5.1: Descarga de eclipse
5.3 Instalacion sdk Android
Entre los numeros recursos disponibles en la web de desarrolladores
de Android[4] tenemos la version mas reciente del sdk, en la seccion
sdk. En nuestro caso elegimos la version para Windows recomendada,
con un tama no de 32,3mb. Una vez completada la descarga, ejecutamos
el .exedescargado y seguimos los pasos para su correcta instalacion.
Una vez que lo hayamos instalado, se nos abrira el Android sdk Ma-
nagerpara poder descargarnos las versiones de las apis que queramos y
tras aceptar las licencias correspondientes, comenzara la descarga. En el
caso de que la aplicacion falle, deberemos ejecutar Android sdk Mana-
gercomo administrador.
5.4. Instalacion del plugin ADT de Eclipse 21
Figura 5.2: Descarga de sdk de Android
Antes de proseguir, es recomendable almacenar la ruta de la subcar-
peta tools en la variable de entorno pathde nuestro sistema. Para ello
hacemos clic con el boton derecho en Equipopara acceder a las Propie-
dades del sistema. En conguracion avanzada podemos acceder a dichas
variables. Basta buscar la variable path en la lista y hacer doble clic
para editar. Al valor actual debemos a nadir nuestra ruta, precedida por
;, para conservar los valores anteriormente almacenados.
Esto nos falicitara el acceso mediante smbolo del sistema a algunas
conguraciones del sdk Android por comandos, no siendo necesario escri-
bir la ruta completa de la ubicaci on de las utilidades.
5.4 Instalacion del plugin ADT de Eclipse
Usando Eclipse, este plugin nos facilitara tareas de programacion, si-
mulacion y depuracion de nuestras aplicaciones. Para descargarlo, basta
acceder a Install new softwaredel men u Help, e introducir la direc-
cion donde se ubica[16] como directorio de trabajo. Aunque por razones
de seguridad es preferible usar el protocolo https, en caso de problemas
tambien podra usarse http.
A continuacion debe ofrecernos la instalacion de Developer Tools,
desplegando el arbol podremos ver que se compone de Android ddms,
Android Developer Tools, Android hierarchy Viewery Android Tra-
ceview. Elegimos las dos primeras herramientas que son las imprescin-
dibles y tras aceptar la correspondiente licencia en el siguiente paso, co-
mienza la descarga del nuevo software.
Una vez descargado e instalado hay que congurar las nuevas utilidades
para que Eclipse reconozca el sdk Android. Para ello, en el men u Win-
22 5. Instalacion del entorno de trabajo
Figura 5.3: Descarga de las distintas apis
Figura 5.4: Instalacion de Android Developer Tools
5.5. Descargando el proyecto desde la forja de REDIRIS 23
Figura 5.5: Especicar ubicacion del sdk
dow/Preferences elegimos la opcion Android. En el cuadro de dialogo
mostrado debemos introducir la ruta donde fue instalado el sdk en el pa-
so anterior, por ejemplo C:\android-sdk-windows. Si todo el proceso se
ha realizado correctamente, tras pulsar el boton Apply nos apareceran
todas las versiones de las apis incluidas en nuestro sdk. Aceptamos los
cambios y ya podremos empezar a desarrollar para Android.
Sin embargo, para completar la puesta en marcha de las utilidades
que nos ofrece el plugin, todava nos queda por crear nuestro simulador,
o simuladores, para probar nuestras aplicaciones. Esto evitara tener que
acceder a nuestro terminal para testear cada cambio realizado en el codigo
fuente desarrollado.
Para ellos accedemos al men u Window\adv Manager, podremos
crear facilmente nuestros dispositivos haciendo clic en New. . . . Basta
elegir el nombre deseado, elegir la version de la api deseada y a nadir
la compatibilidad hardware que vayamos a necesitar. Tras hacer clic en
Create adv nuestro dispositivo aparecera en el listado.
24 5. Instalacion del entorno de trabajo
Figura 5.6: adv Manager
5.5 Descargando el proyecto desde la forja de
REDIRIS
Hay dos posibilidades :
Si trabajais en Linux. Para conseguir una copia del proyecto abri-
mos una Terminal e introducimos el siguiente comando:
svn checkout https://forja.rediris.es/svn/geotask
Solo queda importar el proyecto en eclipse utilizando la funcion
Import>Existing Projets Into Workspace.
Si trabajais en Windows. Debereis instalaros un cliente Subver-
sion para poder descargaros una copia del proyecto.
Ahora debereis crear una carpeta que sera donde guardareis la copia
del proyecto.
Una vez creada la carpeta, le damos sobre ella con el boton derecho
del raton y en el men u desplegable seleccionamos SVN Checkout.
En la URL del repositorio debemos escribir https://forja.rediris.es/svn/geotask
y le damos a OK para empezar la descarga.
CAP

ITULO 6
Analisis de requisitos, dise no e implementacion
Una vez que ya tenemos preparado nuestro entorno de trabajo y nos
hemos familiarizado con Android, podemos empezar con el desarrollo de
nuestra aplicacion.
Ademas del estudio del sistema operativo que incorpora Android, tam-
bien se han desarrollado algunas aplicaciones de prueba para irnos fami-
liarizando con el entorno de programacion que este ofrece y entender el
funcionamiento de diversas funcionalidades de Android que necesitamos
para poder realizar nuestra aplicacion.
Ahora pasaremos a explicar la realizacion de nuestra aplicacion divi-
diendola en tres apartados.
Primeramente pasaremos a desglosar el analisis de requisitos necesa-
rios que hemos necesitado para llevar a cabo la realizacion del proyecto.
Desde cuales son las tecnologas necesarias que hemos utilizado durante
la etapa de desarrollo hasta los conocimientos que hemos tenido que am-
pliar para combinar estas tecnologas y llegar al buen funcionamiento de
la aplicacion.
Seguidamente describiremos el dise no de nuestra aplicacion, en el se
analizara la estructura elegida para nuestro sistema, justicandola y ex-
plicando la relacion de cada clase con los modulos anteriormente expuestos.
Tras una fase teorica y otra teorico-practica, pasaremos a la practica,
propiamente dicha: el desarrollo de la aplicacion. Sera entonces cuando se
comentara con mas detalle el codigo de la aplicacion, ahondando en las
caracteristicas propias de Android, pudiendo aanzar los conocimientos
anteriormente expuestos.
6.1 Analisis de Requisitos
El principal objetivo de GeoTask es realizar ciertas tareas automati-
camente al llegar a un lugar determinado.
25
26 6. Analisis de requisitos, dise no e implementacion
Para determinar nuestra ubicacion, usaremos el dispositivo gps dis-
ponible en los terminales con Android, en el caso de que el dispositivo
gps no se encuentre activado, usaremos el geoposicionamiento via wi. Si
no tenemos activado el wi, usaremos como ultimo recurso la geoposicion
basada en las antenas de telefona movil.
GeoTask se cimenta en un concepto fundamental: el perl.
El perl nos indica que tareas queremos realizar en un area de proxi-
midad determinado.
Un perl esta compuesto por:
Nombre.
El nombre que pongamos sera el que aparezca en la pantalla princi-
pal.


Area de proximidad.
El area de proximidad no es mas que el area geograca que se encuen-
tra a una distancia del punto que elegimos como direccion, menor o
igual al radio que hemos seleccionado.
Se compone de un punto central (direccion) y el radio.
Tareas que queremos realizar.
Estas tareas pueden ser :
Recibir recordatorios.
Enviar sms.
Realizar llamadas.
Realizar una lista negra de nuestros contactos.
Realizar una lista blanca de nuestros contactos.
Enviar tweets.
Actualizar nuestro estado en Facebook.
El primer paso que debemos hacer es crear una perl. Para ello debe-
mos de proporcionarle un nombre un nombre y elegir el area de proximidad
que queremos que tenga esa tarea.
A primera instancia sera necesaria la localizacion del usuario sobre el
mapa. Este posicionamiento se realizara sobre un mapa proporcionado por
la api de Google Maps para Android y tendremos un radio de cobertura
de 100 metros, que sera el radio mas peque no que podremos elegir, y que
podremos modicar din amicamente. A continuacion podremos movernos
con total libertad por el mapa en el caso de que queramos elegir otro lugar.
El ultimo paso es elegir las distintas tareas que queremos que se ha-
gan. Algunas tareas podran ser seleccionadas una sola vez, como realizar
6.1. Analisis de Requisitos 27
llamadas y realizar una lista negra o blanca de nuestros contactos, las
restantes podran ser seleccionadas las veces que queramos.
Cada perl podra ser activado/desactivado desde la pantalla principal.
Para que funcione correctamente nuestra aplicacion y se realicen au-
tomaticamente las tareas, debemos habilitar un servicio, en background,
que se encargara de actualizar la ubicacion en tiempo real del telefono,
que podremos parar en el momento que consideremos oportuno.
Este servicio sera el encargado de vericar si nos encontramos dentro
del area de proximidad asociado alg un perl. Si nos encontramos dentro
del area de proximidad de alg un perl, el sistema ejecutara las tareas aso-
ciadas a dicho perl. En caso contrario lo normal sera no hacer nada, a
menos que alguna de las tareas del perl asociada al area de proximi-
dad del que salimos, sea una lista negra o blanca de nuestros contactos.
En ese caso, deberemos eliminar esa lista para que el sistema funcione
correctamente.
Ahora vamos a pasar a explicar todas las tecnologas o componentes
que utilizamos en GeoTask:
GPS (Global Positioning System). Es un sistema global de na-
vegacion por satelite (GNSS) que permite determinar en todo el
mundo la posicion de un objeto, una persona o un vehculo con una
precision hasta de centmetros (si se utiliza gps diferencial), aunque
lo habitual son unos pocos metros de precision. El sistema fue desa-
rrollado, instalado y actualmente operado por el Departamento de
Defensa de los Estados Unidos.
El gps funciona mediante una red de 24 satelites en orbita sobre el
globo, a 20.200 km, con trayectorias sincronizadas para cubrir toda
la supercie de la Tierra. Cuando se desea determinar la posicion,
el receptor que se utiliza para ello localiza automaticamente como
mnimo tres satelites de la red, de los que recibe unas se nales in-
dicando la identicacion y la hora del reloj de cada uno de ellos.
Con base en estas se nales, el aparato sincroniza el reloj del gps y
calcula el tiempo que tardan en llegar las se nales al equipo, y de tal
modo mide la distancia al satelite mediante triangulacion(metodo
de trilateracien inversa), la cual se basa en determinar la distancia
de cada satelite respecto al punto de medicion. Conocidas las dis-
tancias, se determina facilmente la propia posicion relativa respecto
a los tres satelites. Conociendo ademas las coordenadas o posician
de cada uno de ellos por la se nal que emiten, se obtiene la posicion
absoluta o coordenadas reales del punto de medicion. Tambien se
consigue una exactitud extrema en el reloj del gps, similar a la de
los relojes atomicos que llevan a bordo cada uno de los satelites.
Actualmente dentro del mercado de la telefona movil la tendencia es
la de integrar, por parte de los fabricante, la tecnologa gps dentro de
28 6. Analisis de requisitos, dise no e implementacion
sus dispositivos. El uso y masicacion del gps esta particularmente
extendido en los telefonos moviles smartphone, lo que ha hecho surgir
todo un ecosistema de software para este tipo dispositivos, as como
nuevos modelos de negocios que van desde el uso del terminal movil
para la navegacion tradicional punto-a-punto hasta la prestacion de
los llamados Servicios Basados en la Localizacion(LBS).
Localizacion WiFi. El mecanismo de posicionamiento basado en
redes inalambricas WiFi o redes Wireless se basa en las medicio-
nes que los puntos de acceso de la red hacen de la potencia y de
la relacion snr de las emisiones transmitidas por los dispositivos
inalambricos que se conectan a la red. Una red Wireless utiliza fre-
cuencias libres y no necesita licencia.
Localizacion GSM. Es un servicio ofrecido por las empresas ope-
radoras de telefona movil que permite determinar, con una cierta
precision, donde se encuentra fsicamente un terminal movil deter-
minado. Los distintos metodos que se emplean para la localizacion
gsm son los siguientes:
Celula de origen (Cell of Origin), en el que se incluyen id de
celula (Cell id) e id de celula mejorada (Enhanced Cell id).
id de celula: la precision de este metodo es de 200 m en
areas urbanas, 2 km en areas suburbanas y vara entre 3 -
4 km en entornos rurales.
id de celula mejorada: con este metodo se consigue una
precision muy parecida a la que ofrece el Cell id para zonas
urbanas, y en entornos rurales ofrece sectores circulares de
550 m.
Diferencia de tiempo observada o e-otd (Enhanced-Observed
Timed Dierence): la precision de este metodo depende del
n umero de lmus disponibles en la red, variando entre 50 m
y 200 m con un lmu por cada 3 estaciones base.
Tiempo de llegada (Time of Arrival).
Angulo de llegada (Angle of Arrival).
Enhanced Observed Time Dierence (estimacion mejorada de
la diferencia de tiempo).
gps Asistido (Assisted gps).
API Google Maps para Android. Proporciona un uso facil y fa-
miliar del servicio Google Maps directamente desde nuestro terminal
Android, gracias a la inclusion de la librera externa com.google.android.maps.
Ofrece una funcionalidad similar al servicio Google Maps via web,
6.1. Analisis de Requisitos 29
permitiendo desplazamientos sobre el mapa, zoom, y otras opciones
comunes.
La clase MapView, que hereda de la clase ViewGroup en la api de
Android, es el punto de inicio para su inclusion en nuestra aplicacion.
Se encarga de mostrar el mapa, congurarlo y hacerlo usable. Sobre
ella se desarrollara toda la funcionalidad adicional necesaria.
Hay otras clases suministradas por la misma librera que seran de
especial interes en nuestra aplicacion. Entre otras, Overlay nos per-
mite a nadir nuevas capas a nuestro mapa, donde dibujaremos la
informacion que necesitemos.
Servicio SMS. El servicio de mensajes cortos o sms (Short Mes-
sage Service) es un servicio disponible en los telefonos moviles que
permite el envo de mensajes de texto entre telefonos moviles y otros
dispositivos de mano. sms fue dise nado originariamente como par-
te del estandar de telefona movil digital gsm, pero actualmente
esta disponible en una amplia variedad de redes, entre ellas las redes
3G. Un sms incluye una cadena alfanumerica de hasta 160 caracte-
res de 7 bits, y se encapsulan mediante unos estandares de telefona
movil transparentes al usuario.
El proceso de envo de sms consiste en el procesamiento de un centro
de mensajes cortos, o smsc (Short Message Service Center) que se
encarga de almacenarlos hasta que son enviados y de conectar con
el resto de elementos de la red gsm.
Cuando un usuario enva un sms, se incluyen una serie de parametros
como la fecha de envo, la validez del mensaje, n umero de telefono
del emisor y del receptor y el n umero del smsc que ha originado el
mensaje. De esta forma, se asegura el correcto procesamiento a lo
largo de toda la cadena.
Al tener los sms un tama no tan peque no, no es necesario asignarles
ning un canal de radio exclusivo para el envo, lo que permite un uso
muy optimo y ecaz a la hora de enviarlos y recibirlos.
Conexion de datos (WIFI/3G/GPRS). Nuestra aplicacion ne-
cesitara disponer de conexion a la Red para poder ver correctamente
el mapa de Google Maps, poder enviar tweets a nuestra cuenta de
Twitter o actualizar el estado de nuestra cuenta de Facebook. Es-
ta conexion se realiza mediante peticiones internas por parte de las
distintas apiS que utilizamos en GeoTask (Maps,Twitter,Facebook).
Twitter4J. Es una biblioteca no ocial para la api de Twitter. Con
esta biblioteca, podremos integrar facilmente cualquier aplicacion
Android con Twitter.
30 6. Analisis de requisitos, dise no e implementacion
Gracias a Twitter4J podremos darle acceso a nuestra aplicacion a
las cuentas de Twitter que deseemos y poder enviar tweets con ellas
a traves de GeoTask.
Facebook SDK. Kit de desarrollo software ocial de Facebook para
poder integrar nuestra aplicacion Android de una forma muy sencilla
con Facebbok.
Este kit de desarrollo software cuenta con las siguientes caractersti-
cas :
Utiliza autenticacion OAuth2.0.
Posibilidad de hacer peticiones a la nueva Graph api.
Publicar historias a Facebook a traves de Feeds.
Gracias a este kit de desarrollo software que nos proporciona Face-
book, podremos darle acceso a nuestra aplicacion a las cuentas de
Facebook que deseemos y poder actualizar el estado de cada una de
ellas a traves de GeoTask.
En cuanto a requisitos no funcionales, ademas de los conocimientos re-
queridos por las herramientas de desarollo expuestas anteriormente, es ne-
cesario tener en cuenta otros aspectos importantes el proyecto debe desa-
rrollarse con el concepto de modularidad necesarios, siguiendo las pautas
de bajo acoplamiento y alta coherencia.
Tambien es importante tener en cuenta el hecho de estar programando
para un sistema empotrado, por lo que habra que evitar consumir recursos
que no sean estrictamente necesarios, que tendran un alcance signicativo
mas alla de nuestra aplicacion, ya que podra provocar un drastico efecto
sobre el consumo de bateria. El punto mas crtico en este sentido sera la
recepcion de la se nal del gps.
Sobre las posibilidades ofrecidas por la aplicacion, dado que no quere-
mos que su uso se limite a Espa na, debera ofrecer la posibilidad de usar
varios idiomas.
Finalmente, dadas las diferentes versiones del sdk de Android que han
sido publicadas y las modicaciones que, aunque peque nas, han ido reali-
zando los distintos fabricantes, es importante que el sistema sea probado
bajo la mayor variedad de versiones posibles, ya sea mendiante simula-
cion o en terminales reales. Sobre este aspecto ahondaremos en la fase de
Pruebas.
6.2 Dise no
Tras el Analisis de Requisitos, ya podemos realizar el dise no de nuestro
sistema, distribuyendo las funcionalidades previstas de la forma mas opti-
6.2. Dise no 31
ma posible, proporcionando un entendimiento facil e intuitivo, as como
su mantenimiento.
Hemos organizado el proyecto en 7 paquetes.
Un paquete en Java es un contenedor de clases que permite agrupar
las distintas partes de un programa cuya funcionalidad tienen elementos
comunes.
Nuestra aplicacion contara con una clase principal llamada Main y
que sera la clase a la que accedamos cuando arrancamos la aplicacion.
En ella es donde se mostraran los perles que ya hayamos creado, con
la posibilidad de editarlos, eliminarlos o activarlos/desactivarlos, tambien
podremos a nadir nuevos perles, ver las cuentas de las redes sociales en
las que nuestra aplicacion tiene permiso para usar (clase Accounts) y ha-
bilitar/deshabilitar el servicio encargado de obtener nuestra localizacion.
Esta clase extiende de Activity. Una Activity representa el componente
principal de la interfaz graca de una aplicacion Android. Se puede pensar
en una actividad como el elemento analogo a una ventana en cualquier otro
lenguaje visual.
Otra clase importante es Perl, que es la encargada de crear o editar
los perles y de crear la Activity Map, que tiene asignadas 3 tareas basicas:
construccion del mapa, designacion de area de proximidad donde el centro
es un localizador de posicion donde podremos aumentar/disminuir el radio
e interactuar con el localizador de posicion anterior y congurar el modo
de vista del mapa. El modo de vista nos ofrecera la posibilidad de elegir
entre Map y Satellite.
Estas clases se encuentran en el paquete com.pfc.geotask.
En el paquete com.pfc.database, se encuentran todas tablas necesarias
para el correcto funcionamiento de nuestra aplicacion.
La clase principal de este paquete es la clase DBAdapter, que es la
encargada de crear todas las bases de datos y triggers que necesita la
aplicacion.
En el paquete com.pfc.task se encuentran todas las Activities corres-
pondientes a las tareas que puede ejecutar nuestra aplicacion.
Todas estas clases cuentan con la misma estructura, a excepcion de 3
de ellas:
La clase BlackWhitelist, que se encarga tanto de crear una lista negra
como una lista blanca de nuestros contactos. Tiene la particularidad
de que podremos cambiar de tarea desde la misma aplicacion a traves
del men u.
Las clases Twitter y TFacebook, que se encargan de las tareas rela-
cionadas con las redes sociales Twitter y Facebook, cuentan con la
aprticularidad de que podremos autorizar el uso de nuevas cuentas
a traves del men u.
32 6. Analisis de requisitos, dise no e implementacion
Para ello cada una crea una Activity (AutorizaTwitter y Autoriza-
Facebook respectivamente) que son las encargadas de realizar todo
el proceso necesario para ello.
Estas dos Activities encargadas de dar permisos a nuestra aplicacion,
se encuentran en el paquete com.pfc.geotask.authorize.
La clase fundamental de nuestra aplicacion se encuentra en el paquete
com.pfc.geotask.service.
Es la clase GeoService y su principal funcionalidad es asignar el listener
que se encargara de actualizar periodicamente la posicion del usuario y
lanzar las alertas de proximidad de todos los perles que se encuentren
activos.
Esta clase extiende de Service. Un Service es un componente sin inter-
faz graca que se ejecutan en segundo plano. En concepto, es exactamente
igual a los servicios presentes en cualquier otro sistema operativo. Los ser-
vicios pueden realizar cualquier tipo de acciones, por ejemplo actualizar
datos, lanzar noticaciones, o incluso mostrar elementos visuales (Activi-
ties) si se necesita en alg un momento la interaccion con del usuario.
Cuando entremos dentro del area de proximidad de alg un perl, en-
traran en juego las clases que se encuentran en el paquete com.pfc.broadcast
Cuando entramos dentro de un area de proximidad se activa la clase
AreaProximityReceiver. Su funcion principal es la de detectar sin hemos
salido del area de proximidad del perl o estamos entrando.
Si hemos salido deberemos activar la clase RemoveBWlistReceiver para
eliminar del sistema las lista blanca o negra que pudiera tener el perl.
Si estamos entrando, deberemos activar todas las clases que lanzan las
tareas automaticamente que esten asociadas al perl.
Esta clase extiende de BroadcastReceiver. Un BroadcastReceiver es un
componente destinado a detectar y reaccionar ante determinados men-
sajes o eventos globales generados por el sistema (por ejemplo: Batera
baja, sms recibido, Tarjeta sd insertada, . . . ) o por otras aplicacio-
nes (cualquier aplicacion puede generar mensajes (intents, en terminologa
Android) broadcast, es decir, no dirigidos a una aplicacion concreta sino a
cualquiera que quiera escucharlo).
Un intent es el elemento basico de comunicacion entre los distintos
componentes Android que hemos descrito anteriormente. Se pueden en-
tender como los mensajes o peticiones que son enviados entre los distintos
componentes de una aplicacion o entre distintas aplicaciones. Mediante
un intent se puede mostrar una actividad desde cualquier otra, iniciar un
servicio, enviar un mensaje broadcast, iniciar otra aplicacion, etc.
Nos falta hablar del paquete com.pfc.geotask.utils. A este paquete per-
tenecen las clases Java, la mayoria son estaticas, que nos ofrecen ciertas
funcionalidades necesarias para varias clases, por ejemplo: saber si un
n umero es un n umero de telefono valido, etc.
6.3. Implementacion 33
Figura 6.1: Diagrama de clases de GeoTask
A continuacion se representa un diagrama de clases donde se reejan
las principales funcionalides de cada una, as como su interconexion.
Tambien puede verse la interaccion usuario-sistema a la hora de elegir
el area de proximidad de un perl y a la hora de pedir a nuestra aplicacion
autorizacion para usar cuentas de distintas redes sociales.
6.3 Implementacion
Antes de empezar, es importante comentar la estructura de un proyec-
to Android. Su peculiaridad reside en la carpeta res, de resources, donde
a su vez se incluyen tres tipos de carpetas: drawable, para imagenes, la-
yout, para los cheros de conguracion graca, y values, donde se crean
diccionarios de variables, por ejemplo Strings.
34 6. Analisis de requisitos, dise no e implementacion
Figura 6.2: Estructura del proyecto GeoTask en eclipse
Figura 6.3: Interaccion usuario sistema a la hora de elegir el area de pro-
ximidad de un perl
6.3. Implementacion 35
Figura 6.4: Interaccion usuario sistema a la hora de autorizar una cuenta
de una red social
36 6. Analisis de requisitos, dise no e implementacion
Sobre esta estructura reside la modularidad denida en un proyecto
Android, de forma que todos estos recursos quedan totalmente desaco-
plados del codigo de la aplicacion. Su uso no es obligatorio, pero si muy
recomendado, por directivas propias de buenas practicas en el dise no del
software.
Ademas existe la carpeta Gen, autogenerada, que hace las funciones de
ndice para nuestros recursos a traves del chero R.java contenido en nues-
tro codigo fuente, con el que podremos acceder a los recursos comentados
anteriormente.
6.3.1. A nadir una nueva tarea
Ahora pasaremos a explicar cuales son los pasos a seguir si queremos
a nadir una nueva tarea a GeoTask.
El primer paso es dise nar la base de datos de la tarea que queremos
a nadir. Para ello deberemos determinar que datos son necesarios para
poder ejecutar adecuadamente la tarea sin que le usuario tenga que inter-
venir.
El segundo paso es crear la base de datos, para ello deberemos seguir
los siguientes pasos:
Modicar la variable DATABASE VERSION de la clase DBAdap-
ter.java para que el sistema cree correctamente la nueva base de
datos.
A nadir el codigo necesario para la creacion de la base de datos,
as como el trigger en el caso de que sea necesario para el borrado
en cascada (la version 2.1 de Android no trae el borrado en casca-
da de forma nativa). No olvidar modicar las funciones de la clase
DBAdapter.java onCreate y onUpgrade.
Crear una clase en el paquete com.pfc.database donde se implemen-
taran todos los metodos necesarios para consultar, insertar, actuali-
zar o eliminar registros de la base de datos. Para ello nos podemos
guiar de la estructura de cualquiera de las clases ya creadas en ese
paquete.
1 private static final String DATABASE_CREATE_CFACEBOOK =
2 "create table " + CFacebookDB.DATABASE_TABLE + " ( "
+ CFacebookDB.KEY_ROWID +
3 " integer primary key autoincrement, " + CFacebookDB
.KEY_NAME + " text not null, " +
4 CFacebookDB.KEY_ACCESS_TOKEN + " text not null, " +
CFacebookDB.KEY_ACCESS_EXPIRES +
5 " text not null);";
6
6.3. Implementacion 37
7 public static final String DATABASE_NAME = "Geotask";
8 public static final int DATABASE_VERSION = 2;
9
10 /**
11 * Triggers necesarios para borrar en cascada.
12 */
13 private static final String CREATE_TRIGGER_DELETE_REMINDER=
14 "CREATE TRIGGER fkd_reminder_perfil_id "
15 +"BEFORE DELETE ON " + PerfilDB.DATABASE_TABLE
16 +" FOR EACH ROW BEGIN "
17 +"DELETE FROM " + ReminderDB.DATABASE_TABLE
18 +" WHERE " + ReminderDB.KEY_IDPERFIL + " = OLD."
19 +PerfilDB.KEY_ROWID+"; END;";
Codigo 6.1: Algunos atributos de la clase DBAdapter
1 @Override
2 public void onCreate(SQLiteDatabase db) {
3 db.execSQL(DATABASE_CREATE_PERFIL);
4 db.execSQL(DATABASE_CREATE_REMINDER);
5 db.execSQL(CREATE_TRIGGER_DELETE_REMINDER);
6 db.execSQL(DATABASE_CREATE_SMS);
7 db.execSQL(CREATE_TRIGGER_DELETE_SMS);
8 db.execSQL(DATABASE_CREATE_CALL);
9 db.execSQL(CREATE_TRIGGER_DELETE_CALL);
10 db.execSQL(DATABASE_CREATE_BWLIST);
11 db.execSQL(CREATE_TRIGGER_DELETE_BWLIST);
12 db.execSQL(DATABASE_CREATE_TWITTER);
13 db.execSQL(CREATE_TRIGGER_DELETE_TWITTER);
14 db.execSQL(DATABASE_CREATE_CTWITTER);
15 db.execSQL(CREATE_TRIGGER_DELETE_CTWITTER);
16 db.execSQL(DATABASE_CREATE_FACEBOOK);
17 db.execSQL(CREATE_TRIGGER_DELETE_FACEBOOK);
18 db.execSQL(DATABASE_CREATE_CFACEBOOK);
19 db.execSQL(CREATE_TRIGGER_DELETE_CFACEBOOK);
20
21 }
22 /*
23 * (non-Javadoc)
24 * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(
android.database.sqlite.SQLiteDatabase, int, int)
25 */
26 @Override
27 public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion) {
28 Log.w(TAG, "Upgrading database from version " +
oldVersion + " to "
29 + newVersion + ", which will destroy all old
data");
30 db.execSQL("DROP TABLE IF EXISTS " + PerfilDB.DATABASE_
38 6. Analisis de requisitos, dise no e implementacion
TABLE);
31 db.execSQL("DROP TABLE IF EXISTS " + ReminderDB.
DATABASE_TABLE);
Codigo 6.2: Metodos onCreate y onUpgrade de la clase DBAdapter
El siguiente paso sera crear la pantalla de la nueva tarea, para ello
debemos realizar los siguientes pasos:
Crear una clase en el paquete com.pfc.geotask.task, donde se encon-
trara toda la logica necesaria para la creacion de una pantalla para
que el usuario de valor a todos los datos que necesitemos para el co-
rrecto funcionamiento de la tarea, interactuando con la base de datos
cuando sea necesario. Para ello nos podemos guiar de la estructura
de cualquiera de las clases ya creadas en ese paquete.
Modicar la clase Perl.java
Crear una atributo de la clase que hace referencia a la base de
datos anteriormente creada
Desarrollar todo el codigo necesario en el metodo OnCreate
para abrir la base de datos y en el metodo onDestroy para
cerrarla.
Modicar el metodo removeTask para poder eliminar dicha ta-
rea llegado el momento.
Modicar el metodo llData para poder mostrar la tarea en el
perl.
Modicar el metodo crearDialogoSeleccion para que la nueva
tarea se muestre a la hora de a nadir una nueva tarea.
Modicar el metodo onListItemClick para poder editar la nueva
tarea al pulsar sobre ella.
1 protected void onListItemClick(View v, int position) {
2 Task t = (Task) lv.getItemAtPosition(position);
3 Intent i = null;
4
5 String database = t.getDatabase();
6 //Comprobamos que tarea es
7 if(database.equals(ReminderDB.DATABASE_TABLE))
8 i = new Intent(this, Reminder.class);
9 if(database.equals(SmsDB.DATABASE_TABLE))
10 i = new Intent(this, Sms.class);
11 if(database.equals(CallDB.DATABASE_TABLE))
12 i = new Intent(this, Call.class);
13 if(database.equals(BWlistDB.DATABASE_TABLE))
14 i = new Intent(this, BlackWhitelist.class);
15 if(database.equals(TwitterDB.DATABASE_TABLE))
6.3. Implementacion 39
16 i = new Intent(this, Twitter.class);
17 if(database.equals(FacebookDB.DATABASE_TABLE))
18 i = new Intent(this, TFacebook.class);
19
20 i.putExtra(ReminderDB.KEY_IDPERFIL, t.getId());
21 i.putExtra(PerfilDB.KEY_ROWID, mRowId);
22 // Nos vamos a la pantalla correspondiente
23 startActivityForResult(i,ACTIVITY_TASK);
24 }
Codigo 6.3: Metodo onListItemClick de la clase Perl
1
2 public void removeTask(int position){
3
4 Task t = list_tasks.get(position);
5 String database = t.getDatabase();
6
7 // Buscamos de que tarea se trata
8 if(database.equals(ReminderDB.DATABASE_TABLE))
9 reminderdb.deleteReminder(t.getId());
10 else if(database.equals(SmsDB.DATABASE_TABLE))
11 smsdb.deleteSms(t.getId());
12 else if(database.equals(CallDB.DATABASE_TABLE))
13 calldb.deleteCall(t.getId());
14 else if(database.equals(BWlistDB.DATABASE_TABLE))
15 blackwhitelistdb.deleteBWlist(t.getId());
16 else if(database.equals(TwitterDB.DATABASE_TABLE))
17 twitterdb.deleteTweet(t.getId());
18 else if(database.equals(FacebookDB.DATABASE_TABLE))
19 facebookdb.deleteMessage(t.getId());
20 }
Codigo 6.4: Metodo removeTask de la clase Perl
Si estamos realizando una tarea relacionada con alguna red social,
deberemos modicar la clase Accounts del paquete com.pfc.geotask
y realizar los siguientes pasos:
Crear una atributo de la clase que hace referencia a la base
datos donde guardamos las cuentas de esa red social.
Desarrollar todo el codigo necesario en el metodo OnCreate
para abrir la base de datos y en el metodo onDestroy para
cerrarla.
Modicar el metodo removeAccount para poder eliminar dicha
tarea llegado el momento.
Modicar el metodo llData para poder mostrar la tarea en el
perl.
40 6. Analisis de requisitos, dise no e implementacion
Modicar el metodo crearDialogoCuentas para poder a nadir
cuentas de dicha red social.
1 private void fillData() {
2
3 list_accounts = new ArrayList<Task>();
4 list_accounts.addAll(ctwitterdb.getAllAccount());
5 list_accounts.addAll(cfacebookdb.getAllAccount());
6
7 setListAdapter(new TaskAdapter(this, list_accounts));
8 }
Codigo 6.5: Metodo llData de la clase Accounts
1
2 private Dialog crearDialogoCuentas() {
3
4 final String[] items = getResources().getStringArray(R.
array.accounts);
5 AlertDialog.Builder builder = new AlertDialog.Builder(
this);
6 builder.setTitle(R.string.seleccion_cuenta);
7 builder.setItems(items, new DialogInterface.
OnClickListener() {
8 @Override
9 /*
10 * (non-Javadoc)
11 * @see android.content.DialogInterface.
OnClickListener#onClick(android.content.
DialogInterface, int)
12 */
13 public void onClick(DialogInterface dialog, int item
) {
14
15 String seleccionado = items[item];
16 if(getString(R.string.task_twitter).equals(
seleccionado))
17
18 autoriza_twitter();
19 else if(getString(R.string.task_facebook).equals
(seleccionado))
20 autoriza_facebook();
21 }
22
23 });
24 return builder.create();
25 }
Codigo 6.6: Metodo CrearDialogoCuentas de la clase Accounts
6.3. Implementacion 41
El tercer paso sera a nadir toda la logica necesaria para que la tarea se
ejecute sin la intervencion del usuario. Para ello debemos crear una clase en
el paquete com.pfc.geotask.broadcast, pudiendonos guiar de la estructura
de cualquiera de las clases ya creadas en este paquete.
Por ultimo deberemos modicar el archivo AndroidManifest.xml, don-
de deberemos realizar las siguientes acciones:
A nadir nuevos permisos si es necesario.
A nadir las Activities y BroadcastReceivers que hayamos creado.
Despues de realizar todos estos pasos, ya podremos probar la nueva
tarea para comprobar su correcto funcionamiento.
6.3.2. Problemas encontrados
A la hora de implementar esta aplicacion, nos hemos encontrado con
una serie de problemas que pasamos a detallar a continuacion:
No hemos podido implementar una tarea que hiciera uso de la apli-
cacion whatsapp, al no poseer una api p ublica. Sera interesante que
la tuviera, ya que es un servicio muy usado actualmente.
Por el mismo motivo, no hemos podido implementar una tarea que
interactuara con la red social espa nola Tuenti. Cuenta con una api
p ublica cerrada(debes tener una licencia), con lo cual nos es impo-
sible acceder a dicha api.
Intentamos realizar una tarea para enviar correos electronicos de
forma automatica, pero se desecho al tener que utilizar clases Java
auxiliares, que presentaban varios inconvenientes:
No funcionaban para cualquier proveedor de correos electroni-
cos(Gmail, Hotmail, etc.), sino para uno en particular. Lo cual
haca imposible que nuestra aplicacion pudiera enviar correos
desde cualquier proveedor.
A un as, optamos por utilizar una clase Java auxilar que nos
asegurara el envo desde un correo Gmail.
Para enviar los correos electronicos estas clases necesitan la
contrase na de la cuenta de correo. Este hecho nos pareca crti-
co, ya que necesitabamos obtener y guardar la contrase na, en
vez de utilizar otro tipo de autenticacion como en las cuentas
de Twitter y Facebook.
Esto nos hizo desistir, ya que despues de preguntar a amigos y
familiares, nos dijeron que no se sentiran seguros a la hora de
poner sus contrase nas de sus cuentas de correos electronicos.
42 6. Analisis de requisitos, dise no e implementacion
Tuvimos un problema con el manejo de memoria que hace Android.
El problema surga al autorizar a nuestra aplicacion utilizar una
cuenta de Twitter y era un error aleatorio. Al utilizar el navegador
para realizar el proceso de autorizacion y dejar a nuestra aplicacion
en pausa, Android, a veces, cerraba la aplicacion ya que necesitaba
memoria ram para otros procesos.
Esto provocaba que al volver del proceso de autorizacion, no concor-
dara las claves utilizadas para el proceso y no se pudiera completar
el proceso.
Esto se soluciono, abriendo el navegador en la misma aplicacion,
asegurandonos con ello que Android no nos cerrara la aplicacion y
poder as completar todo el proceso de manera satisfactoria.
CAP

ITULO 7
Pruebas
Una vez completado el desarrollo de una aplicacion es necesario llevar a
cabo una fase de pruebas que, aunque no garanticen totalmente el correcto
funcionamiento de la aplicacion, s podremos decir que, al menos, en las
condiciones que han sido supervisadas el resultado ha sido positivo.
El motivo es que es imposible desarrollar una batera de pruebas para
experimentar absolutamente todas las posibilidades de funcionamiento y
todas las condiciones del sistema. Ademas, el periodo de pruebas tambien
supone un coste, por lo que habr a que decidir la abilidad que deseamos
ofrecer, basandose en un equilibrio coste-garanta.
Estas pruebas no comprueban unicamente el funcionamiento de la apli-
cacion nal, lo que se conoce como pruebas de integracion, sino tambien el
funcionamiento parcial de de cada funcionalidad que se va incorporando
al sistema, lo que se conoce como pruebas unitarias.
De lo anterior se desprende que las pruebas no se llevan a cabo unica-
mente al nalizar el desarrollo, sino que es una operacion necesaria a lo
largo de todo el proceso. Inicialmente seran casos mas parecidos a prue-
bas unitarias y progresivamente iran acercandose a las pruebas nales de
integracion.
7.1 Pruebas unitarias
Para la realizacion de pruebas, el sdk de Android ofrece la herramien-
ta de gestion de avds (Android Virtual Devices), de la que ya hablamos
anteriormente en el captulo dedicado a la instalacion del entorno de desa-
rrollo. Este ha sido el metodo principal elegido en estas pruebas de uni-
tarias, aunque tambien se han realizado algunas, mas reducidas, en un
terminal HTC Dream.
El avd elegido esta basado en la version Google apis Android 2.1,
mientras que el terminal HTC Dream cuenta con la version de Android
43
44 7. Pruebas
2.2.1. Este terminal virtual cuenta con una pantalla tipo WVGA854 y
lleva instalado el dispositivo gps.
La simulacion del gps se realiza obligatoriamente enviando coordena-
das al receptor, ya sea mediante Eclipse o mediante la linea de comandos.
El funcionamiento de la primera opcion es trivial, activando la perspectiva
ddms de Eclipse. En el segundo caso hay que conectar usando telnet con
el avd mediante el comando telnet localhost X, donde X es el id asignado
por el Sistema Operativo al avd, normalmente 5554. Una vez conectado,
el comando necesario es geo x [latitud] [longitud].
En esta fase de pruebas hemos probado todas las tareas de forma
separada, cada vez que a nadamos una nueva, para comprobar su correcto
funcionamiento, corrigiendo aquellas donde aparece alg un error o fallo,
posibilitando incluso cambios en el dise no para conseguir optimizaciones
y/o el correcto funcionamiento de la aplicacion.
Tambien fue probado en esta etapa la interaccion con Google Maps,
a nadiendo mejoras para que al usuario le resulte lo mas comodo posible
elegir el area de proximidad de un perl.
Para estas pruebas unitarias tambien se ha usado el terminal HTC
Dream, aunque en menor medida porque se ha usado una vez que las
pruebas en el avd han sido positivas, para cerciorarnos de que funciona
correctamente en un terminal real.
Hemos usado el terminal debido mayormente a que el comportamiento
del simulador no es dedigno a un terminal real, sobre todo en tiempos
de procesamiento y de respuesta, resultando en unos casos mas a rapido y
en otros mas lento. Ademas hay funcionalidades que no podemos probar
en el simulador, como la obtencion de la unicacion a traves de Wi-Fi o de
las antenas de telefona.
Longitud Latitud
Sevilla -5.99 37.3862
Jerez de la Frontera -6.06 36.7548
Las Cabezas de San Juan -5.940 36.9813
Chipiona -6.4358 36.7408
Madrid -3.700 40.4166
Cuadro 7.1: Coordenadas usadas en las pruebas
7.2 Pruebas de integracion
Las pruebas de integracion son las que determinan la calidad y a-
bilidad nal del sistema desarrollado, pues supone garantizar el correcto
funcionamiento, de forma global, bajo las condiciones probadas. En primer
lugar se ha probado el funcionamiento en el simulador sobre dos versiones:
Google apis Android 2.1 y Google apis Android 2.2.
7.2. Pruebas de integracion 45
Para las dos versiones, hemos realizando un ujo de operaciones nor-
mal: creacion de varios perles con sus correspondientes tareas, estando
algunos perles en el mismo area de proximidad y coincidiendo varias
tareas en ellos. Ademas se comprobara el correcto funciomamiento del
idioma ingles y en el terminal HTC Dream se ha probado el idioma es-
pa nol.
A continuacion se comentan los resultados para las diferentes versio-
nes, empezando por la mas avanzada. De esta forma podremos concluir
enunciando las compatibilidades de la aplicacion.
En el cuadro anterior se muestran las coordenadas usadas en las prue-
bas.
Google apis 2.2 (api Level 8).
Tras arrancar la aplicacion con el terminal en ingles, se observa un
funcionamiento normal. Pero al intentar crear el area de proximidad,
el sistema no es capaz de obtener el nombre de la direccion del punto
medio de nuestro area. Al realizar varias b usquedas por internet nos
encontramos con que parece ser que hay en bug en esta version que
no permite obtener el nombre de la direccion de un punto.
Esto se corrobora al probar la aplicacion en nuestro terminal HTC
Dream con version 2.2.1 de Android y comprobar que obtiene el
nombre de la direccion del punto central de nuestro area de proxi-
midad.
Ademas tambien comprobamos con el terminal en espa nol que la
aplicacion funciona de forma normal y que funciona correctamente
la aplicacion se tenemos dos perles en el mismo area de proximidad
con varias tareas del mismo tipo, por lo que el sistema parece que
se comporta como queremos sin obtener problemas de ning un tipo.
Con estos datos podemos decir que el resultado es satisfactorio.
Google apis 2.1 (api Level 7).
Ha sido la version utilizada para las pruebas unitarias, por lo que
aunque en este apartado solo se comentan las pruebas de integracion,
su compatibilidad esta ampliamente testada.
Tras iniciar la aplicacion con el terminal en ingles, se crean varios
perles con sus correspondientes tareas, algunas en el mismo area
de proximidad.
Una vez que tenemos todos los perles que queremos, vamos modi-
cando nuestra posicion a traves del comando geo x para comprobar
que solo se ejecutan los perles cuando estamos dentro del area de
proximidad y no en otro caso.
46 7. Pruebas
Una vez terminadas todas las pruebas, podemos decir que el sistema
funciona de forma correcta, sin detectarse ning un fallo en todo el
proceso, por lo que podemos decir que el resultado es satisfactorio.
CAP

ITULO 8
Manual
Una vez nalizada la implementacion de la aplicacion y habiendo pro-
bado su correcto funcionamiento, es necesario redactar un manual de uso,
de forma que, a un teniendo un uso intuitivo, cualquier usuario sea capaz
de familiarizarse facilmente con la interfaz y su correcto funcionamiento.
8.1 Requisitos
GeoTask es una sencilla aplicacion destinada a la realizacion automati-
ca de tareas sin la intervencion del usuario cuando nos encontramos en una
determinada ubicacion.
La localizacion se realiza mediante el dispositivo gps integrado en
el terminal movil si se encuentra activo. En caso de no estar activo, se
realizara va Wi-Fi si tenemos activada esta opcion en nuestro telefono.
En caso de no estar disponible utilizaremos la localizacion va gsm. En
caso de no estar disponible ninguna de las tres opciones, se avisara de la
imposibilidad de localizar al usuario.
Ademas, es necesaria una conexion a Internet ya sea mediante una
red Wi-Fi o a traves de la conexion de datos ofrecida por el operador
de telefona movil. Si no dispone de conexion no se mostrara ninguna
advertencia, pero el funcionamiento no sera el correcto. En primer lugar,
sera imposible mostrar el mapa de situacion a la hora de crear o editar el
area de proximidad de un perl, por lo que el usuario sera situado en una
pantalla gris sin ning un tipo de detalles. Ademas, no se podra ejecutar
con normalidad ciertas tareas como el envo de tweets o la actualizacion
de nuestro estado en Facebook.
NOTA: La se nal del gps solo estara disponible en lugares abiertos, por
lo que en edicios o cualquier espacio que represente obstaculos para la
recepcion no se conseguira un correcto funcionamiento.
47
48 8. Manual
Figura 8.1: Pantalla principal de GeoTask sin perles
8.2 Funcionamiento
Una vez iniciada la aplicacion correctamente nos aparecera una pan-
talla con el nombre de todos los perles creados o, en caso de que no
hayamos creado ninguno, se nos mostrara la frase Sin perles.
Si pulsamos la tecla men u, veremos las siguientes opciones:
A nadir Perl: Podremos a nadir un nuevo perl.
Cuentas: Podremos ver las cuentas de nuestras redes sociales que
GeoTask puede utilizar y a nadir mas.
Habilitar GeoTask/Deshabilitar GeoTask: Podremos habilitar/des-
habilitar la posibilidad de que GeoTask localice la posicion del movil
para saber si debe ejecutar alguna tarea.
Si elegimos la opcion de a nadir un perl, nos aparecera una panta-
lla donde podremos elegir el nombre, la direccion junto con el radio de
proximidad y las tareas que deseamos que sean ejecutadas.
Si pulsamos la tecla men u, veremos que podemos guardar el perl o
desechar los cambios que hayamos hecho. Es necesario saber que si elegi-
mos una tarea, automaticamente el perl es guardado.
Para elegir la direccion, basta con pulsar el boton A nadir Localiza-
cion. En el caso de que queremos editar, deberemos pulsar el nombre de
la direccion que aparezca. Si queremos eliminar la direccion, solo tendre-
mos que resalizar una pulsacion larga hasta que nos aparezca la opcion
Eliminar.
8.2. Funcionamiento 49
Figura 8.2: Pantalla con las cuentas de redes sociales que puede utilizar
GeoTask
Figura 8.3: Pantalla de un perl en GeoTask
50 8. Manual
Figura 8.4: Pantalla para elegir el area de proximidad en GeoTask
A la hora de elegir o editar el area de proximidad de un perl, se
nos mostrara la ubicaci on anterior en el caso de que estemos editandola
o nuestra ubicacion actual sobre un mapa en caso contrario. En ambos
casos contaremos con un area de proximidad, que indicara la zona en la
que, si entramos, se ejecutaran las alertas de ese perl.
El mapa soporta la funciones de zoom y desplazamiento, que permite
ademas un movimiento libre al usuario. Podremos modicar el radio de
forma totalmente dinamica, teniendo un mnimo de 100 metros, al igual
que cambiar la ubicacion hasta el lugar que nos interese.
Si pulsamos la tecla men u, veremos las siguientes opciones:
Ver: podemos elegir el tipo de mapa que queremos visualizar.
Localizacion: El sistema determinara nuestra ubicacion y nos si-
tuara en el mapa.
Guardar: Guardamos los cambios realizados.
No Guardar: No guardamos los cambios realizados.
El siguiente paso despues de seleccionar la direccion y el area de pro-
ximidad que queremos es seleccionar las tareas que debe ejecutar nuestro
movil. Para ello deberemos seleccionar el boton A nadir Tareas.
Al pulsar nos apareceran todas las tareas que podemos a nadir.
Estan limitadas a una por perl las tareas llamada y lista negra/blan-
ca, las demas no tienen ning un lmite establecido.
Casi todas las tareas tienen una misma estructura, debes darle valor
a una serie de campos para que la ejecucion sea satisfactoria.
8.2. Funcionamiento 51
Figura 8.5: Pantalla con todas las tareas que permite GeoTask
Figura 8.6: Pantalla de la tarea recordatorio en GeoTask
52 8. Manual
Figura 8.7: Pantalla de la tarea twitter en GeoTask
Si presionamos la tecla men u, la mayora cuenta con dos opciones
unicamente, pudiendo guardar o no los cambios efectuados en la tarea.
Hay dos excepciones:
Tareas Facebook y Twitter.
Admite, en el men u, la posibilidad de autorizar a GeoTask el uso de
mas cuentas de estas dos redes sociales. Tiene una restriccion, si no
hemos autorizado en el dispositivo el uso de una cuenta de la red
social de la cual queremos realizar la tarea, no podremos a nadirla.
Tarea Lista Negra/Blanca.
Es una tarea especial al ser, en realidad, dos tareas en una. A la
hora de crearla nos permitira elegir que tipo de lista queremos, ex-
plicandonos lo que hace cada una de ellas.
Tambien podremos modicar el tipo de lista presionando la tecla
Men u y presionando la opcion Tipo de Lista.
Todas las tareas que vayamos creando, iran apareciendo debajo de
Tareas:. Estas tareas podran ser editadas presionando sobre ellas o,
directamente, eliminarlas realizando una pulsacion larga hasta que nos
aparezca la opcion de eliminarlo.
Una vez que ya hayamos completado el perl, volveremos a la pantalla
principal. Desde all podremos activar/desactivar cada perl que hayamos
creado. Tambien podremos editar un perl determinado pulsando sobre
su nombre o eliminarlo directamente realizando una pulsacion larga hasta
que nos aparezca la opcion de eliminarlo.
8.3. Consideraciones sobre el idioma 53
Figura 8.8: Pantalla de la tarea lista blanca en GeoTask
Figura 8.9: Pantalla principal de GeoTask con perles
54 8. Manual
8.3 Consideraciones sobre el idioma
GeoTask esta disponible hasta en cuatro idiomas (Espa nol, Ingles,
Frances y Aleman), pero el idioma no es congurable por el usuario. Al
cargar la aplicacion se mostrara automaticamente en el idioma denido en
el terminal o, en caso de que no sea ninguno de los cuatro idiomas antes
expuestos, en Ingles.
CAP

ITULO 9
Publicacion de una aplicacion
Tras el desarrollo de una aplicacion, el siguiente paso es su publicacion,
ya sea en Android o en cualquier otro entorno. Si desarrollamos una apli-
cacion para Android, tenemos dos opciones: publicarla dentro de Google
Play o fuera.
Google Play (antes llamado Android Market) es una tienda de software
en lnea desarrollada por Google para los dispositivos Android, pero su uso
no es obligatorio.
Ahora pasaremos a explicar las dos posibilidades.
9.1 Publicar fuera de Google Play
Se trata de la forma convencional de dar a conocer tu aplicacion, y
ademas es facil y barato. De esta forma depende del propio desarrollador
la distribucion de la aplicacion, incluyendo tanto ponerla a disposicion
del usuario, publicitarla y adoptar un canal de comunicacion con el usua-
rio nal, de forma que exista un intercambio de informacion sobre fallos,
consejos, ayuda y actualizaciones, entre otras cosas.
Consiste principalmente en compilar la aplicacion y subir el archivo
.apk resultante a alguna web para que pueda ser descargada.
La promocion puede llevarse a cabo en redes sociales, foros, o mediante
una pagina especica donde, ademas, se puede proporcionar informacion
acerca de novedades sobre la aplicacion.
Esta compilacion debe realizarse en Modo Release. Para conseguir-
lo, basta seleccionar Export Unsigned Aplication Packagedentro del
men u Android Tools, pulsando con el boton derecho sobre la carpe-
ta principal de nuestro proyecto en Eclipse. El archivo generado es que el
debe ponerse a disposicion del usuario para su descarga.
Sin embargo, el usuario debe congurar su terminal para aceptar apli-
caciones que no hayan sido descargadas de Google Play, por lo que puede
55
56 9. Publicacion de una aplicacion
suponer un inconveniente.
9.2 Publicar en Google Play
Google Play es la tienda ocial de aplicaciones Android. Desde Internet
podemos acceder a traves de su pagina web[14] y desde todos los terminales
que tengan el sistema operativo Android podemos acceder directamente
mediante el icono correspondiente. All podemos encontrar todas las apli-
caciones que los que se han registrado como desarrolladores de Android
han implementado (aplicaciones de todo tipo, juegos...). Ellos mismos eli-
gen si sus aplicaciones pueden ser descargadas de forma gratuita, o si por
el contrario hay que pagar alguna cantidad de dinero.
Este metodo, a pesar de tener un coste de 25$, permitira vender nuestra
aplicacion, insertarle publicidad, y tener acceso a una red de distribucion
mucho mas extensa de lo que seguramente podramos lograr mediante
la autopromocion, dado que es una herramienta existente en todos los
terminales Android.
El primer paso sera crear una cuenta de desarrollador para Google Play
accediendo a su web[15] con una cuenta Google e introducir la informacion
requerida, incluyendo los datos de pago. Una vez conrmado podemos
empezar a publicar aplicaciones.
Hay una peque na diferencia con el caso anterior: en el Market las
aplicaciones deben ser rmadas, por lo que al crear el .apk habra que
elegir Export Signed Aplication Package.
En este proyecto, ademas, es necesario generar una nueva key para la
api de Google Maps, de la misma forma que se hizo al inicio, pero esta vez
usando la rma generada en este paso. De lo contrario los mapas dejaran
de funcionar.
Una vez completados estos pasos, la aplicacion ya puede ser publicada
en Google Play.
Para posteriores actualizaciones, es importante hacer dos cambios en
el Maniest de la aplicacion, de lo contrario Google Play no aceptara la
subida.
Los parametros son los siguientes:
android:versionCode=1. Hay que incrementar una unidad cada
vez que se realice una actualizacion.
android:versionName=1.0. Realmente no es obligatorio, pero se
recomienda cambiar la numeracion, de forma que sea orientativo
para el usuario.
CAP

ITULO 10
Comparacion con otras alternativas
Son muchas las aplicaciones que podemos encontrar en Google Play
dedicadas a las funcionalidades que ofrece la geolocalizacion. Cada una tie-
ne una serie de ventajas e inconvenientes respecto a la aplicacion realizada
por nosotros, GeoTask. Ahora analizaremos las mas importantes.
Locale. Probablemente sea la mas popular de todas. Se basa en la
localizacion va Wi-Fi, gps o red movil, como GeoTask, aunque tam-
bien podemos crear perles que se basen en el nivel de bateria o la
hora. Tambien es bastante distinto el tipo de tareas que se pueden
ejecutar, no hay interaccion con redes sociales, sino que son del tipo
bajar el brillo, bajar el sonido del movil, etc. Cuenta con multitud
de widgets y un dise no bastante intuitivo. Nos hemos basado en ella
para realizar nuestra aplicacion.
Tasker. Es bastante mas potente que Locale, aunque es bastante
compleja de usar. Uno de sus puntos fuertes es la posibilidad de
cambiar ajustes cuando abras una aplicacion, tambien permite mo-
dicar ajustes seg un el nivel de bateria, como Locale y, tampoco hay
interaccion con redes sociales como si tiene GeoTask.
En denitiva, ademas de estas, seguramente existen una gran cantidad
de aplicaciones que basadas en geolocalizacion, que dan una idea de la
competencia existente y la gran demanda existente.
57
Conclusiones
Las sensaciones que tengo tras acabar este Proyecto Fin de Carrera
son muy positivas.
Mi objetivo principal, era aprender todo lo posible sobre el desarrollo
de aplicaciones para dispositivos con SO Android y crear una aplicacion
propia que cumpliera todos los objetivos marcados al inicio del proyec-
to. Todo ello ha sido posible, demostrandose ademas un interes bastante
notable en el p ublico al conocer la aplicacion y su funcionamiento.
El desarrollo de GeoTask me ha servido para tener una base de cara a
futuros desarrollos, que seguro seran mucho mas rapidos y agiles.
Tambien he podido comprobar que es posible desarrollar una aplica-
cion desde cero utilizando exclusivamente herramientas libres.
Para un estudiante esto ultimo supone unas posibilidades impensables
hace escasos a nos. Tener todas las herramientas disponibles en internet, y
sin coste en la mayora de los casos, permite que cualquier desarrollador
interesado pueda programar aplicaciones sin tener que pertenecer a una
empresa o universidad.
Ademas, la distribucion digital, la proliferacion de dispositivos moviles
con grandes capacidades hardware y las facilidades para el desarrollo de
los mismos, permiten que las aplicaciones lleguen a cualquier parte del
mundo en el momento en el que terminen su desarrollo, casi sin costes de
distribucion.
Desarrollando este proyecto he disfrutado, he investigado y aprendido
mucho sobre un tema que me apasiona y que hasta ahora era desconocido
a nivel tecnico para mi. Ademas, he encontrado un sector en el que no me
importara que se desarrollase mi futuro laboral.
59
Apendices
Obtencion de una clave de api de Google Maps
para Android
Para el uso de esta api se requiere obtener una api-key, asociada con la
rma de nuestra aplicacion. Por decirlo de alguna forma, es un control de
acceso a la api. Para obtenerla es necesario introducir el certicado MD5
de la rma electronica de nuestra aplicacion en un formulario dispuesto
para tal n. Dicho certicado se obtiene mediante la herramienta keytool,
en la linea de comandos:
keytool -list -keystore ruta\rma
donde ruta es la ubicacion y rma es la el chero keystore de la rma
cuyo certicado se quiera obtener. A continuacion se pedira una clave, que
por defecto es Android.
Cabe distinguir entre dos tipos de api-key, que seran generadas seg un
la rma utilizada por nuestra aplicacion: Debug o Released.
Firmas para una aplicaci on Android
La rma de una aplicacion es un proceso esencial para el desarrollo,
pues identica inequvocamente al autor de esta.
Hay dos tipos de rmas: Debug y Release.
Al iniciar un proyecto, la rma utilizada es en modo Debug, y ademas
el proceso es automatico, por lo que el programador no debe preocuparse
en ese sentido. El modo Debug sirve para el proceso de desarrollo de
la aplicacion, aunque tambien puede ser usada posteriormente bajo esta
rma.
El uso de la rma en modo Release llega a la hora de publicar en
Google Play, como se ha comentado anteriormente. Para ello, hay que
elegir la opcion Export Signed Package en el menu Android Tools.
Tras elegir el proyecto deseado, hay que decidir si deseamos utilizar una
clave existente o crear una nueva. En caso de disponer ya de una rma el
proceso es trivial. Si se quiere crear una nueva, habra que determinar una
ubicacion, contrase na, un alias y una serie de datos personales. Tambien
61
62 Apendices
habra que especicar una validez, con un maximo de 50 a nos. Es impor-
tante guardar esta rma con seguridad, pues debe ser usada SIEMPRE
para rmar las aplicaciones.
Bibliografa
[1] Fernando Antonio Caro Vega y Francisco Javier Delgado Ville-
gas,Clase LATEX para Proyecto Fin de Carrera. Proyecto de n
de carrera de la Escuela Tecnica Superior de Ingeniera Informatica
de la Universidad de Sevilla. Tutor: Jose Ramon Portillo Fernandez,
departamento de Matematica Aplicada I. Sevilla, Septiembre de 2008.
[2] Jaume Pomes Olesti, Introduccion a Android y sus aplicaciones.
Proyecto de n de carrera de la Escuela Tecnica Superior de Inge-
niera Informatica de la Universidad de Sevilla. Tutor: Jose Ramon
Portillo Fernandez, departamento de Matematica Aplicada I. Sevilla,
Septiembre de 2009.
[3] Manuel Fernandez Ruiz, Geolocalizacion de puntos de interes en
Android. Proyecto de n de carrera de la Escuela Tecnica Supe-
rior de Ingeniera Informatica de la Universidad de Sevilla. Tutor:
Jose Ramon Portillo Fernandez, departamento de Matematica Apli-
cada I. Sevilla, Diciembre de 2009.
[4] Web ocial para desarrolladores Android:
http://developer.android.com
(consulta: 20/09/2011, 21/09/2011, 03/10/2011, 07/11/2011,
10/02/2012)
[5] Blog con una serie de artculos sobre programacion Android:
http://www.sgoliver.net/blog/?p=1313
(consulta: 12/12/2011, 13/12/2011, 15/12/2011, 17/01/2012)
[6] Android-Spa, foro de desarrolladores Android:
http://www.android-spa.com
(consulta: 21/01/2012, 24/02/2012)
[7] Googlegroups Desarrolladores Android:
http://groups.google.com/group/desarrolladores-android
(consulta: 15/01/2012)
63
64 Bibliografa
[8] Wikipedia, la enciclopedia libre:
http://www.wikipedia.org/
(consulta: 1/10/2011, 2/10/2011, 7/11/2011)
[9] Web ocial de API Maps for Android:
http://code.google.com/intl/es-ES/android/add-ons/
google-apis/reference/index.html
(consulta: 10/12/2011, 13/12/2011, 3/03/2012)
[10] StackOverFlow, foro de consulta para desarroladores en general:
http://stackoverflow.com/
(consulta: 8/12/2011, 20/01/2012, 17/02/2012, 5/03/2012)
[11] Locale:
https://play.google.com/store/apps/details?id=com.
twofortyfouram.locale&hl=es
(consulta: 1/01/2011)
[12] Tasker:
https://play.google.com/store/apps/details?id=net.
dinglisch.android.taskerm&hl=es
(consulta: 1/01/2011)
[13] Eclipse:
http://www.eclipse.org/
(consulta: 15/09/2011)
[14] Google Play:
https://play.google.com/store
(consulta: 1/01/2011)
[15] Web para crear una cuenta de desarrollador en Google Play:
https://play.google.com/apps/publish/signup
(consulta: 15/03/2012)
[16] Web para descargar el ADT para Eclipse:
https://dl-ssl.google.com/android/eclipse
[17] Meier, Reto, 2010; Professional Android 2 Application Development.
Editorial Wrox.
[18] Frank Ableson, Charlie Collins, Robi Sen, 2009; Android. Gua para
desarrolladores. Editorial Anaya
[19] Darwin, Ian F., 2011; Android Cookbook. Editorial OReilly
[20] Zigurd Mednieks, Laird Dornin, G. Blake Meike, Masumi Nakamura,
2011; Programming Android. Editorial OReilly
Licencia
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright c 2007 Free Software Foundation, Inc. http://fsf.org/
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
The GNU General Public License is a free, copyleft license for software
and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom
to share and change all versions of a programto make sure it remains
free software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to your
programs, too.
When we speak of free software, we are referring to freedom, not price.
Our General Public Licenses are designed to make sure that you have the
freedom to distribute copies of free software (and charge for them if you
wish), that you receive source code or can get it if you want it, that you
can change the software or use pieces of it in new free programs, and that
you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if you
modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether gratis
or for a fee, you must pass on to the recipients the same freedoms that you
received. You must make sure that they, too, receive or can get the source
code. And you must show them these terms so they know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) oer you this License giving
you legal permission to copy, distribute and/or modify it.
65
66 Licencia
For the developersand authorsprotection, the GPL clearly explains
that there is no warranty for this free software. For both usersand aut-
horssake, the GPL requires that modied versions be marked as changed,
so that their problems will not be attributed erroneously to authors of
previous versions.
Some devices are designed to deny users access to install or run mo-
died versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of protecting
usersfreedom to change the software. The systematic pattern of such abu-
se occurs in the area of products for individuals to use, which is precisely
where it is most unacceptable. Therefore, we have designed this version of
the GPL to prohibit the practice for those products. If such problems arise
substantially in other domains, we stand ready to extend this provision
to those domains in future versions of the GPL, as needed to protect the
freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of software
on general-purpose computers, but in those that do, we wish to avoid
the special danger that patents applied to a free program could make
it eectively proprietary. To prevent this, the GPL assures that patents
cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and modi-
cation follow.
Terms and Conditions
0. Denitions.
This Licenserefers to version 3 of the GNU General Public License.
Copyright also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
The Programrefers to any copyrightable work licensed under this
License. Each licensee is addressed as you. Licensees and reci-
pientsmay be individuals or organizations.
To modify a work means to copy from or adapt all or part of
the work in a fashion requiring copyright permission, other than the
making of an exact copy. The resulting work is called a modied
version of the earlier work or a work based onthe earlier work.
A covered workmeans either the unmodied Program or a work
based on the Program.
To propagate a work means to do anything with it that, without
permission, would make you directly or secondarily liable for in-
fringement under applicable copyright law, except executing it on
67
a computer or modifying a private copy. Propagation includes cop-
ying, distribution (with or without modication), making available
to the public, and in some countries other activities as well.
To convey a work means any kind of propagation that enables
other parties to make or receive copies. Mere interaction with a
user through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays Appropriate Legal Noticesto
the extent that it includes a convenient and prominently visible fea-
ture that (1) displays an appropriate copyright notice, and (2) tells
the user that there is no warranty for the work (except to the extent
that warranties are provided), that licensees may convey the work
under this License, and how to view a copy of this License. If the in-
terface presents a list of user commands or options, such as a menu,
a prominent item in the list meets this criterion.
1. Source Code.
The source codefor a work means the preferred form of the work
for making modications to it. Object codemeans any non-source
form of a work.
A Standard Interfacemeans an interface that either is an ocial
standard dened by a recognized standards body, or, in the case of
interfaces specied for a particular programming language, one that
is widely used among developers working in that language.
The System Libraries of an executable work include anything, ot-
her than the work as a whole, that (a) is included in the normal form
of packaging a Major Component, but which is not part of that Ma-
jor Component, and (b) serves only to enable use of the work with
that Major Component, or to implement a Standard Interface for
which an implementation is available to the public in source code
form. A Major Component, in this context, means a major essen-
tial component (kernel, window system, and so on) of the specic
operating system (if any) on which the executable work runs, or a
compiler used to produce the work, or an object code interpreter
used to run it.
The Corresponding Sourcefor a work in object code form means
all the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts
to control those activities. However, it does not include the works
System Libraries, or general-purpose tools or generally available free
programs which are used unmodied in performing those activities
but which are not part of the work. For example, Corresponding
68 Licencia
Source includes interface denition les associated with source les
for the work, and the source code for shared libraries and dyna-
mically linked subprograms that the work is specically designed
to require, such as by intimate data communication or control ow
between those subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly arms your unlimited
permission to run the unmodied Program. The output from running
a covered work is covered by this License only if the output, given
its content, constitutes a covered work. This License acknowledges
your rights of fair use or other equivalent, as provided by copyright
law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modications exclusively for you, or provide
you with facilities for running those works, provided that you comply
with the terms of this License in conveying all material for which you
do not control copyright. Those thus making or running the covered
works for you must do so exclusively on your behalf, under your
direction and control, on terms that prohibit them from making any
copies of your copyrighted material outside their relationship with
you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting UsersLegal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an eective technological
measure under any applicable law fullling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such measu-
res.
When you convey a covered work, you waive any legal power to for-
bid circumvention of technological measures to the extent such cir-
69
cumvention is eected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to li-
mit operation or modication of the work as a means of enforcing,
against the works users, your or third partieslegal rights to forbid
circumvention of technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Programs source code as
you receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright noti-
ce; keep intact all notices stating that this License and any non-
permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may oer support or warranty protection for a fee.
5. Conveying Modied Source Versions.
You may convey a work based on the Program, or the modications
to produce it from the Program, in the form of source code under
the terms of section 4, provided that you also meet all of these
conditions:
a) The work must carry prominent notices stating that you mo-
died it, and giving a relevant date.
b) The work must carry prominent notices stating that it is relea-
sed under this License and any conditions added under section
7. This requirement modies the requirement in section 4 to
keep intact all notices.
c) You must license the entire work, as a whole, under this License
to anyone who comes into possession of a copy. This License will
therefore apply, along with any applicable section 7 additional
terms, to the whole of the work, and all its parts, regardless
of how they are packaged. This License gives no permission to
license the work in any other way, but it does not invalidate
such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has inter-
active interfaces that do not display Appropriate Legal Notices,
your work need not make them do so.
A compilation of a covered work with other separate and indepen-
dent works, which are not by their nature extensions of the covered
work, and which are not combined with it such as to form a larger
70 Licencia
program, in or on a volume of a storage or distribution medium, is
called an aggregate if the compilation and its resulting copyright
are not used to limit the access or legal rights of the compilations
users beyond what the individual works permit. Inclusion of a cove-
red work in an aggregate does not cause this License to apply to the
other parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the machine-
readable Corresponding Source under the terms of this License, in
one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by
the Corresponding Source xed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written oer, valid for at least three years and valid for as long
as you oer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1)
a copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price
no more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of
the written oer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially,
and only if you received the object code with such an oer, in
accord with subsection 6b.
d) Convey the object code by oering access from a designated
place (gratis or for a charge), and oer equivalent access to the
Corresponding Source in the same way through the same place
at no further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place
to copy the object code is a network server, the Corresponding
Source may be on a dierent server (operated by you or a third
party) that supports equivalent copying facilities, provided you
maintain clear directions next to the object code saying where
to nd the Corresponding Source. Regardless of what server
71
hosts the Corresponding Source, you remain obligated to en-
sure that it is available for as long as needed to satisfy these
requirements.
e) Convey the object code using peer-to-peer transmission, pro-
vided you inform other peers where the object code and Co-
rresponding Source of the work are being oered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A User Product is either (1) a consumer product, which means
any tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is
a consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
normally usedrefers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or non-
consumer uses, unless such uses represent the only signicant mode
of use of the product.
Installation Informationfor a User Product means any methods,
procedures, authorization keys, or other information required to ins-
tall and execute modied versions of a covered work in that User
Product from a modied version of its Corresponding Source. The
information must suce to ensure that the continued functioning of
the modied object code is in no case prevented or interfered with
solely because modication has been made.
If you convey an object code work under this section in, or with, or
specically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
xed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accom-
panied by the Installation Information. But this requirement does
not apply if neither you nor any third party retains the ability to
install modied object code on the User Product (for example, the
work has been installed in ROM).
The requirement to provide Installation Information does not inclu-
de a requirement to continue to provide support service, warranty,
72 Licencia
or updates for a work that has been modied or installed by the
recipient, or for the User Product in which it has been modied or
installed. Access to a network may be denied when the modication
itself materially and adversely aects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provi-
ded, in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
Additional permissions are terms that supplement the terms of
this License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program
shall be treated as though they were included in this License, to
the extent that they are valid under applicable law. If additional
permissions apply only to part of the Program, that part may be
used separately under those permissions, but the entire Program
remains governed by this License without regard to the additional
permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part
of it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material
you add to a covered work, you may (if authorized by the copyright
holders of that material) supplement the terms of this License with
terms:
a) Disclaiming warranty or limiting liability dierently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specied reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modied versions of such material be marked in
reasonable ways as dierent from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
73
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f ) Requiring indemnication of licensors and authors of that ma-
terial by anyone who conveys the material (or modied versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly im-
pose on those licensors and authors.
All other non-permissive additional terms are considered further
restrictionswithin the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is go-
verned by this License along with a term that is a further restriction,
you may remove that term. If a license document contains a further
restriction but permits relicensing or conveying under this License,
you may add to a covered work material governed by the terms of
that license document, provided that the further restriction does not
survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source les, a statement of the additional
terms that apply to those les, or a notice indicating where to nd
the applicable terms.
Additional terms, permissive or non-permissive, may be stated in
the form of a separately written license, or stated as exceptions; the
above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and nally terminates
your license, and (b) permanently, if the copyright holder fails to
notify you of the violation by some reasonable means prior to 60
days after the cessation.
Moreover, your license from a particular copyright holder is reinsta-
ted permanently if the copyright holder noties you of the violation
by some reasonable means, this is the rst time you have received
notice of violation of this License (for any work) from that copyright
holder, and you cure the violation prior to 30 days after your receipt
of the notice.
74 Licencia
Termination of your rights under this section does not terminate
the licenses of parties who have received copies or rights from you
under this License. If your rights have been terminated and not
permanently reinstated, you do not qualify to receive new licenses
for the same material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate
or modify any covered work. These actions infringe copyright if you
do not accept this License. Therefore, by modifying or propagating
a covered work, you indicate your acceptance of this License to do
so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An entity transaction is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that transac-
tion who receives a copy of the work also receives whatever licenses
to the work the partys predecessor in interest had or could give
under the previous paragraph, plus a right to possession of the Co-
rresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable eorts.
You may not impose any further restrictions on the exercise of the
rights granted or armed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of rights
granted under this License, and you may not initiate litigation (in-
cluding a cross-claim or counterclaim in a lawsuit) alleging that any
patent claim is infringed by making, using, selling, oering for sale,
or importing the Program or any portion of it.
11. Patents.
A contributor is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.
The work thus licensed is called the contributors contributor ver-
sion.
75
A contributors essential patent claims are all patent claims ow-
ned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, per-
mitted by this License, of making, using, or selling its contributor
version, but do not include claims that would be infringed only as a
consequence of further modication of the contributor version. For
purposes of this denition, control includes the right to grant pa-
tent sublicenses in a manner consistent with the requirements of this
License.
Each contributor grants you a non-exclusive, worldwide, royalty-
free patent license under the contributors essential patent claims,
to make, use, sell, oer for sale, import and otherwise run, modify
and propagate the contents of its contributor version.
In the following three paragraphs, a patent license is any express
agreement or commitment, however denominated, not to enforce a
patent (such as an express permission to practice a patent or cove-
nant not to sue for patent infringement). To grantsuch a patent
license to a party means to make such an agreement or commitment
not to enforce a patent against the party.
If you convey a covered work, knowingly relying on a patent licen-
se, and the Corresponding Source of the work is not available for
anyone to copy, free of charge and under the terms of this License,
through a publicly available network server or other readily accessi-
ble means, then you must either (1) cause the Corresponding Source
to be so available, or (2) arrange to deprive yourself of the benet of
the patent license for this particular work, or (3) arrange, in a man-
ner consistent with the requirements of this License, to extend the
patent license to downstream recipients. Knowingly relyingmeans
you have actual knowledge that, but for the patent license, your con-
veying the covered work in a country, or your recipients use of the
covered work in a country, would infringe one or more identiable
patents in that country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or arran-
gement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties re-
ceiving the covered work authorizing them to use, propagate, modify
or convey a specic copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is discriminatory if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specically
76 Licencia
granted under this License. You may not convey a covered work if
you are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to
the third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the par-
ties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work con-
veyed by you (or copies made from those copies), or (b) primarily
for and in connection with specic products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may ot-
herwise be available to you under applicable patent law.
12. No Surrender of OthersFreedom.
If conditions are imposed on you (whether by court order, agree-
ment or otherwise) that contradict the conditions of this License,
they do not excuse you from the conditions of this License. If you
cannot convey a covered work so as to satisfy simultaneously your
obligations under this License and any other pertinent obligations,
then as a consequence you may not convey it at all. For example, if
you agree to terms that obligate you to collect a royalty for further
conveying from those to whom you convey the Program, the only
way you could satisfy both those terms and this License would be
to refrain entirely from conveying the Program.
13. Use with the GNU Aero General Public License.
Notwithstanding any other provision of this License, you have per-
mission to link or combine any covered work with a work licensed
under version 3 of the GNU Aero General Public License into a
single combined work, and to convey the resulting work. The terms
of this License will continue to apply to the part which is the cove-
red work, but the special requirements of the GNU Aero General
Public License, section 13, concerning interaction through a network
will apply to the combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new ver-
sions of the GNU General Public License from time to time. Such
new versions will be similar in spirit to the present version, but may
dier in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
species that a certain numbered version of the GNU General Public
77
License or any later version applies to it, you have the option of
following the terms and conditions either of that numbered version
or of any later version published by the Free Software Foundation. If
the Program does not specify a version number of the GNU General
Public License, you may choose any version ever published by the
Free Software Foundation.
If the Program species that a proxy can decide which future ver-
sions of the GNU General Public License can be used, that proxys
public statement of acceptance of a version permanently authorizes
you to choose that version for the Program.
Later license versions may give you additional or dierent permis-
sions. However, no additional obligations are imposed on any author
or copyright holder as a result of your choosing to follow a later ver-
sion.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE
EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PRO-
GRAM AS ISWITHOUT WARRANTY OF ANY KIND, EIT-
HER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LI-
MITED TO, THE IMPLIED WARRANTIES OF MERCHANTA-
BILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NE-
CESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR
AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER,
OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, IN-
CIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT
OF THE USE OR INABILITY TO USE THE PROGRAM (IN-
CLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
BEING RENDERED INACCURATE OR LOSSES SUSTAINED
BY YOU OR THIRD PARTIES OR A FAILURE OF THE PRO-
GRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN
IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED
OF THE POSSIBILITY OF SUCH DAMAGES.
78 Licencia
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided abo-
ve cannot be given local legal eect according to their terms, revie-
wing courts shall apply local law that most closely approximates an
absolute waiver of all civil liability in connection with the Program,
unless a warranty or assumption of liability accompanies a copy of
the Program in return for a fee.
End of Terms and Conditions
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make
it free software which everyone can redistribute and change under
these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source le to most eectively
state the exclusion of warranty; and each le should have at least
the copyrightline and a pointer to where the full notice is found.
<one line to give the programs name and a brief idea of what it does.>
Copyright (C) <textyear> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type show w.
This is free software, and you are welcome to redistribute it
under certain conditions; type show c for details.
79
The hypothetical commands show w and show c should show the
appropriate parts of the General Public License. Of course, your
programs commands might be dierent; for a GUI interface, you
would use an about box.
You should also get your employer (if you work as a programmer)
or school, if any, to sign a copyright disclaimerfor the program,
if necessary. For more information on this, and how to apply and
follow the GNU GPL, see http://www.gnu.org/licenses/.
The GNU General Public License does not permit incorporating
your program into proprietary programs. If your program is a su-
broutine library, you may consider it more useful to permit linking
proprietary applications with the library. If this is what you want to
do, use the GNU Lesser General Public License instead of this Licen-
se. But rst, please read http://www.gnu.org/philosophy/why-not-lgpl.html.

También podría gustarte