Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DIARIO DE VIAJE
Realizado por
ANTONIO GUILLN VILA
RAFAEL GARCA NARANJO
Dirigido por
Dr. JOS RAMN PORTILLO FERNNDEZ
Departamento
MATEMTICA APLICADA I
INDICE
1.
Introduccin .............................................................................................................. 5
2.
3.
4.
5.
4.1.
Planificacin .................................................................................................... 13
4.2.
4.2.1.
4.2.2.
4.2.3.
Dropbox .................................................................................................... 16
4.2.4.
5.2.
5.3.
5.4.
5.5.
5.5.1.
5.6.
6.
Prioridad de procesos................................................................................ 32
5.6.1.
5.6.2.
5.6.3.
5.6.4.
5.6.5.
5.6.5.1.
5.6.5.2.
5.6.5.3.
6.2.
6.3.
6.4.
6.5.
6.6.
7.
Diseo .............................................................................................................. 55
7.2.
Implementacin................................................................................................ 60
8.
Pruebas .................................................................................................................... 79
9.
Ampliaciones........................................................................................................... 84
10.
Conclusiones........................................................................................................ 86
11.
Bibliografa .......................................................................................................... 89
1.
Introduccin
2.
Definicin de Objetivos
3. Anlisis de antecedentes y
aportacin realizada
10
11
12
4.1.
Planificacin
13
Tarea
Horas estimadas
Horas reales
Investigacin
Desarrollo de la aplicacin
Memoria
Pruebas
Total
220
280
90
30
620
270
300
110
15
695
Horas estimadas
Investigacin
Desarrollo de la aplicacin
Memoria
Pruebas
Horas reales
Investigacin
Desarrollo de la aplicacin
Memoria
Pruebas
4.2.
El coste de nuestro proyecto ha sido nulo, debido a que ya tenamos cada uno un
mvil con sistema operativo Android, un equipo para desarrollar la aplicacin y todas
las herramientas que hemos empleado para el desarrollo del software son de libre
adquisicin.
14
Equipo1:
CPU
RAM
Targeta grfica
Sistema Operativo
Equipo2:
CPU
RAM
Targeta grfica
Sistema Operativo
Ms informacin en:
http://www.eclipse.org/
http://developer.Android.com/sdk/index.html
15
4.2.3. Dropbox
Dropbox es un servicio de alojamiento de archivos multiplataforma en la nube,
operado por la compaa Dropbox. El servicio permite a los usuarios almacenar y
sincronizar archivos en lnea entre computadoras, y compartir archivos y carpetas con
otros usuarios.
2G Network
3G Network
General
Announced
Status
Dimensions
Body
Weight
Type
Size
Display
Multitouch
Sound
Memory
Data
Alert types
Loudspeaker
3.5mm jack
Card slot
Internal
GPRS
EDGE
Speed
16
WLAN
Bluetooth
USB
Primary
Features
Camera
Video
Secondary
OS
CPU
Sensors
Messaging
Browser
Radio
GPS
Java
Features
Colors
Battery
Stand-by
Talk time
HTC Wildfire S
2G Network
3G Network
General
Body
Announced
Status
Dimensions
Weight
Display
Type
Size
Alert types
Loudspeaker
3.5mm jack
Card slot
Memory
Internal
GPRS
EDGE
Data
Speed
Sound
17
WLAN
Bluetooth
USB
Primary
Features
Camera
Video
Secondary
OS
Chipset
CPU
GPU
Sensors
Messaging
Browser
Radio
GPS
Features
Java
Colors
Battery
Stand-by
Talk time
18
5. Manual de Android e
instalacin del entorno de
trabajo
19
5.1.
Introduccin a Android
20
5.2.
Breve historia
En Julio de 2005, Google adquiri Android, Inc [37], una pequea startup de
California. En esos momentos, la compaa se dedicaba a la creacin de software para
telfonos mviles. Una vez en Google, el equipo desarroll un S.O. basado en Linux
para dispositivos mviles. Ms adelante, Google adapt su buscador y sus aplicaciones
para su uso en mviles.
En septiembre del 2007, Google tena varias patentes de aplicaciones sobre el
rea de la telefona mvil. El 5 de noviembre del mismo ao, se anunci la fundacin de
la Open Handset Alliance al mismo tiempo que la creacin de la plataforma Android. La
Open Handset Alliance est formada por un consorcio de 34 compaas de hardware,
software y telecomunicaciones, entre las cuales se incluyen Google, HTC [38], Intel
[39] y Motorola [40] entre otras, dedicadas a investigar estndares abiertos para
dispositivos mviles.
El primer telfono en el mercado que posee Android es el T-Mobile G1 [41]
(tambin conocido como Dream), lanzado el da 22 de octubre de 2008 que viene con la
versin Android 1.0 preinstalada. Este mvil es el resultado conjunto de T-Mobile, HTC
21
y Google. Por ltimo, desde el 21 de octubre de 2008, Android est disponible como
cdigo abierto [42]. Gracias a esto, cualquiera puede aadir extensiones, nuevas
aplicaciones o reemplazar las existentes por otras dentro del dispositivo mvil
5.3.
Estructura de Android
El stack de software a grandes rasgos, est formado por: un ncleo de Linux, una
serie de libreras escritas en cdigo C/C++, un entorno de ejecucin propio (Android
Run Time), un framework de aplicaciones y las propias aplicaciones.
A continuacin se puede ver el esqueleto de este sistema operativo, y debajo de
la misma se explicarn cada una de las partes que lo conforman.
22
otro lado, este kernel, al ser Linux cumple con las expectativas con las que
Android se lanzar bajo licencia Apache.
Por encima del ncleo de Android se establecen una serie de libreras escritas
en lenguaje C/C++, y al igual que el ncleo, estas libreras son iguales de
bsicas.
Dentro de las libreras, las ms importantes son las siguientes:
o Libc: esta librera incluye todas las cabeceras y funciones segn el
estndar de C.
o SQLite: es la librera que implementa un motor de base de datos. SQLite
es software libre, por lo tanto el cdigo fuente es de dominio pblico.
o Surface Manager (Administrador de Superficies): es la que realiza toda la
gestin del acceso a los subsistemas de pantallas. Adems es la
encargada de gestionar todas aquellas pantallas de las diferentes
aplicaciones activas que se encuentren en ese preciso instante.
o SSL & WebKit: ambas libreras son las encargadas de integrar un
navegador para Internet y de proporcionar seguridad cuando se acceda a
sta.
o Media: el principal uso de esta librera es para poder reproducir tanto
archivos de audio o video, as como los archivos fotogrficos. Cabe
destacar que en esta librera se proporcionan los cdecs necesarios para
poder reproducir los formatos ms populares.
o OpenGL / ES y SGL: la ltima libre, la SGL, es la encargada de
proporcionar el motor grfico de 2D. Sin embargo, la OpenGL / ES
maneja los grficos 3D en el caso de que el hardware del telfono mvil
lo disponga.
o FreeType: es la encargada de la renderizacin de fuentes, para mapas de
bits y vectores.
23
las libreras base del lenguaje de programacin Java. Todas las aplicaciones se
programan en Java y para poder ejecutarlas se ha creado especficamente para
Android una mquina virtual, la Dalvik Virtual Machine. Lo particular de esta
mquina virtual, es que ha sido especialmente optimizada y adaptada para las
caractersticas de cualquier telfono mvil. Cada aplicacin Android corre su
propio proceso, con su propia instancia en la mquina virtual Dalvik. Esta
mquina virtual, ha sido escrita de forma que un dispositivo puede correr
mltiples mquinas virtuales de forma eficiente. Dalvik ejecuta archivos en el
formato Dalvik Executable (.dex), y no con el bytecode generado por Java, de
forma que los .dex estn optimizados para un uso mnimo de la memoria y
pensados para procesadores pequeos. Dicha mquina virtual est basada en
registros, y ejecuta las clases compiladas por el compilador Java y que se han
transformado en el formato .dex por la herramienta dx. Para hacernos una idea
real de lo que sucede, y de la eficiencia de esta mquina virtual, se va a explicar
un poco como se realiza todo el proceso. Una vez que se genera el bytecode de
la aplicacin escrita en Java, es decir, una vez que obtenemos los .class la
mquina virtual genera un .dex con toda la agregacin de estos cdigos objeto,
por hacer un smil sencillo, un .dex podra asemejarse a un archivo jar.
24
5.4.
25
Carpeta /res/
Contiene todos los ficheros de recursos necesarios para el proyecto: imgenes,
vdeos, cadenas de texto, etc. Los diferentes tipos de recursos de debern distribuir entre
las siguientes carpetas:
Carpeta
Descripcin
/res/drawable/
/res/layout/
/res/anim/
/res/menu/
/res/values/
/res/xml/
/res/raw/
/drawable-mdpi
/drawable-hdpi
/layout
/layout-land
Como ejemplo, para un proyecto nuevo Android, se crean los siguientes recursos
para la aplicacin:
26
Carpeta /gen/
Contiene una serie de elementos de cdigo generados automticamente al
compilar el proyecto. Cada vez que generamos nuestro proyecto, la maquinaria de
compilacin de Android genera por nosotros una serie de ficheros fuente en java
dirigidos al control de los recursos de la aplicacin.
class attr {
class drawable {
final int icon=0x7f020000;
class layout {
final int main=0x7f030000;
class string {
final int app_name=0x7f040001;
final int hello=0x7f040000;
27
Carpeta /assets/
Contiene todos los dems ficheros auxiliares necesarios para la aplicacin (y que
se incluirn en su propio paquete), como por ejemplo ficheros de configuracin, de
datos, etc.
La diferencia entre los recursos incluidos en la carpeta /res/raw/ y los incluidos
en la carpeta /assets/ es que para los primeros se generar un ID en la clase R y se
deber acceder a ellos con los diferentes mtodos de acceso a recursos. Para los
segundos sin embargo no se generarn ID y se podr acceder a ellos por su ruta como a
cualquier otro fichero del sistema. Usaremos uno u otro segn las necesidades de
nuestra aplicacin.
Fichero AndroidManifest.xml
Contiene la definicin en XML de los aspectos principales de la aplicacin,
como por ejemplo su identificacin (nombre, versin, icono, ), sus componentes
(pantallas, mensajes, ), o los permisos necesarios para su ejecucin. Veremos ms
adelante ms detalles de este fichero.
En el siguiente apartado veremos los componentes software principales con los
que podemos construir una aplicacin Android.
A la hora de construir una aplicacin en Android, hay que tener en cuenta que
dicha aplicacin puede estar compuesta de un tipo especfico de componente o de la
combinacin de ambos.
Estos componentes son los que van a identificar y caracterizar a la aplicacin
que se llegue a crear, ya que en funcin de stos la clase que se desarrolle heredar las
caractersticas del componente, y por lo tanto pueden existir diferentes formas de
comportamiento, en cuanto a la aplicacin se refiere, segn el tipo de componente que
se decida a usar.
Los diferentes tipos de componentes con los cuales podemos crear aplicaciones
en Android son los siguientes:
Activity
Es el componente ms importante en cualquier aplicacin Android,
debido principalmente a que es la capa de presentacin para todo tipo de
aplicacin. Cualquier pantalla que se muestre al usuario, ser una extensin de la
clase Activity. Y para dicha presentacin se sirve de Views, para poder realizar la
interfaz con la cual el usuario podr interactuar. Est clase puede ser equivalente
a lo que es un formulario en la arquitectura web.
28
Services
Este componente, es totalmente opuesto al anteriormente explicado. La
clase Services al contrario que la Activity, no interacta para nada con el usuario,
y es completamente invisible a los ojos del usuario. Se puede decir
prcticamente, que este componente corre por debajo, en un segundo plano,
realizando cualquier tipo de procedimiento que est obligado a realizarse sin la
necesidad de que sea visible al usuario. La clase Service por as decirlo, son las
clases que se ejecutan en background.
Content Provider
Los Content Provider, son principalmente utilizados para gestionar y
almacenar las bases de datos de la aplicacin. Tambin permiten que cualquier
aplicacin almacenen los datos en un fichero o cualquier otro formato. La gran
ventaja que presenta este tipo de componente, es que permite a cualquier
aplicacin acceder a los datos que estn siendo utilizados por otras aplicaciones
a la vez.
Intent
Un Intent, es un simple mensaje, que se utiliza para determinar el
objetivo de la aplicacin, es decir, su propsito. La principal peculiaridad es la
forma en la cual los Intent describen la tarea que se va a llevar a cabo y los datos
necesarios para realizarla. En ltima instancia, es el sistema el que finalmente
decide cual ser el ms indicado para realizar sus acciones. Este componente,
est muy ligado al Activity, puesto que las Activities, realizan los cambios de
vista o de interfaz por medio de los Intent.
Broadcast Receivers
Con esta clase, la aplicacin que se crea, est a la escucha de cualquier
Intent proveniente de distintas aplicaciones. Al utilizar este componente, la
aplicacin puede empezar automticamente y responder al Intent que est a la
escucha. Se puede decir que la aplicacin est a la escucha de un evento para
llevar a cabo la accin a la cual est predestinada. Generalmente las aplicaciones
que utilizan esta clase, se utilizan para lanzar eventos provenientes de cualquier
tipo de Intent. Un claro ejemplo puede ser la gestin de las llamadas entrantes
que recibe el dispositivo mvil.
5.5.
Los componentes que forman las aplicaciones en Android, tienen bien definido
un ciclo de vida de manera que se puede saber en cualquier momento en que estado est
la aplicacin para poder gestionar los flujos de sta en funcin de su estado.
29
30
onStart: Junto con el estado onStop forman el conjunto de estados en los cuales
se maneja la actividad desde su comienzo.
31
32
5.6.
33
34
De nuevo aparecer una nueva ventana en la cual en los campos Name se pude
introducir por ejemplo ADT y en el campo Location la siguiente URL:
https://dl-ssl.google.com/Android/eclipse/
Y una vez realizado, pulsar el checkbox o el botn Select All y pulsar Next.
35
Referenciar SDK
Para poder crear proyecto, debemos referenciar la SDK en la pestaa Windows>Preferentes->Android->Browse y buscar el path sobre el que se encuentra la SDK.
Adems del SDK de Android, tambin debemos descargar los llamados SDK
Targets de Android, que no son ms que las libreras necesarias para desarrollar en cada
una de las versiones concretas de Android. As, si queremos desarrollar por ejemplo
para Android 1.6 tendremos que descargar su target correspondiente. Para ello, desde
Eclipse debemos acceder al men Window ->Android SDK Manager, y en la seccin
Packages seleccionar e instalar todos los paquetes deseados.
36
37
Para configurar el AVD tan slo tendremos que indicar un nombre descriptivo,
el target de Android que utilizar, y las caractersticas de hardware del dispositivo
virtual, como por ejemplo su resolucin de pantalla, el tamao de la tarjeta SD, o la
disponibilidad de GPS. Y por ultimo comenzar un proceso de actualizacin de la SDK.
38
Dentro del emulador, existe la posibilidad de poder utilizar imgenes que puedan
simular memorias internas, flash o de otro tipo.
Las diferentes tipos de imagen son los siguientes:
Imagen de sistema: son el tipo de imagen necesaria para que el emulador pueda
arrancar, de modo que slo son de lectura y obtienen informacin sobre la
manera de ejecutarse ste.
5.6.5.2.
39
5.6.5.3.
40
adb shell: con este comando se puede acceder al directorio root del terminal y
desde ese punto se podrn lanzar diversos comandos contra el dispositivo. Como
por ejemplo, acceder al sistema para poder borrar las aplicaciones instaladas.
41
6.
Manual de usuario
42
6.1.
DIARIO DE VIAJE es una aplicacin que est desarrollada para que el usuario
pueda almacenar informacin sobre un viaje que ha realizado y todos los lugares que ha
visitado durante el viaje.
El objetivo principal de la aplicacin es que el usuario pueda documentar los
viajes que realiza, tanto de forma escrita con comentarios, como de forma visual con
fotografas y posiciones geogrficas representadas en un mapa de los lugares en los que
ha estado. En definitiva la idea es tener una aplicacin que permita acceder fcilmente y
tenga ordenada toda la informacin que el usuario ha guardado de un viaje.
Conceptos bsicos de la aplicacin:
6.2.
43
Editar: Si se marca esta opcin se pueden modificar los datos del viaje
seleccionado, con la limitacin de que el viaje tiene que estar activo, si ste ha
finalizado no se pueden modificar sus datos.
44
6.3.
Nombre: Dar nombre al viaje y ser el nombre que aparece en la lista de viajes
de la pantalla principal. El usuario es quien segn su criterio pondr nombre al
viaje, dependiendo de qu tipo de viaje se est realizando. Se puede estar
visitando una ciudad o un sitio cuyo nombre sea menos especifico, como puede
ser un viaje por la costa del sol, donde en este caso las ciudades que se visitan
45
correspondern con los lugares visitados del viaje, o por el contrario el viaje
corresponde con una ciudad y seria el nombre del viaje.
Los dos campos relacionados con las fechas (Fecha Inicio y Fecha Fin)
cumplen los siguientes dos requisitos:
Ni la Fecha Inicio ni la Fecha Fin pueden ser menor que la fecha actual.
46
6.4.
Esta ventana muestra una lista de los lugares que se han visitado en un viaje.
Para acceder a ella hay que seleccionar un viaje de la lista en la pantalla principal.
Vase figura 6.5.
La lista de lugares que se muestra en esta ventana consta del nombre del lugar, la
fecha en la que se estuvo y una fotografa del lugar que el usuario tiene la opcin de
poner en la lista. La seleccin de la foto se realiza mediante un men contextual,
dejando pulsado un lugar de la lista que despliega un men similar al de la pantalla
principal, Vase figura 6.6, y que contiene las siguientes opciones:
Editar: Si se marca esta opcin se pueden modificar los datos del lugar
seleccionado, con la limitacin de que el viaje tiene que estar activo, si es un
viaje ha finalizado no se pueden modificar sus datos.
Aadir Foto: Esta opcin permite al usuario seleccionar una foto y asignarla al
lugar seleccionado de la lista, para tener ms informacin si el usuario lo desea.
Al seleccionar esta opcin se abre la galera de fotos que se tenga instalada en el
mvil donde aparecen todas las fotos realizadas por el usuario no solo con esta
aplicacin y este buscara alguna foto realizada en ese lugar para aadirla a la
lista.
47
Quitar Foto: Es la opcin que permite al usuario quitar alguna foto que se
hubiera seleccionado.
48
Las posiciones de los lugares visitados aparecen marcadas sobre el mapa con un
icono y corresponde con las coordenadas de cada lugar visitado que se han obtenido
mediante el GPS del mvil, esto se explicar posteriormente en este apartado. Al pulsar
sobre uno de los marcadores se despliega una ventana que indicar al usuario el lugar
que es mediante su nombre y la opcin de ir a la ventana de ese lugar visitado con
informacin ms detallada, nombre, fecha, fotos,.... Vase figura 6.9.
49
6.5.
Ubicacin: Este botn permite obtener las coordenadas del lugar mediante el
GPS del mvil. Al pulsarlo se accede a un mapa que contiene un botn en la
parte superior derecha que hay que pulsar para obtener la posicin actual del
usuario y que esta sea representada en el mapa. Una vez que el usuario puede ver
la posicin representada en el mapa se le da opcin de aceptar si est de acuerdo
con la posicin. Si el usuario acepta se utilizaran las coordenadas para marcar el
lugar en el mapa explicado en el apartado anterior. Vase figura 6.11.
50
6.6.
Ventana Lugar
Cmara: Para acceder a la cmara y poder aadir fotos que se asignaran al lugar
que hemos abierto.
Imagen: Imagen del lugar. Es la misma foto que asociamos a la lista de lugares.
Fecha: Fecha en la que hemos visitado el lugar. Esta fecha est comprendida
entre la fecha de inicio y fecha final del viaje. Esta fecha es tomada
automticamente por la aplicacin cuando es creado el lugar.
51
52
Y por ltimo, la tercera pestaa, Fotos muestra una galera de fotos, que son
todas las fotos que el usuario realizo de ese lugar accediendo a la cmara desde esta
misma ventana, si se selecciona una foto de la galera esta se muestra en la pantalla.
Cuando una imagen se est visualizando en la pantalla se puede pulsar en ella y
aparecen dos botones que le dan la opcin al usuario de rotar la fotografa a la derecha o
a la izquierda, pasado un breve periodo de tiempo los botones desaparecen pudiendo
volver a pulsar en la fotografa para que aparezcan. Ver figura 6.15.
53
7.
Diseo e implementacin
54
7.1.
Diseo
55
Toda la aplicacin gira en torno a estos dos conceptos que estn relacionados
entre s y a los que se les va aadiendo informacin. Se pueden crear todos los viajes
que el usuario quiera realizar, con la condicin de que no puede haber ninguno activo al
iniciar uno nuevo ya que esta aplicacin est pensada para viajes en tiempo real, es
decir, el usuario va recopilando informacin en el mismo momento en que est
viajando. Dentro de un viaje se van aadiendo los distintos lugares que el usuario ha
visitado. Por lo tanto, un viaje tiene dos estados:
Nombre del viaje: el usuario dar el nombre que crea que mejor representa a ese
viaje.
Descripcin: Se dar una breve descripcin del viaje.
Fecha de inicio y fin: Periodo de tiempo durante el cual se estar viajando,
aunque el usuario puede modificar estas fechas, respetando ciertas condiciones,
como la de que no puede crear un viaje nuevo con la fecha de inicio inferior a la
actual, o que la fecha final sea menor que la fecha inicial. Si el usuario incumple
alguna condicin ser advertido mediante una notificacin. Adems el usuario
tiene la opcin de finalizar el viaje activo en el momento que desee, debido a
que el viaje se ha acortado por cualquier motivo, por lo que la fecha de fin
pasara a ser la actual y el viaje pasara al estado de Finalizado.
56
Una vez que se tiene un viaje activo se pueden aadir los distintos lugares o
eventos que se van realizando durante el viaje, aqu es donde se recopila la mayor parte
de la informacin.
La primera parte que recoge informacin es un formulario en el que se deben
rellenar los siguientes campos:
Descripcin del lugar: algo genrico que describa el lugar, ya que como se
explicar ms adelante el usuario tiene la opcin de aadir todos los comentarios
que desee del lugar visitado.
FOTOS: Corresponde con las fotos que el usuario ha realizado del lugar.
57
58
1:N
Viajes
Visita
Lugares
1
Escribe
1:N
Comentarios
59
LEYENDA
Entidades fuertes
Entidades dbiles
Entidades dbil en existencia
7.2.
Implementacin
60
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<Button
Android:id="@+id/nuevoViaje_button"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/nuevoViaje_label" />
<ListView
Android:id="@+id/listaOpc"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent
</ListView>
</LinearLayout >
DiarioDeViaje.java
En esta clase destacamos los siguientes tres metodos que son onCreate(),
onStart() y cargarLista(). Los dos primeros son mtodos que incorpora el SDK de
Android y que se corresponden con el ciclo de vida de una actividad. El ltimo es un
mtodo privado que permite una mejor estructuracin del cdigo.
61
private
private
private
private
Este mtodo es llamado cuando la actividad es creada por primera vez, por eso
lo que hacemos es llamar al archivo main.xml para que se muestren los elementos
creados por ese archivo en la actividad. Estos son detalles que ya se explicaron en un
apartado anterior aunque comentaremos algunas cosas muy brevemente en estos
primeros mtodos para situar al lector un poco mejor dentro del contexto.
Despus de establecer la vista de la actividad se inicializan unas variables que se
usaran para tener la fecha en la que nos encontramos actualmente, necesarias en un
mtodo posterior. Inicializamos el elemento listaOpciones que es del tipo ListView para
mostrar los viajes realizados e indicaremos la accin que deben llevar al acabo cuando
se deje pulsado un elemento de la lista (dejar pulsado un breve instante de tiempo el
elemento para que aparezca un men contextual con distintas opciones), o simplemente
se pulse un elemento de la lista, accin click sobre el elemento.
Finalmente creamos el objeto necesario para acceder a la base de datos y lo
abrimos para poder leer y escribir en ella. La conexin con la base de datos y su uso se
explicara ms adelante en este apartado.
public void onStart(){
super.onStart();
cargarLista();
}
62
Este otro mtodo onStart(), se llama justo a continuacin del mtodo onCreate()
o cuando la pantalla vuelve a estar en primer plano porque ya haba sido llamada
anteriormente, esta parte corresponde al ciclo de vida de Android explicado en el
apartado 5 de esta documentacin. Debido a esto, es aqu donde llamamos al mtodo
cargarLista(), porque si hubiera sido llamado desde el mtodo onCreate() los elementos
de la lista no se actualizaran si esta pantalla volviera a estar en primer plano. Un
ejemplo dentro de esta aplicacin seria al crear un nuevo viaje, en este caso se rellenara
un formulario con los datos del viaje y se pulsara el botn crear que te llevara a una
nueva ventana para aadir los lugares que se visitaran, si desde esta ventana se pulsa el
botn atrs que poseen todos los dispositivos con Android se mostrara de nuevo la
ventana que contiene la lista de los viajes que se ha realizados, y como el mtodo
cargarLista() se llama desde el mtodo onStart() la lista aparecer actualizad con el
nuevo viaje creado.
private void cargarLista(){
viajes = new ArrayList<NuevoViajeBean>();
viajes = nv.selectAll();
for(NuevoViajeBean nuevo: viajes){
if(nuevo.getActivo() == 1){
String fechaActual = dayActual + "/" + monthActual +
"/" + yearActual;
Boolean b = compararFecha(fechaActual,
nuevo.getFechaFin());
if(!b){
nuevo.setActivo(0);
nv.update(nuevo);
viajes = nv.selectAll();
}
}
}
Adaptador adaptador = new Adaptador(this, viajes);
listaViajes.setAdapter(adaptador);
}
63
el estado del viaje cambia a Finalizado como el del resto de viajes si los hubiera, si no
se mostrar como activo. De esta forma los viajes se finalizan de forma automtica
cuando se traspasa la fecha que puso el usuario como final del viaje, aunque se da la
opcin, como ya se ha explicado, que el usuario finalice el viaje antes de la fecha que
marc como fin, si as lo deseara.
Finalmente creamos un nuevo objeto de la clase Adaptador, que es una clase que
hemos creado y explicaremos a continuacin, a la que le pasamos el array viajes y a
continuacin a la lista de viajes (listaViajes) le cambiamos mediante el mtodo
setAdapter() el adaptador que viene por defecto por el recin creado por nosotros, para
personalizar as la forma como se mostrarn los distintos elementos de la lista, es decir
mostrar la informacin de los distintos viajes, que hemos decidido que fuera el nombre,
fecha de inicio, fecha fin y estado del viaje.
De la clase Adaptador destacamos el mtodo getView() que es donde se
establecen los datos que se quieren mostrar en cada elemento de la lista. Aunque como
se ve a continuacin en el cdigo tambin se encuentra el constructor que inicializa el
contexto que hace referencia a la activity desde la que se llama a esta clase, en este caso
concreto desde la actividad principal DiarioDeViaje.java, y tambin se inicializa la
variable datos con el parmetro que se le pasa datos, que es la lista de todos los viajes
realizados hasta el momento. Al haber llamado igual tanto a las variables como a los
parmetros que se pasan hemos tenido que utilizar la palabra reservada en Java this.
Esto ltimo ha sido una simple apreciacin para el lector, ya que esto no corresponde a
este apartado, ni siquiera a este proyecto, ya que el objetivo no es hacer un manual de
java si no usar java(concretamente el SDK de Android, que est escrito en Java) para
realizar un proyecto.
A continuacin encontramos los mtodos getCount(), getItem() y getItemId(),
que junto con getView() son necesarios implementar debido a que extendemos de la
clase BaseAdapter. El primero de ellos, getCount(), devuelve un valor de tipo int con el
tamao del array que inicializamos en el constructor, en caso de tener que usarlo esto se
traduce para nuestra aplicacin en el nmero de viajes que llevamos realizados. El
mtodo getItem(int arg0) devuelve un objeto, que en nuestro caso correspondera con
un viaje realizado, concretamente el viaje que se ha seleccionado en la lista, devolvera
el Bean correspondiente con ese viaje, y por tanto tendramos un objeto con toda la
informacin del viaje seleccionado. El tercer mtodo getItemId(int arg0) devulve el id
del viaje que se ha seleccionado. Son mtodos de relativa importancia, ya que la
informacin que devuelven es necesaria en caso de tener que manipular los distintos
viajes que se realizan. A continuacin se muestra el cdigo completo de la clase
Adaptador y a continuacin se explicar el mtodo getView(), que como ya se ha dicho
es el ms destacado de esta clase.
64
inflater
LayoutInflater.from(context);
65
datos.get(arg0).getFechaInicio());
TextView fechaFin = (TextView)
item.findViewById(R.id.fechaFin_id);
fechaFin.setText(" al " + datos.get(arg0).getFechaFin());
return item;
}
}
66
Android:layout_height="match_parent"
Android:orientation="horizontal" >
<TextView
Android:id="@+id/fechaInicioLista_id"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textStyle="normal"
Android:textSize="15dp" />
<TextView
Android:id="@+id/fechaFinLista_id"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textStyle="normal"
Android:textSize="15dp" />
</LinearLayout>
</LinearLayout>
67
Este trozo de cdigo se encuentra dentro del mtodo que genera el men
contextual onContextItemSelected() de la clase Viaje.java, que no hemos visto
necesario explicar su implementacin. Lo que se hace es comprobar dentro del men si
la opcin seleccionada era la de aadir una foto y si es as lanzar un intent mediante el
mtodo startActivityForResult() que abrir la galera de fotos. Cuando se selecciona
una foto de la galera se llama al mtodo onActivityResult() que es el encargado de
procesar la respuesta. Lo nico que se hace en este mtodo es volver a llamar al mtodo
cargarLista() para que actualice de nuevo la lista de lugares visitados mostrando
tambin la foto que se ha seleccionado.
protected void onActivityResult(int requestCode, int resultCode,
Intent data){
if(requestCode == SELECT_PICTURE){
cargarLista();
}
}
NuevoViaje.java
Esta es la clase que se encarga de rellenar el formulario necesario para la
creacin de un nuevo viaje, esta clase recibe una serie de datos por parte del usuario,
como es el nombre que quiere dar al viaje y las dos fechas que delimitaran el periodo de
tiempo que durar el viaje. De esta clase hemos destacado el efecto que se produce al
pulsar sobre los campos que solicitan las fechas y que es la aparicin de una ventana
emergente, denominado selector de fechas, para que el usuario pueda introducir las
fechas de una forma grafica y no mediante texto utilizando el teclado, adems de la
ventaja de ser ms cmodo e intuitivo para el usuario, tiene la ventaja de que nos
aseguraremos que el usuario introduzca los valores de fechas con el formato adecuado.
private EditText fechaInicioEdit = null;
private EditText fechaFinEdit = null;
private
private
private
private
68
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
lanzarEvento(fechaInicioEdit);
lanzarEvento(fechaFinEdit);
}
69
como el efecto de hacer click. Por todo lo explicado anteriormente son necesario los dos
eventos, as si el usuario cambia el focus entre los dos campos de fechas (fecha de
inicio y fecha fin) se lanza el segundo evento (setOnFocusChangeListener()) y se
muestra el selector, adems se comprueba que los dos objetos View sean los que
contienen el focus mediante la condicin hasFocus, para evitar que si se cambia el
focus a otro campo que no sea uno de fechas no se lance el selector. Finalmente cuando
uno de los dos eventos, dependiendo de la accin del usuario, llama al mtodo
showDialog(int id) que es el que hace visible el selector de fechas y para ello se ejecuta
de forma implcita el cdigo que contiene el mtodo protegido onCreateDialog que es el
que realmente abre la ventana emergente (selector de fechas).
protected Dialog onCreateDialog(int id){
Dialog d = null;
switch (id) {
case DATE_DIALOG_ID:
d = new DatePickerDialog(this, mDateSetListener,
year, month, day);
break;
default:
break;
}
return d;
}
NuevoLugar.java
Al igual que suceda en la clase NuevoViaje.java esta clase se encarga de
gestionar los datos introducidos por el usuario en un formulario. De esta clase, como
pasaba con la clase anterior, vamos a explicar parte del cdigo y lo ms destacado es la
obtencin de la posicin del lugar que se visita mediante coordenadas GPS y
representarla de forma grfica en un mapa utilizando la API de google y el
GoogleMaps.
public class NuevoLugar extends Activity {
private Button ubicacion = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nuevo_lugar);
ubicacion = (Button) findViewById(R.id.ubicacion_id);
ubicacion.setOnClickListener(new OnClickListener() {
70
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(contexto,
MapaUbicacion.class);
startActivity(intent);
}
});
El cdigo anterior solo es una parte de la clase NuevoLugar.java, del que vamos
a explicar el campo ubicacin que aparece en la aplicacin al crear un nuevo lugar
visitado en un viaje. Para ello en el mtodo onCreate() en primer lugar y como siempre
se hace referencia al archivo XML que contendr la interfaz que se mostrar en la
aplicacin. A continuacin creamos un objeto de tipo Button, el cual inicializamos con
el botn creado en archivo XML al que hemos hecho referencia anteriormente mediante
el mtodo findViewById(). Una vez que tenemos la variable ubicacin creada
cambiamos, utilizando el mtodo setOnClickListener(), la accin que se lleva a cabo al
pulsar sobre el botn. Esta accin es la de ejecutar una nueva activity con el nombre
MapaUbicacin.
private MapView mapa = null;
private MapController controlMap = null;
private LocationManager locManager = null;
private LocationListener locListener = null;
private
private
private
private
71
72
73
}
}else{
Toast.makeText(contexto, "El GPS esta desactivado",
Toast.LENGTH_LONG).show();
}
break;
case R.id.boton_aceptar:
locManager.removeUpdates(locListener);
Intent intent = new Intent(contexto,
NuevoLugar.class);
startActivity(intent);
break;
default:
break;
}
}
74
CAMARA
case R.id.camara_id:
Date fecha = new Date();
String file = fecha.getDay() + "-" + fecha.getMonth() + "-"
+ fecha.getYear() + "_" + fecha.getHours() + "-" +
fecha.getMinutes() + "-" + fecha.getSeconds() + ".jpg";
rutaFoto = new File(rutaLugar, file);
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri output = Uri.fromFile(rutaFoto);
i.putExtra(MediaStore.EXTRA_OUTPUT, output);
startActivity(i);
break;
75
puedes buscar el artculo que describe el lugar visitado y aceptas. En el momento que se
acepta el artculo que se encuentra a la vista es el que se mostrar en sucesivas visitas a
la pestaa de wikipedia. Lo hicimos finalmente de esta manera porque aunque
estuvimos buscando alguna api de wikipedia que pudiramos usar aplicndola a nuestra
aplicacin y dentro de nuestro cdigo no la encontramos finalmente y nos decidimos
por esto.
Para poder usar nuestra aplicacin como un navegador web mostrando as
informacin de internet y no tener que usar un navegador externo a nuestra aplicacin
para ver contenido de la web hay que definir un elemento WebView en un archivo .xml,
este elemento lo definimos en el archivo lugar.xml que es donde se define toda la vista
para la pantalla donde se muestra la informacin de un lugar.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lugar);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl(cadena);
myWebView.setWebViewClient(new verMiWeb());
}
En el mtodo onCreate() a parte de las lneas de cdigo que se pueden ver hay
varias lneas de cdigo ms que no hemos puesto porque no son relevantes para explicar
el funcionamiento de la informacin que se muestra de la wikipedia y que si la
hubiramos puesto ocupara demasiado espacio, por lo tanto hemos puesto lo necesario
para explicar lo deseado. En primer lugar inicializamos la variable myWebView con el
elemento que se encuentra en el archivo Lugar.xml. Para cargar el artculo de wikipedia
correspondiente en nuestra aplicacin usamos el mtodo loadUrl que recibe la variable
cadena, esta variable est inicializada con la direccin mencionada anteriormente ms
el nombre que se le dio al lugar por parte del usuario, estas dos cadenas se unen usando
un mtodo privado dentro de la misma clase donde va el mtodo onCreate(). Finalmente
tenemos la llamada al mtodo setWebViewClient() que recibe una clase privada que
hemos implementado, y que sirve para evitar que se abra un navegador externo a
nuestra aplicacin, gracias a este mtodo siempre estaremos navegando por internet
dentro de nuestra aplicacin.
FOTOS
Para visualizar las fotos hemos creado una galera. En el sdk de Android se
encuentra un componente que nos sirve para implementar la galera de fotos, y se
denomina Gallery, este componente lo creamos en el archivo Lugar.xml y lo llamamos
desde la clase Lugar.java similar a lo que suceda con el elemento WebView para crear
el navegador interno de nuestra aplicacin.
76
77
continuacin se crea un objeto Bitmap para poder trabajar con una imagen, este objeto
se crea a partir del archivo anterior, posteriormente se utiliza este bitmap para crear uno
nuevo pero con la escala deseada, para poder reducir el tamao original de una foto y
pueda previsualizarse en la galera. Finalmente se asocia el ltimo Bitmap creado al
elemento ImageView que hemos formado al principio, para que aparezcan en la galera
mediante la utilizacin del mtodo setImageBitmap() y por ultimo cambiamos el ancho
y alto de la galera con el mtodo setLayoutParams().
78
8.
Pruebas
79
80
Ayuntamiento de Sevilla
Catedral de Sevilla
Reales Alczares de Sevilla
Archivo de Indias
Plaza de toros de Sevilla
Torre del Oro
Parlamento de Andaluca
81
Estas son algunas de las fotos realizadas durante la prueba real de la aplicacin.
82
83
9.
Ampliaciones
84
Esta aplicacin est preparada para futuras ampliaciones, las cuales pueden ser
tanto de mejora de la interfaz como de incorporacin de nuevas funcionalidades.
Una de las mejoras ms interesante que vemos para este proyecto es la creacin
de un servicio web, este servicio mostrara de forma online lugares tursticos para que el
usuario de la aplicacin pudiera saber que puede visitar en su alrededor y la informacin
del mismo.
Se ha pensado que este servicio web se construira con la ayuda de aquellos
usuarios que quisieran colaborar, los usuarios deberan registrarse y al documentar un
lugar turstico, se dara la oportunidad al usuario de subir ese lugar si lo desea,
guardndose as la posicin GPS del lugar, comentarios que ha hecho el usuario, enlace
de wikipedia y alguna fotografa que quisiera subir.
Una vez creado el servicio web con zonas tursticas se podra crear una opcin
de indicacin dentro del mapa que te indica la posicin del lugar, a semejanza con el
Google Maps, para mostrar la ruta desde la posicin que se encuentra el usuario hasta
el lugar turstico al que se quiere ir.
En cuanto a la interfaz de la aplicacin somos conscientes de las mejoras que se
pueden realizar. Al estar realizando un proyecto de fin de carrera hemos puesto mayor
inters en la parte funcional de la aplicacin y por supuesto en la documentacin de la
misma, ya que el objetivo de un proyecto fin de carrera es el demostrar que se tiene los
conocimientos necesarios para llevar a cabo un proyecto y no el proyecto en s, aunque
esta ltima parte siempre es importante, pero sabemos que en un mundo laboral real este
aspecto sera fundamental y que la mejora de la parte visual de la aplicacin sera lo
primero en mejorar para una posible comercializacin.
Como se acaba de comentar el objetivo de un proyecto fin de carrera es la
demostracin de que se tiene los conocimientos para disear y llevar a cabo un
proyecto, en nuestro caso informtico, y es donde se pone mayor inters. Por tanto el no
llevar a cabo estas mejoras comentadas anteriormente no es por falta de ambicin si no
por falta de tiempo real.
85
10. Conclusiones
86
87
Por ltimo, queremos agradecer en primer lugar a nuestro tutor Dr. Jos Ramn
Portillo Fernndez todo el tiempo que nos ha dedicado guindonos en la elaboracin de
esta documentacin, y en segundo lugar pero no menos importante a nuestros familiares
y amigos por todo el tiempo que le hemos quitado durante el periodo en el que hemos
realizado este proyecto. Gracias a todos.
88
11. Bibliografa
89
Android : Guia para desarrolladores / W. Frank Ableson, Robi Sen, Chris King.
Madrid: Anaya Multimedia, [2011]
El gran libro de Android / Jess Toms Girons
Barcelona: Marcombo, [2012]
Manual imprescindible de desarrollo de aplicaciones para Android / Joan Ribas
Lequerica
Madrid: Anaya Multimedia, [2011]
Android: curso de desarrollo de aplicaciones / Scott McCracken
Barcelona: Inforbook's, 2012
BLOG ANDROIDEITY / Aurora Rodrguez [Abril Junio 2012]
http://Androideity.com
FORO ANDROID-SPA [Abril Mayo 2012]
http://www.Android-spa.com
BLOG NOSINMIUBUNTU [Abril Mayo 2012]
http://www.nosinmiubuntu.com/p/programacion-Android.html
PGINA OFICIAL DE ANDROID [Abril Mayo 2012]
http://developer.Android.com
WIKIPEDIA
http://es.wikipedia.org/wiki/Android
Curso de Android desarrollo de aplicaciones mviles / Adrin Cataln
MAESTROS DEL WEB
http://www.maestrosdelweb.com/editorial/curso-Android
Curso programacin Android / Salvador Gmez Oliver
SGOLIVER
www.sgoliver.net
90