Você está na página 1de 131

PROYECTO FIN DE CARRERA

CREACIN DE UNA PLATAFORMA DE


DESARROLLO DE APLICACIONES PARA
ANDROID















AUTOR: JOS MIGUEL REYES IBARRECHE


Madrid, Septiembre de 2010





Autorizada la entrega del proyecto del alumno/a:


Jos Miguel Reyes Ibarreche






EL DIRECTOR DEL PROYECTO

Mario Castro Ponce









Fdo.: Fecha: / /




V B del Coordinador de Proyectos

David Contreras Brcena









Fdo.: Fecha: / /













PROYECTO FIN DE CARRERA










CREACIN DE UNA PLATAFORMA DE
DESARROLLO DE APLICACIONES PARA
ANDROID













AUTOR: JOS MIGUEL REYES IBARRECHE

DIRECTOR: MARIO CASTRO PONCE




Madrid, Septiembre de 2010

iv
RESUMEN


El proyecto Creacin de una plataforma de desarrollo de aplicaciones para
Android tiene como objetivo principal dar existencia a una mquina virtual
con sistema operativo Ubuntu-Linux desde la que se desarrollen aplicaciones en
el sistema operativo Android. Estas aplicaciones son: Creacin de una interfaz
de usuario, formacin de bases de datos, uso de mapas, utilizacin de
herramientas del Sistema de Posicionamiento Global (GPS), y reproduccin de
archivos multimedia.

La utilizacin de una mquina virtual tiene como propsito proporcionar
al usuario un entorno de desarrollo completamente configurado, eficiente y
evite al usuario los problemas asociados a la configuracin y actualizacin de
dicho entorno de desarrollo.

El desarrollo de este proyecto permitir conocer el efecto del sistema
Android en el mercado de la telefona mvil y las ventajas de uso
comparndolo con el resto de sistemas operativos actuales como iPhone,
Symbian

Las caractersticas de este sistema operativo son que las aplicaciones
pueden programarse en lenguaje Java, el software proporcionado est bajo
licencia Apache, y se facilita un Kit de Desarrollo Software (SDK) que puede
incorporarse a un IDE tan conocido como Eclipse mediante un plug-in.

La principal finalidad desde el punto de vista del desarrollador es:
Obtener el mximo partido de la plataforma, que la aplicacin sea portable, fcil
de ejecutar y reutilizable, y que tenga facilidad para integrar todo tipo de
programas con las aplicaciones Web de Google.

La estructura del sistema operativo Android consta de: Un ncleo de
Linux, libreras escritas en lenguaje C/C++, Android Run Time, Framework de
aplicaciones y una capa de aplicaciones.

Las herramientas utilizadas para desarrollar aplicaciones son: la SDK
proporcionada por Google, una JDK de Java y un IDE de desarrollo Java como
es Eclipse.

El proyecto pretende mostrar, de una manera didctica, el uso y
potencial de esta plataforma de desarrollo. Por esta razn, se ha dedicado la
mayor parte del proyecto (y de la memoria del mismo) a describir los pasos
necesarios para que un usuario con poca experiencia sea capaz de desarrollar
sus propias aplicaciones Android.


v
ABSTRACT


The project "Creation of a developing platform for Android applications has as
main objective is to create a virtual machine running Ubuntu-Linux from which
to develop applications on the Android operating system. These applications
are: Creation of a user interface, database sharing, use of maps, using tools of
the Global Positioning System (GPS), and playback of multimedia files.

The use of a virtual machine has as main purpose to provide the final
user with a development framework, efficient and completely setup, to avoid
the potential problems related to the configuration and update of that
framework.

Furthermore, the development of this project will reveal the effect of
Android in mobile phone market and use advantages compared with other
current operating systems such as iPhone, Symbian...

The project itself shows the features of this OS is that applications can be
programmed in Java, the software provided is licensed under Apache, and
provides a Software Development Kit (SDK) to be incorporated as well known
as an Eclipse IDE through a plug-in .

Also, the main purpose from the point of view of the developer is:
getting all of the best of the platform, the portability of the main applications,
the facility to run and reusable the code, and has easy to integrate all kinds of
programs with Google's Web applications.

The Android operating system structure consists of: Linux kernel,
libraries written in C / C + +, Android Run Time Application Framework and
an application layer.

In addition the tools used for developing applications are the SDK
provided by Google, a Java JDK and Java development IDE like Eclipse.

Finally, this project aims to show, from a didactic point of view, the use
and potential of this framework. Thus, it has been devoted the largest part of
the project (and, consequently, its documentation) to describe accurately the
steps needed for an inexperienced programmer to develop his/her own
applications.





vi
ndice

Captulo 1 Introduccin 1

1.1 Motivacin 4

1.2 Objetivos 5

Captulo 2 Tecnologa en la actualidad 6

2.1 Introduccin 6

2.2 El mercado tecnolgico en la actualidad 8

2.2.1 Principales demandas de mercado 8

2.2.2 Representacin del mercado 10

2.2.3 Comparativa de los diferentes SSOO 13

2.3 SSOO mviles 15

2.3.1 Symbian 15

2.3.2 Windows Mobile 18

2.3.3 iPhone 20

2.3.4 Blackberry 24

2.3.5 Android 27

Captulo 3 El sistema Operativo Android 28

3.1 Introduccin 28

3.2 Estructura de Android 30

3.3 Estructura de una aplicacin Android 34

3.4 Ciclo de vida de una aplicacin en Android 36


vii
3.4.1 Prioridad de procesos 37

3.5 Herramientas para el desarrollo 39

3.5.1 Instalar SDK Android 39

3.5.2 Instalar plugin en Eclipse 41

3.5.3 Completar la instalacin 42

3.5.3.1 Referenciar SDK 42

3.5.3.2 Configurar emulador AVD y actualizar plugin 43

3.5.4 Otras herramientas tiles 44

3.5.4.1 Otras funcionalidades del emulador 45

3.5.4.2 Dalvik Debug Monitor Service 45

3.5.4.3 Android Debug Bridge 46

Captulo 4 Creacin de una aplicacin Android 48

4.1 Hola Mundo 48

4.1.1 Nuevo proyecto Android 48

4.2 Organizacin de una aplicacin Android 53

4.2.1 Android Manifest 53

4.2.1.1 Nodo <application> 54

4.2.1.2 Nodo <uses-permission> 55

4.2.1.3 Nodo <permision> 55

4.2.1.4 Nodo <instrumentation> 55

4.2.2 Carpeta src 56

4.2.3 Carpeta res 56

4.2.4 Carpeta gen 57

viii

4.2.5 Carpeta bin 57

4.3 Interfaz de usuario en Android 58

4.3.1 View 58

4.3.1.1 Widgets 59

4.3.2 View Groups 66

4.3.3 Otros elementos de la interfaz 72

4.3.3.1 Menu 72

4.3.3.2 Dialogs 78

4.4 Uso de Intents para lanzar nuevas Activities 80

4.4.1 Paso de parmetros y resultados 81

4.5 Creacin de BBDD 83

4.6 Aplicaciones multimedia 86

4.6.1 Reproduccin de archivos locales 86

4.6.2 Reproduccin de archivos remotos 88

4.7 Localizacin GPS y Mapas 89

4.7.1 Uso de la seal GPS 89

4.7.2 Uso de mapas 91

4.7.2.1 Creacin de una aplicacin Android con uso de mapas 94

4.8 Uso de recursos de Internet 103

Captulo 5 Mquina Virtual 105

5.1 Creacin de una Mquina Virtual 107


ix
Captulo 6 Valoracin econmica 112

Captulo 7 Conclusiones y trabajos futuros 114

7.1 Conclusiones obtenidas 114

7.2 Trabajos futuros 116

Captulo 8 Bibliografa 117

Captulo 9 ndice de figuras 119












1
Captulo 1 Introduccin

El avance tecnolgico de los ltimos aos demuestra el impacto ste ha tenido
en la sociedad. Est comprobado cmo estos avances han servido de gran
ayuda en el da a da y en el desarrollo econmico de sta.

El acceso a esta tecnologa fue dificultoso porque slo estaba al alcance
de muy pocas personas. Adems estos complejos dispositivos parecan una
excentricidad cuando se lanzaron al mercado. Actualmente el uso de estas
tecnologas, como por ejemplo el telfono mvil y el ordenador, es habitual;
hasta tal punto que muchas personas son totalmente dependientes de ellas. Esto
es debido al abaratamiento de los costes de produccin motivado por el precio
competitivo.

Estos dos factores: la accesibilidad y el coste, han sido claves en el boom
tecnolgico ya que la mayora de las tecnologas no estaban destinadas fuera de
un mbito cientfico. Las tecnologas de la Informacin y Comunicacin (TIC)
han tenido un papel importantsimo debido a la asombrosa evolucin que han
sufrido. Desde las primeras computadoras que servan de ayuda para elaborar
clculos complejos de diversas operaciones matemticas hasta los actuales
ordenadores porttiles. Esta transformacin ha sido posible a la investigacin
llevaba a cabo en nuevos componentes sustitutivos que han modificado
considerablemente el tamao de los ordenadores, ya que antes eran autnticos
mastodontes; pasando por los primeros PCs hasta llegar a los actuales
ordenadores.

De la misma manera que las nuevas investigaciones en diferentes tipos
introdujeron una reduccin considerable en el tamao de los ordenadores, y la
accesibilidad a este tipo de productos tambin fue importante el desarrollo de la
intercomunicacin entre ordenadores. Que las TIC estn cambiando la sociedad
es un hecho indiscutible debido en gran medida a la utilizacin de estas
tecnologas en nuestra vida diaria que estn haciendo que cambie la manera de
relacionarnos. Ha cambiado la forma de comprar, acceder a la prensa o la
bsqueda de informacin. Gracias a las TIC, las empresas han conseguido
mejorar la productividad, hacindolas ms competitivas y generar nuevas
lneas de negocio.

Por ltimo, a raz del avance obtenido gracias a Internet y a factores
anteriormente comentados, los ordenadores aumentaron y diversificaron su
funcionalidad. En cierta manera acompaado de un cambio sustancial en los
sistemas operativos que gobiernan los recursos del ordenador, sus mltiples
caractersticas y cualidades. Y en la actualidad stos ofrecen diversas
funcionalidades, desde procesadores de textos hasta reproductores de vdeo y
audio, etc. Los ordenadores son una herramienta imprescindible de trabajo.

2



Centrndonos en el tema principal de este documento, y en especial en
una rama de las TIC. Los dispositivos o telfonos mviles han sufrido un
cambio de imagen realmente impactante en un corto perodo de tiempo han
supuesto una revolucin tecnolgica impresionante.

El telfono mvil naci para la comunicacin entre personas desde
cualquier lugar del planeta. Con el paso del tiempo, este tipo de dispositivos
evolucion en diversos aspectos como por ejemplo su aspecto fsico, pasando de
tener un aspecto similar a un ladrillo, hasta llegar a tener un aspecto similar al
de una cartera de bolsillo. Los nuevos componentes no slo proporcionaron la
reduccin en el tamao sino que permiti que personas de todas las clases
sociales pudieran tener acceso a ellos. Por otro parte, esta renovacin tambin
viene acompaada en las diversas funcionalidades que han sido introducidas
en este tipo de telfonos, ya que a la principal finalidad es la de comunicar. Otro
tipo de caractersticas son: el envo de mensajes va SMS, diversas aplicaciones
multimedia, videoconferencia, acceso a Internet, transferencia de archivos, etc.

A raz de las nuevas funcionalidades incluidas, era necesario administrar
los diferentes recursos que ofreca el hardware del telfono para ello se
desarrollaron diferentes sistemas operativos (SSOO). Los sistemas operativos de
los primeros telfonos mviles slo se encargaban de gestionar las llamadas
recibidas y/o enviadas y los recursos de la energa proporcionada por la
batera. Con el paso del tiempo y con las nuevas funcionalidades incorporadas,
los SSOO de los dispositivos mviles han adquirido mayor importancia y
complejidad, de tal modo que casi se podran equiparar con los SSOO que hoy
se comercializan para cualquier tipo de ordenador. Uno de los primeros
sistemas operativos para dispositivos mviles fue PalmOS, despus le siguieron
Blackberry y Windows. Este tipo de SSOO iban destinados para dispositivos
PDA pero poco a poco se fueron implantando en telfonos mviles hasta que
Apple con su iPhone introdujo un nuevo concepto para dispositivos mviles,
que fue el desarrollo de pantallas tctiles.

Cuando iPhone se lanzo al mercado se pens que slo acaparara la cuota
de mercado destinada a los telfonos mviles y dentro de sta, slo aquel
segmento cuyo perfil no fuera ejecutivo, debido a que este perfil se relacionaba
ms con SSOO como Palm, Blackberry o Windows Mobile. A la larga, se vio que
estas previsiones fueron errneas de modo que los diferentes proveedores de
SSOO o fabricantes de telfonos mviles tuvieron que ponerse manos a la obra
para no perder an ms cuota de mercado frente a iPhone.




3



A partir de la revolucin introducida por la compaa Apple, multitud
de fabricantes vieron como su cuota de mercado se desvaneca de modo que
una buena parte de ellos se vieron forzados a introducir cambios en sus
dispositivos. Varias compaas Nokia,Samsung,Siemens,etc se vieron obligadas
a introducir cambios sustanciales en su modelo productivo, as que se llevo a
cabo el desarrollo de un nuevo sistema operativo para este tipo de dispositivos
llamado Symbian. Con este nuevo lanzamiento, dichas compaas se volvieron
a posicionar en el mercado, ya que las principales caractersticas de este SSOO
son muy similares a las caractersticas del iPhone.

La mayora de los SSOO para dispositivos mviles se han desarrollo bajo
un hardware especfico que apenas permite hacer modificaciones de alguna
caracterstica de stos. Este agravante perjudica al desarrollo de aplicaciones
para cualquier dispositivo mvil, debido a la dependencia del software del
dispositivo y a que el conocimiento de ste es extendido slo por los propios
desarrolladores del mismo, lo que dificulta que se puedan desarrollar
aplicaciones por terceras partes.

Con el transcurso del tiempo, y con el nacimiento de los dispositivos de
ltima generacin, los SSOO han ido evolucionando y han permitido que se
puedan desarrollar aplicaciones por terceras personas, puesto que permiten
implementarse en lenguajes de alto nivel como puede ser Java (J2ME), pero con
un ligero inconveniente, en cierta manera, las aplicaciones desarrolladas por
particulares son dependientes de la firma del software para su implantacin o
de la interfaz de usuario necesaria.

Google irrumpi en el mercado, lanzando su propio sistema operativo
llamado Android cuyas caractersticas estn basadas en el movimiento
OpenSouce, y permiten a cualquier persona desarrollar todo tipo de aplicacin
para este nuevo sistema operativo. Android es un stack de software
desarrollado exclusivamente para dispositivos mviles cuyo kernel o ncleo
est basado en Linux y todas sus aplicaciones se escriben en lenguaje Java.
Adems Android est bajo licencia Apache.










4

1.1 Motivacin

Este proyecto tiene dos fundamentos importantes:

Android facilita la creatividad porque sus aplicaciones se desarrollan
bajo un lenguaje de programacin fcilmente accesible ya que permite a
cualquier persona que tenga conocimientos bsicos sobre Java poder
desarrollar su propia aplicacin. Esta facilidad de desarrollar en un
lenguaje de alto nivel, permite que una amplia gama de aplicaciones
puedan ser desarrolladas por terceras personas, de forma que el
desarrollador se abstrae por completo de los requerimientos de
hardware que en un principio requieren las aplicaciones de mviles.
Otra caracterstica que soporta Android es que se basa en un cdigo
abierto (licencia APACHE) por el cual toda persona tiene acceso al
cdigo fuente y de este modo puede adaptarlo a las necesidades que el
propio desarrollador considere oportunas sin necesidad obligada de
distribuir los cambios realizados. Todo esto acompaado de poderosas
libreras que facilitan la labor de la programacin y que en un futuro las
aplicaciones desarrolladas puedan ser desplegadas en un telfono mvil.

Es importante la innovacin generada por Android. La tecnologa en este
mbito ha crecido a pasos agigantados, permitiendo incorporar
utilidades tanto en las telecomunicaciones (Bluetooth, 3G,) como en el
campo multimedia (reproductores de msica, vdeo) hasta tal punto
que los telfonos mviles pueden ser considerados mini- ordenadores ya
que incluyen iguales funcionalidades que un ordenador cualquiera. El
principal promotor de la idea es Google que son los principales
innovadores en el continuo avance tecnolgico.

La principal aptitud es que las aplicaciones creadas en Android son
ligeras, en contrapartida a otras arquitecturas en las cuales las aplicaciones son
totalmente dependientes del hardware hacindolas ms robustas.

Por ltimo, introducir un argumento a favor del proceso de cambio al
igual que el creativo que permite el desarrollo de las aplicaciones por terceras
personas en vez de por empresas de software especializadas. Aunque existan
herramientas para otro tipo de SSOO no todos ofrecen la misma facilidad que
ofrece Google.







5

1.2 Objetivos

Los objetivos principales son los siguientes:

Desarrollar una mquina virtual que sirve de plataforma para poder
ejecutar aplicaciones para Android. Dicha plataforma debe ser portable
para que se pueda trabajar con ella. Para llevar a cabo estas aplicaciones
de Android, el entorno de programacin debe ser sencillo contando con
un simple IDE de programacin instalado como puede ser Eclipse y la
SDK proporcionada por Google.

Conocer la estructura del sistema operativo Android. Averiguar qu
existe dentro del nuevo sistema, conociendo de primera mano los
entresijos que son necesarios como es su arquitectura, su diseo, al igual
que las ventajas y desventajas que nos puede proporcionar frente a otros
competidores.

Establecer los principios bsicos para el desarrollo de aplicaciones.
Conocer todo el entorno de programacin necesario: SDK esencial, APIs
que se necesitan y todo tipo de paquetes o clases necesarias para poder
abordar la programacin de cualquier tipo de aplicacin que se desee.
























6
Captulo 2 Tecnologa en la actualidad

2.1 Introduccin

Se puede considerar a la industria de la telefona mvil como una de las
industrias punteras as como estratgicas puesto que sta puede generar un
total de un 1 milln de millones de dlares aproximadamente. Este ratio se
deriva debido a la principal fuente de ingresos que son las llamadas y
mensajera, pero poco a poco va ganando peso los ingresos obtenidos mediante
otros servicios como puede ser el trfico de datos, y principalmente a travs de
Internet. La irrupcin de Internet en este tipo de dispositivos no slo ha
provocado una fuente de ingresos a tener en cuenta dentro de las operadoras
telefnicas, si no que ha permitido un avance simblico desde el punto de vista
tecnolgico.


A principios de la dcada de los 90 cuando aparecieron los primeros
telfonos mviles, slo permitan establecer llamadas, ms tarde con el paso de
los aos se fueron introduciendo nuevas funcionalidades como el envo de
mensajes, despus se aadieron diversos juegos interactivos hasta llegar a
navegar por Internet, realizar fotos e incluso ejecutar diversas aplicaciones
multimedia como reproductores de vdeo y/o audio.


La capacidad de realizar y recibir llamadas es solamente una de las
funciones de estos dispositivos ya que hoy son autnticos miniordenadores. Son
capaces de procesar datos, poseen un teclado similar al de los ordenadores, con
ellos se pueden procesar cualquier tipo de textos, acceder a Internet, reproducir
archivos de msica y vdeo, y adems poder realizar fotos. Pero, cules son las
principales diferencias o similitudes frente al ordenador convencional?


La principal diferencia que existe entre un sistema operativo que corre
en un dispositivo mvil frente a una que se encuentra en un ordenador, es que
para el primer caso, el sistema operativo debe lidiar contra restricciones mucho
ms estrictas en cuanto a limitaciones en la memoria, procesamiento de datos y
a que la ejecucin debe ser exacta y en un tiempo de respuesta mnimo. De
modo que la gestin de recursos para este caso debe ser estrictamente
minuciosa para las diferentes funcionalidades que otorga. Principalmente este
hecho se debe a que este tipo de sistemas deben saber acoplarse a las
necesidades tcnicas del terminal mvil, hacindolos totalmente robustos y a
medida de los requerimientos planteados.




7

Tambin deben aportar una mayor fiabilidad y estabilidad, y estar
debidamente analizados y testeados ante fallos. El sistema operativo debe
manejar con sumo cuidado el tipo de aplicaciones que se pueden ejecutar. No
como en el caso de los sistemas operativos convencionales que estn sujetos a
errores y continuamente muestran soluciones a los supuestos fallos producidos,
solucionndolos mediante nuevas actualizaciones o versiones del software.


La mayora de estos sistemas operativos deben funcionar en todo
momento como si fuera un sistema 24X7 y que proporcione un alto nivel de
usabilidad, de forma que el usuario pueda utilizarlo sin ningn requerimiento
formativo especfico. As, la usabilidad se sita como un punto clave en el
desarrollo de este tipo de dispositivos, ya que con esta funcionalidad se da
respuesta a la necesidad demandada por los usuarios, donde el empleo de
pantallas tctiles, abren un camino apasionante y excitante en la experiencia de
uso en entornos mviles.


Los terminales mviles con grandes pantallas y teclado virtual se han
hecho un hueco en el mercado y figuran en los catlogos de los fabricantes
importantes. El uso del telfono mvil se ha transformado en algo placentero,
divertido y sencillo, lo que ha motivado que la interfaz de usuario se haya
vuelto ms atractiva y humana. De modo que los usuarios de telfonos mviles
demandan aplicaciones y servicios que se diseen pensando en ellos.



















8
2.2 El mercado tecnolgico en la actualidad

2.2.1 Principales demandas de mercado

Antes de ver cmo es cada sistema operativo, hace falta realizar una breve
reflexin para observar qu se demanda en el mercado.


Usabilidad

En primer lugar, lo que la gente demanda es el diseo, los servicios y las
aplicaciones, es decir, la usabilidad.


El principal detonante en la revolucin tecnolgica sufrida en este sector
fue la llegada del iPhone. Este hecho ha producido un cambio importante en el
diseo de los terminales mviles, provocando el nacimiento de nuevos
dispositivos inspirados en l. Y es que, gracias al terminal de Apple, los
usuarios de telfonos mviles, que hasta el momento eran grandes
desconocedores del mundo del diseo mvil, han comenzado a escuchar
expresiones como multitouch e interfaz de usuario. Esta evolucin no ha
escapado a diseadores y fabricantes de mviles, que han seguido muy de cerca
las evoluciones en este aspecto. Desde los primeros modelos con pantallas
monocromo y mens lineales, pasando por la llegada del color, que increment
la demanda de capacidades grficas, incluida la reproduccin de fotografas. El
aumento de tamao en la pantalla fue una consecuencia casi inmediata,
haciendo que la interfaz pasase de un modelo basado en texto a uno ms
grfico. Sin embargo, no basta con llenar la pantalla de iconos y hacer que los
mens tengan animaciones. Lo importante es apoyarse en esas nuevas
posibilidades para hacer que la experiencia del usuario sea lo ms grata y
satisfactoria posible. El mayor desafo en el mercado es cmo agregar toda la
funcionalidad que se desea cuando el espacio en pantalla sigue siendo bastante
pequeo en relacin al de un PC convencional. Por ello, a la hora de pensar en
una nueva aplicacin hay que considerar aspectos tan importantes como si el
usuario va a manejar el terminal con una sola mano o con ambas, o el contexto
en el cual se va a utilizar la aplicacin.



Conectividad

Otro aspecto a tener en cuenta en el desarrollo de aplicaciones es el diseo de
servicios Web que sean utilizados desde el mvil.



9



Primeramente, hay que considerar las limitaciones tecnolgicas que
impone el propio dispositivo; algunos terminales no est adaptados a cdigos
complejos basados en Java Script y muchos no pueden con pginas que pesen
mucho. Otra dificultad es conocer en qu tipo de mvil se va a ejecutar el
contenido Web, es decir, las dimensiones de pantalla en las que se ver ese
contenido, el tipo de navegador, etc.

Tambin existen otro tipo de necesidades como pueden ser servicios de
localizacin. Dichos servicios constituyen otra rea de soluciones de movilidad
que ha evolucionado, expandindose a otros sectores, ms all del tradicional y
pionero de transporte. En los tiempos actuales cobra especial importancia la
relevancia del contexto, donde no slo interesa dnde se localiza al usuario sino
de los servicios que pueden encontrar a su alrededor. Son muchas las
soluciones basadas en la localizacin que estn dirigidas a la gestin, control,
planificacin, seguimiento de recursos, etc... Tradicionalmente se ha asociado
este tipo de servicios con el sector transporte pero ahora tambin permiten
ampliarse a sectores como la publicidad o marketing. La apertura de los
servicios de localizacin a mltiples sectores ha dado lugar a la aparicin de
novedades tecnolgicas, nuevos tipos de soluciones y aplicaciones que
aprovechan las oportunidades que brinda la localizacin, como puede ser la
geolocalizacin y las aplicaciones que utilizan estas caractersticas.

Por ltimo, los servicios de comunicacin entre mquinas (M2M) tiene
cada vez ms aplicaciones y estn presentes en numerosos sectores verticales,
gracias a los cambios producidos en las tecnologas de red y los dispositivos
mviles. La comunicacin entre mquinas y dispositivos es algo habitual. Y se
utiliza en los mbitos de telemetra, recogida de datos, control de trfico,
mantenimiento remoto, etc. Actualmente estas tecnologas estn
revolucionando el mercado.

El desarrollo de las redes mviles GPRS y 3G, as como las tecnologas
greles Bluetooth, WiFi, WiMAX y RFID que permiten establecer enlaces entre
mquinas, han potenciado de forma muy importante las aplicaciones de
mquina a mquina (M2M). Al igual que el desarrollo en las mquinas y
dispositivos, puesto que estos ltimos son cada vez ms pequeos e
inteligentes, formando parte de nuestra vida diaria, con mayores prestaciones, y
permitiendo automatizar a travs de los mismos, tareas que antes eran
inviables.






10

Movilidad corporativa

Cada vez son ms los empleados que tele trabajan o que realizan sus
actividades cotidianas fuera de una oficina y que durante su horario laboral
deben acceder a aplicaciones, servicios y recursos de la empresa.

Acceder a bases de datos comunes, compartir archivos y mantener
sincronizados sus equipos de manera rpida, sencilla y sobre todo, segura es
vital para la productividad diaria. Un simple dispositivo mvil puede convertir
a cualquier persona en un trabajador en movilidad, posibilitando una sensible
mejora de muchos sectores en los que los trabajadores se desplazan
constantemente. El rango que pueden abarcar estas soluciones pueden ir desde
la movilizacin de ERPs y CRMs hasta herramientas ofimticas y servicios de
correo corporativo.

2.2.2 Representacin del mercado

El mercado actual de las TIC est en continua evolucin y transformacin, y
ms an si nos fijamos nicamente en el sector de la telefona mvil. Es en l,
donde se ha llegado a tener ms impacto sobre la sociedad y donde se
constatado la mayor revolucin tecnolgica del momento.

Los terminales mviles han pasado de ser simples a ser dispositivos
altamente complejos; siendo equiparados a ordenadores, ofreciendo mayor
fiabilidad y funcionalidad de todo tipo. Dichos dispositivos son imprescindibles
en la vida de las personas para disfrutar de los componentes de ocio que
ofrecen.

Las nuevas oportunidades y caractersticas que ofrecen estos terminales,
han hecho que el mercado de la telefona mvil sea el escenario de una lucha
encarnizada. Realmente no hay un ganador claro ni un perdedor absoluto, lo
que existe es un ajuste y posicionamiento en funcin de las habilidades de cada
fabricante para convencernos de las prestaciones de sus sistemas operativos.

El xito de que un terminal mvil triunfe depende de varios factores
relacionados con el sistema operativo que contenga. Estos factores tan
importantes pueden ser que el sistema operativo tenga las garantas suficientes
de poder administrar los recursos y aplicaciones del terminal, de la robustez
que ste posea y de que el hardware del dispositivo sea capaz de soportar las
instrucciones generadas. Aparte de estas cualidades, lo que generalmente hace
ms vistoso a un terminal de este tipo es que el sistema operativo sea fcil de
usar y que posea aplicaciones bastante potentes y necesarias.



11
La guerra est abierta y mientras unos intentan mantener la cuota de
mercado, otros sin embargo van ganando terreno en este difcil marco en el cual
el riesgo de quedarse obsoleto o anticuado puede pagarse caro.

Si lo que se quiere son nmeros que reflejen el mercado en la actualidad,
segn estudios realizados en Diciembre de 2009, el sistema operativo que lidera
actualmente el mercado es el iPhone OS con un porcentaje del 51%, a la estela
de iPhone se sitan tanto Symbian OS como Android con porcentajes casi
similares, 21% y 16% respectivamente. Por ltimo se encuentran los sistemas
operativos de BlackBerry y Windows los cuales suman en total un 9% del
mercado.

Para poder aclarar, un poco lo datos sobre los porcentajes o cuotas de
mercado que anteriormente se han comentado, decir, como nota aclaratoria, que
los datos vertidos, representan el nmero mundial de smatphones, es decir,
aquellos telfonos mviles que disponen de un sistema operativo identificable.
Tambin cabe destacar que el porcentaje de smartphones representan el 14% del
montante de telfonos mviles de 2009.


Figura 1. Diagrama de sectores del mercado de la telefona mvil


Para saber cmo se ha hecho fuerte en el mercado iPhone, no hace falta
ms que ver la grfica en la cual se puede comprobar que este sistema operativo
domina prcticamente en el mercado ocenico llegando a tener un porcentaje
del 92%. El sistema operativo de Apple no slo domina el mercado en el
continente ocenico, sino que domina tambin domina en mercados tan
competitivos como el americano y europeo.

12

Especialmente relevantes son estos datos, pues iPhone OS slo se puede
implantar en los dispositivos que propiamente Apple proporciona, mientras
que otros sistemas operativos competidores pueden encontrarse en diferentes
terminales y de diferentes fabricantes a la vez.


Figura 2. Cuota de mercado de los diferentes competidores

Por otro lado, uno de los mayores competidores de iPhone, es Symbian
OS, el sistema operativo desarrollado principalmente por Nokia, es por el
contrario el lder indiscutible en el continente africano. En este continente
Symbian es el claro dominador del mercado con un 87%.

Del mismo modo, Symbian, es tambin el principal sistema operativo
escogido en el continente asitico con un 69% de la cuota de mercado. Symbian,
sigue teniendo un porcentaje significativo en mercados como el europeo o el
representado en el mercado suramericano. Tambin hay que destacar que este
sistema operativo no tiene representacin alguna en el mercado
norteamericano, donde es incapaz de hacer sombra al software de Apple. Otro
dato revelador, es que Symbian, es el sistema operativo elegido en al menos 5
de cada 10 telfonos mviles en cualquier tipo de mercado sin considerar el
mercado norteamericano o el de Europa del Este.

En cuanto al tercer sistema operativo sobre el cual se dirige gran parte de
la documentacin elaborada es Android. ste est posicionando en el mercado
norteamericano donde Apple es el dominador. Del mismo modo en Europa se
est intentando introducirse a pesar de que sus porcentajes no sean muy
significativos. Lo que s es realmente significativo, es el crecimiento que
Android, poco a poco, est adquiriendo. Respecto al ao 2008, en mercados
como el americano o el europeo, ha evolucionado desde un 1% que
representaba hasta llegar a un 16%.


13
Por ltimo, comentar que los sistemas operativos como BlackBerry Os y
Windows Mobile, slo tienen valores especialmente representativos en el
mercado americano, donde tienen unos porcentajes pequeos pero los
suficientes para ser considerados en un mercado en el cual el principal sistema
operativo reinante es el iPhone OS. La principal causa, puede ser que ambos
sistemas operativos, son tambin los representativos de un sector de
consumidores con perfil empresarial.



2.2.3 Comparativa de los diferentes SSOO

Antes de pasar a comentar cada uno de los sistemas operativos se realizar una
breve comparacin introductoria para conocer los aspectos bsicos de cada uno
de los sistemas operativos que se comentarn en el apartado siguiente y que se
pueden encontrar en diferentes dispositivos mviles.

El revolucionario en este mundo sin duda alguna fue Apple, que fue la
chispa que inici una gran batalla en un mercado en el cual la tarta estaba
repartida entre otros dos gigantes del sector, Windows Mobile y Symbian.

Windows Mobile, uno de los decanos en el mundo de la telefona mvil
ha logrado mantenerse con en el paso de los aos. A lo largo de los aos son
grandes las desventajas adquiridas frente a sus competidores, dichas
caractersticas negativas pueden ser su excesivo consumo de recursos, la
limitacin que presentan sus aplicaciones, sin embargo una de sus grandes
ventajas y por la cual destaca el sistema operativo de Windows es su gran
capacidad de integracin con la versin que corre en cualquier ordenador de
sobremesa.

En cuanto al abanderado de Nokia, Symbian, intenta mantener el
liderazgo que obtuvo en aos anteriores. Para volverlo a recuperar, la nueva
versin de su software hace hincapi en una pantalla de inicio completamente
personalizable mediante widgets.

Por otro lado, Apple, la sencillez de su uso y su interfaz, son sin duda
alguna las claves del iPhone OS, que resulta ser una especificacin del sistema
operativo MacOS para este tipo de dispositivos. Y todo ello a pesar de no ser un
software que soporte ser una plataforma multitarea, llegando a ser bastante
restrictivo en cuanto al uso del hardware.

El recin llegado a este mercado y que parece haberse hecho un hueco en l es,
Android, un sistema operativo de plataforma abierta basada en Linux. La fcil
integracin con las herramientas Web de Google, as como el uso moderado de
recursos hacen que sea una plataforma a tener en cuenta a largo plazo.

14
Otra plataforma que se mantiene en la lucha es BlackBerry, la cual se
presenta como una estructura cerrada en lo que a aplicaciones adicionales se
refiere, pero ofrece una amplia gama de herramientas multimedia y
empresariales.


A continuacin se va a mostrar una tabla comparativa con cada una de
las caractersticas ms importantes de las diferentes plataformas que se han
descrito en este apartado.















Conectividad
3G,GSM,WiFi 3G,GSM,WiF
CDMA
3G,GSM,WiFi,
CDMA
3G,GSM,WiFi
3G,GSM,WiFi,
GPRS
Creador
Nokia Microsoft RIM Apple Google
Disponibilidad
de aplicaciones

Alta

Alta

Mediana

Alta

Mediana
/Alta
Disponibilidad
de App Store

S

S

S

S

S
Dispositivos
compatibles

Smartphone /
telfono

PDA /
Smartphone

Smartphone

Smartphone

Smartphones
/netbook
Licencia
Privada Privada Privada Privada Abierta

Multitarea

S

S

S

S

S
Tctil/Multitctil

S

S

S

S

S
Tipo de ncleo
Symbian WindowsCE Propio iPhoneOS Linux

Tabla 1. Comparativa de los principales sistemas operativos para dispositivos mviles



En el apartado siguiente se va analizar con profundidad todas las
cualidades descritas, as como otras ms especficas de cada uno de los
sistemas operativos enunciados.








15
2.3 SSOO mviles

Actualmente se pueden encontrar diversos sistemas operativos destinados para
dispositivos mviles, a continuacin se describirn uno a uno las caractersticas
principales de cada uno de ellos, as como las posibilidades de poder programar
aplicaciones para dichos sistemas.

2.3.1 Symbian

Symbian es uno de los sistemas operativos para mviles ms extendido en el
mercado. Este software naci en parte gracias al desarrollo de Psion, que junto a
fabricantes de este tipo de terminales como son Nokia, Ericsson y Motorola
formaron este joint venture en el ao 1998. Aunque en la actualidad la mayora
de los activos pertenecen a Nokia.

En 2008, y ante la aparicin de iPhone y Android en este mercado, la
compaa finlandesa decidi liberar el cdigo, mediante licencias Eclipse, y unir
las diferentes personalizaciones que haban surgido de Symbian.


Symbian empez con su primera release en el ao 1998 y estaba basado
en el sistema EPOC hasta la actualidad cuya ltima versin lanzada que
corresponde a la 9.5 en Marzo de 2007.



Figura 3. Dispositivo con sistema operativo Symbian




16
La estructura del sistema operativo Symbian consiste en :

Symbian tiene un microkernel, en realidad un nanokernel de tiempo real
que permite que existe slo lo imprescindible proporcionando de este
modo mayor robustez, disponibilidad y capacidad de respuesta. Este
microkernel est formado por un planificador, un gestor de memoria y
controladores de dispositivos.

La capa base de servicios, es el nivel ms bajo al que pueden llegar todas las
operaciones desde el lado del usuario y en esta capa se incluyen el
sistema de archivos, un sistema gestor de BBDD, biblioteca del usuario,
as como un gestor de todos los plugins y servicios criptogrficos.
El sistema de archivos escogido en Symbian y que vino predeterminado
por EPOC es el sistema FAT, lo cual ha permitido una compatibilidad
con otro tipo de dispositivos.

En la capa de servicios del SSOO, se incluyen todos los servicios genricos
del SSOO al mismo modo que tambin se incluyen servicios de
comunicaciones y conectividad, y de servicios multimedia y grficos.

Por ltimo, destaca la capa de interfaz de usuario. Puesto que en funcin de
esta ltima capa se forman las distintas ediciones de Symbian. Dichas
ediciones dependen de las diferentes interfaces, las cuales son las
siguientes:

- Serie 60: Es una de las series ms utilizadas en smartphones debido
principalmente a que su mayor divulgador ha sido Nokia aunque
tambin lo utilizan fabricantes como Siemens, Samsung y Panasonic.
Esta serie incluye diferentes versiones de Symbian debidas
principalmente a la generacin de los terminales, as podemos
encontrarnos para telfonos mviles de primera generacin, los
cuales se comercializaron con una versin 6.1 del software
destacando por ejemplo al Nokia N-gage o al Siemens SX1. Pasando
por versiones desde la 7.0 a la 8.1 para mviles de segunda
generacin hasta llegar a los terminales de tercera, cuarta y quinta
generacin que incluyen versiones desde la 9.1 en adelante.


Figura 4. Dispositivo N-gage

17

- Serie 80: Esta edicin va especialmente orientada a dispositivos que
disponen de pantalla tctil y funcionalidades multitarea, es decir,
tener corriendo varias aplicaciones simultneamente. Para este tipo
de interfaz, utilizan versiones 6 y 7 de Symbian para mviles de
primera y segunda generacin.


- Serie 90: Esta versin slo ha sido comercializada en el Nokia 7710,
realmente es similar a la serie anterior.


- Serie UIQ: Fue desarrollado por los creadores de Symbian para su
uso en mviles de la marca Motorola y Sony Ericsson. La principal
caracterstica de esta serie, es que implementan una especie de
multitarea virtual, dando la sensacin de poder realizar varias
acciones simultneas pero a la postre elevan el tiempo de respuesta.
Las versiones utilizadas principalmente para este tipo de terminales
son la 7.0 y 9.x.


- MOAP: Para este tipo de interfaz cuyo desarrollo ha sido promovido
por el consorcio FOMA, el mayor inconveniente es que su
divulgacin slo se ha realizado por Japn.

Las ventajas que ofrece Symbian, es la capacidad que tiene el sistema
para adaptar e integrar todo tipo de aplicaciones que pueden ser programadas
por diferentes desarrolladores. Tambin hay que tener en cuenta que dichas
comodidades que Symbian proporciona se deben en buena medida a la
estandarizacin de los protocolos, las interfaces y la gestin de los servicios de
la integracin de sus aplicaciones. Adems de tener en cuenta como referencia a
la hora de desarrollar dicho sistema bases tan importantes como proporcionar
la energa, memoria y gestin de entrada y salida de los recursos requeridos
especficamente.

En cuanto a la hora de desarrollar aplicaciones, Symbian permite utilizar
lenguajes de alto nivel como bien pueden ser Java, C++, Visual Basic o Perl. Por
otro lado para el desarrollo de terceras partes, se proporcionan todo tipo de
herramientas como SDKs para desarrollar aplicaciones para este tipo de
sistema operativo, el inconveniente en este punto es que existen entornos de
desarrollo y APIs diferentes en funcin de la interfaz sobre la cual se va a
implementar la aplicacin a realizar. Al mismo tiempo que la firma del software
generado.



18
2.3.2 Windows Mobile

Windows Mobile es el sistema operativo destinado a satisfacer las necesidades
de los usuarios de dispositivos mviles; es uno de los sistemas operativos para
mviles ms veterano que camina por la versin 6.5. Su origen se remonta a las
agendas electrnicas denominadas Pocket PC, aunque luego se adapt ante la
mejora de prestaciones de los telfonos. Su diseo proviene de Microsoft y
representa la evolucin de la primera plataforma conocida que fue Windows
CE.

Con el desarrollo de este sistema operativo, Microsoft busca un sistema
operativo mvil capaz de asegurar flexibilidad, productividad y usabilidad.
Estos tres objetivos se alcanzan hacindolo semejante en cuanto a interfaz se
refiere, a un Windows normal y corriente que se ejecuta en cualquier PC, pero
el diseo de este caso en particular, se ha llevado a cabo teniendo en cuenta las
necesidades del terminal. De tal forma, que los sistemas desarrollados, suelen
ser modulares para facilitar al fabricante el acoplamiento de dicho sistema a las
necesidades del hardware de su dispositivo. Esto se debe en cierta parte al
complejo sistema de gestin de procesos e hilos de ejecucin, con el cual se
puede ofrecer un tiempo de respuesta que lo convierte en un sistema de tiempo
real duro, haciendo satisfacer de esta manera las necesidades de las aplicaciones
ms exigentes.


Figura 5.Dispositivos con Windows Mobile

Otro punto importante de Windows Mobile es su compatibilidad con los
estndares de correo electrnico. Esto supone una mayor facilidad de
adaptacin de las aplicaciones y familiarizacin por parte del usuario con ellas.
Microsoft dispone de versiones de Office, Outlook, Internet Explorer o
Windows Media Player para esta plataforma. Adems en el campo de la
ofimtica, tambin ofrece una compatibilidad de esta plataforma con la suite
Office, permitiendo de esta manera poder acceder a la visualizacin o edicin
de archivos Word, Excel y Power Point que se han elaborado en el PC y
favoreciendo de esta manera la continuidad del trabajo fuera de la oficina.

19


Esta integracin y compatibilidad permite a los usuarios disfrutar de una
experiencia igual o al menos similar a la que estn habitualmente
acostumbrados en su PC.


La estructura bsica de este tipo de sistema operativo, es la siguiente:

OEM Layer: Esta es la capa situada en el ms bajo nivel, de modo que se
sita entre el hardware del dispositivo mvil y entre el kernel del sistema
operativo. Y su funcionalidad bsica es la permisividad que proporciona
a los fabricantes para as poder desarrollar sus propios drivers y
controlar los diferentes recursos del hardware.

Operating System Layer: En esta capa es donde se sita el kernel del
sistema operativo y donde tambin residen todas las bibliotecas de
comunicaciones, el gestor grfico, y el gestor de ficheros y registros.

Application Layer: Es la ltima capa y es sobre la cual se despliegan
todas las aplicaciones de los usuarios al igual que las aplicaciones que
vienen por defecto en el sistema operativo.


Para poder desarrollar aplicaciones en Windows Mobile es necesario
descargarse las SDKs proporcionadas o para smartphones o para PocketPC, la
diferencia entre ambos es que Microsoft considera a un Smartphone como de
un Pocket PC (phone edition ) pero ms pequeo y sin Office Mobile. Para
instalar las herramientas de desarrollo se han de cumplir una serie de requisitos
software necesarios, principalmente se resume a que es necesario disponer del
IDE de desarrollo de Microsoft, es decir, de Visual Studio. Dicha restriccin
supone un serio inconveniente ya que para poder desarrollar es necesario tener
software de pago.

Existen dos formas de poder desarrollar aplicaciones en este sistema
operativo: la primera es crear aplicaciones en cdigo nativo, es decir, cdigo
C++ , de manera que se pueden utilizar las APIs de Windows Mobile, y a la
vez permite que el cdigo sea mucho ms rpido que de la otra. La segunda
forma de poder desarrollar aplicaciones en Windows Mobile, es la de poder
programar aplicaciones en cdigo administrado, utilizando de esta manera las
clases de .NET Compact Framework.

Aunque las aplicaciones sean ms extensas, son ms sencillas de
programar pero de esta manera no se permite el acceso a algunas caractersticas
del hardware que slo pueden accederse desde el cdigo nativo.


20
En sntesis, es muchsimo ms sencillo programar desde el Compact
Framework, puesto que el tamao que ocupe una aplicacin no es tan
importante como la rapidez , y cmo pueden existir partes crticas del cdigo
que pueden desarrollarse slo en cdigo nativo, por tanto aquellas partes
difciles se dejan en cdigo nativo y el resto desde el administrado. Este sistema
operativo se puede encontrar en marcas como HTC, Samsung, LG o Sony
Ericsson.

2.3.3 iPhone

En Junio de 2007, Apple lanz su ansiado telfono. Acostumbrados a
revolucionar los diferentes mbitos en los mercados en los que participa este
ente. El iPhone prometa cambiar el panorama en cuanto a los dispositivos
mviles y ha conseguido una importante penetracin en el mercado.


Figura 6. iPhone

El telfono inteligente de Apple ha sido revolucionario principalmente
porque incorpora un completo sistema operativo. El iPhone OS, nombre del
sistema operativo del iPhone, del iPod Touch y del reciente iPad, ha concitado
mucha atencin gracias a su sistema patentado de manejo mediante una
pantalla multitctil que no requiere de ningn lpiz ptico. La usabilidad y su
atractivo diseo se contraponen a carencias como que no reproduzca vdeos en
flash (excepto si se libera e instala alguna aplicacin especfica), la
imposibilidad de que las aplicaciones trabajen en un segundo plano simultneo,
a diferencia de lo que ocurre en las dems plataformas, y a configuraciones ms
restrictivas, que restan libertad al usuario. Resulta apropiado para disfrutar del
ocio multimedia: escuchar msica, ver vdeos o jugar a videojuegos, entre otras
distracciones ya que cuenta con programas adaptados como su propio browser,
es decir, Safari, el reproductor iTunes y multitud de aplicaciones ms, por tanto,
es normal que destaque el xito de su tienda de aplicaciones entre empresas,
programadores y usuarios. Sin embargo, en entornos profesionales se revela
como poco eficiente, debido a que su pantalla tctil no resulta cmoda para
escribir mensajes, correos electrnicos o para editar archivos de texto.


21
Principalmente, el kernel es un aspecto importante en todo sistema
operativo, pero lo que realmente aprecia el usuario, es la interfaz. De este modo,
iPhone ha marcado estilo con sus iconos y su fcil acceso a las aplicaciones,
adems de la mencionada pantalla tctil que no necesita utilizar ningn
puntero o lapicero, al mismo tiempo que en sus ltimas versiones permite
personalizar la interfaz. Tcnicamente el iPhone OS deriva del Mac OS X,
concretamente basado en una variante del March Kernel que se encuentra en
todo dispositivo Mac. Y que al igual que sus hermanos mayores, este sistema
operativo mantiene su estructura en cuatro capas. La primera y situada en el
nivel ms bajo, est la capa del ncleo del sistema operativo, sobre sta se
coloca una capa de servicios principales, y por ltimo las capas de medios de
comunicacin y la capa de Cocoa Touch. De estas cuatro capas nombradas, hay
que resaltar que las tres primeras son un fiel reflejo de lo que se puede
encontrar en cualquier Mac OSX, sin embargo es en la ltima capa, en la Cocoa
donde se encuentran las diferencias significativas puesto que se ha tenido que
adaptar a los requerimientos de una pantalla tctil.


A continuacin se va a comentar detalladamente cada una de las capas que
lo conforma:



Figura 7. Estructura iPhone OS


Capa de ncleo de sistema operativo o Core OS: Es la primera capa del
sistema operativo, y es donde residen los pilares bsicos de ste. La
importancia de esta capa se debe a que es donde reside el kernel OSX, as
como todo el sistema de bibliotecas como de archivos, y toda la gestin
de energa, seguridad, certificados y sockets.


22

Capa de servicios principales o Core Services: La capa de servicios
principales, est situada por encima de la capa de ncleo y en ella se
encuentran los servicios bsicos del sistema. Servicios como son el acceso
a archivos, colecciones, redes (acceso a wifi y 3G), hilos (Posix),
preferencias del sistema, y acceso a base de datos (sqlite).

Capa de medios de comunicacin o Media: Por encima de la capa de los
servicios principales del iPhone OSX reside la capa de servicios de
comunicacin sobre la cual se otorga toda la responsabilidad de la
gestin multimedia, bien sean grficos, audio, videos, etc En sta
residen todo tipo de manejadores de audio, reproductores de vdeo,
manejadores de archivos fotogrficos o documentos, etc Tambin
maneja las bibliotecas necesarias para dibujar 2D y 3D. Adems incluye
lo necesario para poder programar en C con soporte a tecnologas como
openGL-ES, Quartz y CoreAudio.

En ltimo lugar se sita la capa Cocoa Touch: Es en esta ltima capa
donde se fija el framework de desarrollo tanto para iPhone, iTouch o
iPad. Desde esta capa se puede acceder a la interfaz proveyendo una
biblioteca para el manejo de ventanas, cuadros de dilogo, vistas y
diversos controladores multi touch. Tambin se pueden acceder a las
fotos, los contactos, el acelermetro,

Vista la estructura del sistema operativo del iPhone, existe otra
caracterstica existe en estos dispositivos, y es que tanto el iPhone como los
iTouch o iPad utilizan procesadores ARM en contraposicin a los x86 que se
utilizan en las versiones de sistemas operativos destinadas para PCs. Este
hecho desemboca en que cualquier aplicacin probada y ejecutada en cualquier
Mac OSX no se puede ejecutar en iPhone OS. Entonces, toda aquella aplicacin
que se desee que funcione dentro de un iPhone o similares, tiene que haber sido
compilada y escrita para la disposicin ARM y hipen OS.

Al igual que una aplicacin debe ser creada para una arquitectura
especfica, otra desventaja que muestra iPhone OS, es que no se permite ms de
una aplicacin ejecutndose a la vez, y las aplicaciones de terceros no se pueden
ejecutar en segundo plano. De esta forma, Apple se evita toda serie de
complicaciones y problemas relacionados principalmente con la batera, todo
ello a cambio de que los programadores vuelvan a los tiempos de la multitarea
cooperativa. Tambin se debe garantizar el buen funcionamiento de la
aplicacin cuando otra aplicacin reemplace su lugar y que tampoco se queden
a la espera de algn evento por un tiempo indefinido. Aunque en la ltima
versin de iPhone (4.0) dicho problema se solventa y permite la multitarea.




23

La nica manera de instalar legalmente un programa en iPhone es a
travs de la AppStore. El desarrollador enva la aplicacin finalizada a Apple,
quien decide si la publica o no, basndose en criterios propios.

El xito de la plataforma est en que la demanda del consumidor obliga a
los desarrolladores a seguir trabajando sobre el iPhone, impidiendo Apple la
competencia sobre su propio software. En este sentido, iPhone es el nuevo
paradigma de la plataforma cerrada, ya que en el ltimo momento es Apple el
que decide que se puede instalar sobre su plataforma, realizando un control
exhaustivo sobre qu se puede desarrollar, quin puede distribuir las
aplicaciones y qu puede hacer el usuario con el dispositivo mvil.

Como se ha comentado antes, el desarrollo de aplicaciones para el iPhone
no es de fcil acceso debido a las polticas establecidas por Apple, que en cierta
manera son restrictivas o arancelarias, dificultando la propagacin entre
desarrolladores y no proporcionado APIs tan consolidadas como pueden hacer
otros sistemas operativos.

Para concluir con este sistema operativo se va a explicar los diversos
pasos que se deben realizar para poder desarrollar una aplicacin para iPhone y
las facilidades o trabas que se pueden encontrar para poder realizar
aplicaciones para este entorno.


1) Inscribirse en el iPhoneDevCenter: este es el portal de Apple donde se da de
alta para poder desarrollar aplicaciones para iPhone, aqu, en este website se
puede descargar la SDK y diversa documentacin para poder programar en
este entorno. Realizado este primer paso, se puede empezar a desarrollar
aplicaciones, compilarlas, probarlas en el simulador pero no se pueden instalar
en el iPhone.


2) Registrarte en el programa de desarrollo de iPhone (iPhone Developer
Program): tras registrarse y tras abonar una cantidad prxima a los 100 dlares
se obtiene el derecho a ejecutar la aplicacin que se haya elaborado en el propio
iPhone.


3) Obtener certificados: como por defecto slo se pueden ejecutar aplicaciones
firmadas por Apple, y como cada vez que se hagan modificaciones en el cdigo
programado, no se lo est enviando constantemente los programadores para
poder probarlo. Se crea un perfil con el identificador del telfono, y adems se
debe obtener otro certificado para poder firmar las aplicaciones.


24

4) Xcode: en este paso, si todos los anteriores han ido bien, ya podemos
desarrollar aplicaciones con el IDE que proporciona Apple (Xcode).
Anteriormente, Apple tena prohibido a los desarrolladores de aplicaciones
hablar sobre su SDK, aunque en la actualidad se ha elevado el nivel de
permisividad y se puede comentar entorno a aplicaciones e intercambiar
cdigo.

Y si por ltimo se desea que la aplicacin sea distribuida para el resto de
usuarios del iPhone, se debe de obtener otra certificacin y esperar la
verificacin por parte de Apple y una vez que la aplicacin sea aprobada,
esperar a que los usuarios quieran utilizar la aplicacin desarrollada.

2.3.4 Blackberry

BlackBerry es el sistema operativo de los mviles del mismo nombre fabricados
por RIM. Gran parte de sus modelos se han concebido para uso empresarial y
para exprimir su teclado completo, aunque el software tambin soporta en la
actualidad las pantallas tctiles La BlackBerry es una seria oportunidad de unir
el mundo de los negocios con las necesidades personales.

Si bien BlackBerry no aporta una interfaz bonita, su sistema operativo
sigue siendo el tradicional BlackBerry OS desarrollado por RIM. Un sistema con
interesantes cualidades multitarea, que el sistema operativo hace sello de
identidad de l mismo, puesto que se puede ejecutar aplicaciones de mensajera
instantnea de fondo, mientras navegamos por Internet o redactamos un correo
electrnico.


Figura 8. Dispositivo BlackBerry

La capacidad de trabajar en entornos multitarea con eficiencia es algo
que se valora bastante al realizar la eleccin sobre qu tipo de terminal mvil a
utilizar, y muchos usuarios demandan la productividad que se consigue al
utilizar varias aplicaciones al mismo tiempo.


25
Con BlackBerry, no solo conseguimos una productividad efectiva, sino
que el sistema se vuelve ms dinmico al realizar notificaciones y operaciones
en tiempo real mientras realizamos otras tareas. Tambin ofrece amplias
garantas a las demandas de que los sistemas operativos ofrecieran servicios de
correo electrnico, amn de que fuera fcil de usar y rpido. Estas demandas se
ven satisfechas puesto que hoy das RIM aparte de ser el encargado de construir
y desarrollar el BlackBerry OS, es una empresa que ofrece un amplio abanico de
dispositivos y es tambin proveedor de servicios de correo electrnico a
dispositivos que no son BlackBerry como pueden ser Symbian, Windows
Mobile o Palm, gracias al programa BlackBerry Connect.



Figura 9. Logotipo empresa RIM

En cierta manera, BlackBerry fue el pionero en el campo de introducir
servicios de correo electrnico mediante la tecnologa push la cual permite a los
usuarios poder seguir conectados al correo electrnico y a muchas aplicaciones
corporativas. Dicha tecnologa consiste principalmente en que los mensajes se
reciben constantemente, sin necesidad de que el usuario tenga que realizar una
conexin y comenzar a descargarlos. As, en un dispositivo BlackBerry es
posible redactar, enviar y recibir todo tipo de mensajes de correo electrnico, al
igual que en un PC cualquiera. Destaca por la forma en que integra el correo
electrnico y enva los mensajes segn se reciben, un servicio que requiere de
una tarifa plana de datos para disfrutarlo con comodidad. El sistema operativo
deja que funcionen varias aplicaciones al mismo tiempo.

Las desventajas que puede ofrecer el sistema operativo de BlackBerry se
pueden encontrar que su navegador se caracteriza por ser ms lento que el de
sus rivales y no tiene tanta variedad de software de terceros disponible como
los dems, y de que no ofrece conectividad va wifi pero s dispone de las
aplicaciones ofimticas principales lo cual lo hacer ser la mejor eleccin y ms
competitivo para entornos laborales.




26
La estructura en s del sistema operativo de BlackBerry, es propio de la
empresa canadiense RIM (Research In Motion) y como bien se ha comentado
anteriormente en un ejemplo claro de icono de los entornos de oficina.


Aunque la estructura de este sistema operativo no ste divulgado, ya que
ste es propio y cerrado, la base del kernel de BlackBerry es AMX, y la gran
parte del sistema operativo est desarrollado bajo los estndares de Java,
concretamente Java ME. De lo que se puede extraer de la informacin que
puede ser accesible desde la web para saber ms o menos sobre cmo es este
sistema operativo se puede tener constancia que la configuracin utilizada por
BlackBerry, es decir, el conjunto de clases bsicas destinadas a conformar el
corazn de la aplicacin es CLDC (Connected Limited Device Configuration).
Este tipo de configuracin va enfocada a todos aquellos dispositivos que tengan
toda clase de restricciones de procesamiento y memoria. Sabiendo la
configuracin escogida, se puede saber la mquina virtual utilizada, que es la
CVM (Compact Virtual Machine). Dicha mquina virtual, tiene las mismas
caractersticas que la JVM que se utiliza normalmente para JSE, sin embargo la
CVM est orientada para dispositivos electrnicos con procesadores de 32 bits
de alta gama y con 2Mb de RAM.


A la hora de programar o poder desarrollar aplicaciones para BlackBerry,
hay que tener en cuenta que la plataforma utilizada es Java ME y que la
funcionalidad de la mayora de las aplicaciones van destinadas u orientadas
hacia entornos corporativos o empresariales.


Es conveniente saber que existe un entorno para poder crear todo tipo de
programas empresariales bajo la herramienta BlackBerry MDS Studio, desde la
cual se pueden crear interfaces de usuario con la tcnica drag and drop para
as poder acceder a datos empresariales va webservice. Tambin desde
Blackberry se proporciona gratuitamente una JDE, concretamente el BlackBerry
Java Development Enviroment, desde este IDE se proporciona el acceso a las
APIs de Java ME como a las propias de BlackBerry, adems de incluir diversos
simuladores de este tipo de dispositivos desde donde se puede probar el cdigo
desarrollado. El nico inconveniente a la hora de desarrollar para BlackBerry, es
que se debe de estar registrado para poder programar y que el cdigo que se
quiere desplegar dentro de un terminal de este tipo tiene que estar previamente
firmado por RIM.





27
2.3.5 Android

Y en ltimo lugar Android. Antes de hablar sobre este sistema operativo,
aclarar previamente que su estructura as como la posibilidad de desarrollar
programas bajo este entorno, se van a explicar detalladamente en apartados
posteriores, realizando de esta manera en este punto una breve introduccin a
este nuevo sistema operativo.

Android es un sistema operativo que impuls Google y ahora promueve
la Open Handset Alliance (con fabricantes como HTC, Samsung, LG o Motorola
adems de la propia Google). Ha sido uno de los ltimos en llegar a este
segmento, pero ha irrumpido con fuerza en varios terminales avanzados, como
los de HTC. Constituye una pila de software pensada para telfonos mviles y
que incluye tanto un sistema operativo, un middleware y diversas aplicaciones
de usuario.


Las aplicaciones de Android se programan en lenguaje Java y son
ejecutadas en una mquina virtual diseada a medida para este sistema. Cuenta
con el aval de la compaa Google. En el aspecto tcnico destaca su creacin a
partir del kernel Linux(2.6) y dispone de una licencia libre Apache. Desde el
punto de vista de un desarrollador, Android, proporciona de forma gratuita
una SDK y un plug-in para el entorno de desarrollo Eclipse, as como un
emulador integrado para su ejecucin.


Figura 10. Android

En sntesis, la visin que se intenta tener de Android, es la de una misma
plataforma que rene todos los elementos que permitan desarrollar, controlar y
aprovechar las funcionalidades que ofrecen los dispositivos mviles. Del mismo
modo que tambin se busca que todas las aplicaciones sean portables,
reutilizables y fciles de desarrollar. Slo recordar que en apartados venideros
se hablar con mayor pausa y detenimiento sobre las caractersticas tcnicas que
Android ofrece, as como de las facilidades que se ofrecen para poder
desarrollar aplicaciones en el sistema operativo de Google.


28
Captulo 3 El sistema Operativo Android

3.1 Introduccin

Android es una pila de software de cdigo abierto que incluye un sistema
operativo, middleware, y aplicaciones clave con una series de libreras API para
poder desarrollar aplicaciones en terminales mviles a las cuales se las pueden
dar la forma y el funcionamiento especfico para que pueda funcionar en
telfonos mviles.

Hasta hace poco, poder desarrollar aplicaciones para telfonos mviles
era dificilsimo porque se programaban bajo sistemas operativos propios y en
entornos de desarrollo cerrados, a los cuales era imposible acceder. As mismo,
los propios terminales priorizaban las aplicaciones nativas, hacindolas
prevalecer frente a aplicaciones que se hayan desarrollado por terceras partes.
Esto supona una barrera infranqueable para los desarrolladores de este tipo de
aplicaciones.

En Android las aplicaciones tanto nativas como las desarrolladas por
terceras partes son escritas usando la misma API y ejecutadas en las mismas
condiciones. Es por ello que en Android todas las aplicaciones son iguales sin
hacer ninguna distincin ni discriminacin.


Figura 11. Icono de Android

Histricamente, los desarrolladores codificaban sus aplicaciones en
lenguajes de bajo nivel, para lo que era necesario entender el hardware
especfico sobre el que iban a trabajar, y generalmente solan ser un dispositivo
sencillo o un rango de dispositivos provenientes del mismo fabricante.

En la actualidad, los avances realizados en el desarrollo de aplicaciones
para terminales mviles, han hecho que se pueda programar con un nivel de
abstraccin para que el programador se asle de la capa hardware y no estar
pendiente de ella.


29
Entre las caractersticas del sistema operativo Android destacamos:

Todas sus aplicaciones se programan en lenguaje Java y son ejecutadas
en una mquina virtual especfica diseada para esta plataforma.


Todo su software se ha realizado bajo una licencia Apache, de modo que
el cdigo es de libre distribucin. Tambin una de las causas
primordiales por las cuales se ha escogido una licencia Apache, es
porque este tipo de licencia permite que se realicen modificaciones sobre
el software inicial y una vez que se realicen los oportunos cambios, no
exige que el software alterado se distribuya como software libre. Permite
a las operadoras modificar a su gusto la plataforma, aadir nuevas
funcionalidades y no tener que compartir el cdigo ni permitir su uso a
terceros. As, de este modo, se puede entender como algunos operadores
y fabricantes hayan visto con buenos ojos esta iniciativa y es por ello que
se hayan sumado a Android. La principal causa de esta adhesin es que
dichas compaas podrn modificar el cdigo y desarrollar todo tipo de
aplicaciones o trabajos sin la necesidad de verse obligados a compartir
todo la elaboracin producida. De todas formas, la licencia Apache
propuesta por Android, permite que cualquier persona se pueda
descargar, acceder al cdigo fuente, modificarlo y redistribuirlo pero con
el ligero inconveniente que a cualquier persona se le exime de este
ltimo punto.


A cualquier desarrollador que se plantee programar sobre esta
plataforma, se le proporciona de forma totalmente gratuita un entorno
de desarrollo, es decir una SDK que se puede instalar junto con un plug-
in en uno de los IDEs ms famosos y conocidos como es Eclipse.
Adems se integra un emulador en el cual se pueden realizar todo tipo
de pruebas sobre el programa elaborado y s stas han salido
satisfactorias se puede importar el proyecto elaborado al propio
dispositivo mvil.


La principal finalidad que busca Android desde el punto de vista del
desarrollador, es que ste pueda sacar de s lo mayor posible de la plataforma,
poder controlar y aprovechar cualquier funcionalidad que se proporcione desde
el sistema operativo, y que toda aplicacin que se pueda crear sea portable, fcil
de desarrollar y reutilizable. Con todo ello, se intenta buscar un estndar para el
desarrollo de este tipo de aplicaciones. Por ltimo, cabe destacar la gran
facilidad que desde Android se ofrece para poder integrar todo tipo de
aplicacin con las aplicaciones Web de Google.


30
3.2 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.


Figura 12.Estructura del sistema operativo Android

La estructura del sistema operativo es la siguiente:

El ncleo de Linux: es la capa ms baja situada y es donde se sitan los
servicios bsicos, es decir, en esta capa se establecen los drivers del
hardware, la gestin de procesos y memoria, la seguridad, y las gestiones
de redes y de energa. Todo ello est manejado por un kernel de Linux
con versin 2.6, y cuya funcin principal es abstraer a las diferentes
capas sucesivas que soporta la estructura de Android del hardware de la
mquina.

Aparte de las propiedades que puede dar dicho kernel de Linux, tambin
hay que decir que precisamente dicho ncleo, incluye diversos drivers lo
cual le hace semejante a cualquier otro kernel que corre en un ordenador
personal. Por otro lado, este kernel, al ser Linux cumple con las
expectativas con las que Android se lanzar bajo licencia Apache.


31

Figura 13.Icono 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.



32
La siguiente capa, y que se sita en el mismo nivel que la anterior, es el
entorno de ejecucin de Android, o la Android Run Time. Android
incluye un set de libreras base que proveen la mayor parte de las
funcionalidades disponibles en 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.


La penltima capa dentro de la estructura del sistema operativo Android
es la del Framework de Aplicaciones. A partir de aqu, las ltimas capas
de la plataforma, se sustentan sobre Java. En esta capa se proporcionan
todas las clases necesarias para poder crear aplicaciones en Android. Del
mismo modo, este framework proporciona un nivel de abstraccin del
acceso al hardware y la gestin de la interfaz del usuario y de los
recursos de la aplicacin. Los desarrolladores tienen acceso a las mismas
APIs que las aplicaciones base, con el nico objetivo de poder reutilizar
los componentes utilizados para la aplicacin realizada.

En cuanto a las APIs ms conocidas son las siguientes:

o Administrador de Telfono: destinada para que el desarrollador
pueda interactuar con las funcionalidades del telfono, como son
los mensajes SMS, llamadas,

o Proveedor de Contenidos: con esta API, se pueden compartir los
datos de cualquier aplicacin.


33
o Administrador de Ubicaciones: permite que las aplicaciones
obtengan informacin sobre la localizacin y posicionamiento de
sta.

o Administrador de Actividad: es la API encargada de gestionar el
ciclo de vida de las aplicaciones.

o Administrador de Ventanas: con ella se pasan a gestionar las
ventanas de las aplicaciones.

o Vista del Sistema: es con la cual se realiza toda la interfaz de
usuario.


La capa de Aplicaciones es la ltima capa del software, en la que se
encuentran tanto las aplicaciones nativas provistas por Android como las
desarrolladas por terceras partes. Todas ellas, han sido construidas en
esta capa y utilizando las mismas APIs y bajo el mismo lenguaje de
programacin, Java.




























34
3.3 Estructura de 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 a la postre 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.

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.


35

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 estancia, es el sistema el
que finalmente decide que k 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.






















36
3.4 Ciclo de vida de una aplicacin en Android

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.

A la hora de ejecutar una aplicacin en Android, sta se lleva a cabo en
su propio proceso, de tal modo que Android es el encargado de gestionar todas
las aplicaciones, arrancarlas o pararlas en funcin de los recursos que la
aplicacin necesite.

Android asla totalmente al usuario del dispositivo de la labor que el
sistema operativo est realizando para poder ejecutar la aplicacin que el
poseedor del telfono desee. Android ejecutar tantos procesos en funcin de
los recursos que tenga disponibles, los cuales pueden estar a la vez formados
por ms de una actividad (Activity).

A diferencia de otros entornos, las aplicaciones en Android, no tienen el
control sobre su propio ciclo de vida. En cambio, los componentes de los que
est formada dicha aplicacin estn al tanto de los cambios de estado que sta
pueda generar. De modo que durante la ejecucin puede suceder que una
actividad pare mientras otra sea lanzada, de tal manera que el proceso es
consciente del estado en cual se ha quedado para que en un futuro vuelva a
dicho estado cuando el sistema le conceda el mando.

El caso ms conocido de ciclo de vida, es el del componente Activity,
cuyo diagrama es el siguiente:


Figura 14.Ciclo de vida componente Activity

37

Como se puede observar en la figura anterior, los diferentes estados que
conforman el ciclo de vida de una actividad son los siguientes:

onCreate: Es el estado en el cual da comienzo el ciclo de vida de la
aplicacin.

onDestroy: Estado en el que se da por finalizado el ciclo de vida.

onStart: Junto con el estado onStop forman el conjunto de estados en los
cuales se maneja la actividad desde su comienzo.

onStop: Es el estado en el cual permanece la actividad cuando sta no
tiene el mando para realizar sus procesos. Es similar al estado onPause.

onPause: Similar al estado anteriormente descrito. La actividad
permanece en este estado cuando sta no recibe el foco de atencin por
parte del sistema.

onResume: Al igual que el estado onPause, ambos estados acotan el ciclo
de vida de la actividad en funcin del foco de atencin dispensado a la
aplicacin.

3.4.1 Prioridad de procesos

Una vez visto el ciclo de vida de una aplicacin en Android, y concretamente
cuando una aplicacin se crea, su flujo concluye cuando sta finalice o cuando
otra actividad necesite los recursos que la aplicacin est consumiendo.

La preferencia por parte de Android a la hora de priorizar determinadas
aplicaciones en funcin de otras se debe en gran parte al tipo de componente
que lo forma, ya que la importancia de stos una aplicacin puede ser ms
prioritaria respecto de otra. A la hora de programar una aplicacin hay que
tener en cuenta la prioridad a la cual se la va a asignar puesto que en funcin de
la prioridad la aplicacin puede morir durante un proceso de ejecucin
importante.

La importancia en cuanto a procesos se refiere es la siguiente, de mayor a
menor prioridad:

1. Procesos activos. Son los procesos cuya importancia es crtica. Son aquellos
que estn albergados en aplicaciones que estn continuamente
estableciendo contacto con el usuario, y que generalmente son liquidados
en ltima estancia.


38
Este tipo de prioridad corresponde a:

Activities que se encuentran en un estado activo y que estn
respondiendo continuamente a eventos del usuario.

Activities, Services o Broadcast Recivers, que se estn ejecutando cuando
reciben un evento.

Componentes Services que se ejecutan tras un evento proveniente de
una aplicacin que se crea, comienza o se destruye.

2. Procesos visibles. Como su propio nombre indica, son componentes de
tipo Activity que son visibles pero no estn al mando. En extraos casos
son matadas.

3. Procesos de servicio. Son aquellas aplicaciones cuyo principal componente
de aplicacin es un Service, y tienen menor prioridad que un Activity, en
gran parte a que este tipo de procesos no estn continuamente
interactuando con el usuario y a que son consideradas actividades que
transcurren en un segundo plano.

Este tipo de procesos no son matados a menos que sean necesarios los
recursos de los que dispone.

4. Procesos de segundo plano. A diferencia de los anteriores, son procesos que
corren en un segundo plano y que no disponen de ningn servicio.

5. Procesos vacos. Son aquellos procesos que se mantienen en cache para un
posterior relanzamiento.


















39
3.5 Herramientas para el desarrollo

En este apartado se va a comentar las herramientas y los pasos necesarios para
poder desarrollar aplicaciones en Android.

Es necesario conocer el sistema operativo as como el procesador sobre el
cual se va a instalar el conjunto de herramientas necesarias. Este procedimiento
es importante porque a la hora de instalar la SDK de Android, existen una serie
de necesidades que no hay que pasar por alto. La SDK de Android es
totalmente compatible con los principales sistemas operativos que existen en el
mercado, es decir, Windows, Mac y Linux. Eso s, es necesario disponer de un
procesador de 32 bit. A continuacin es necesario disponer de una JDK,
preferiblemente 1.5 o 1.6 y disponer a su vez del IDE de desarrollo Java Eclipse,
necesariamente versin 3.4 o superior.

Procedimientos para instalar las herramientas.


3.5.1 Instalar SDK Android

Dentro de este apartado, se indicar como configurar dicha SDK dentro del
sistema operativo sobre el cual se instalar.

Bien, una vez que hemos cumplido los requisitos del apartado anterior,
nos dirigimos al website dedicado para Android:

http://developer.android.com/sdk/index.html

Y una vez all, nos descargamos la SDK en funcin de nuestro sistema
operativo, bien puede ser Windows, Mac o Linux. A continuacin,
descomprimimos el archivo en cuestin y teniendo en cuenta la ruta en la cual
se ha descomprimido dicho archivo.


El siguiente paso es configurar el path de la SDK como variable de
entorno. En el caso de que dispongamos de un sistema operativo Windows, es
sencillo puesto que pinchamos botn derecho sobre el icono de MiPC y nos
dirigimos a Propiedades->Variables de entorno->Variables del sistema


40

Figura 15. Configuracin de la variable del sistema

Y dentro de la opcin de Variables del sistema, nos fijamos en la variable
Path y la modificamos, introduciendo la ruta en la cual se encuentra la SDK de
Android descomprimida, teniendo en cuenta hasta la carpeta tools.


Figura 16. Configuracin de la SDK como Path del sistema

Si por el contrario disponemos de un sistema operativo Linux, slo hace
falta ejecutar en la lnea de comandos (en modo administrador) y editar el path
en el archivo ~/.bash_proile o ~/.bashrc y a continuacin:

Export PATH=${PATH}:<tu-sdk-dir>/tools

Concluido el proceso de instalacin de la SDK, se procede a la instalacin
del plugin necesario para Eclipse.





41
3.5.2 Instalar plugin en Eclipse

Ahora, el siguiente paso es iniciar Eclipse, para que de este modo podamos
incluir el plugin necesario de Android, y as incluir la herramienta ADT
(Android Development Tools) la cual permitir crear proyectos de Android,
debuggarlos y ejecutarlos.

Abierto el IDE Eclipse, en la pestaa Help->Install New Software y en la
ventana nueva que aparece, pulsar el botn Add.


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 el
botn Next.


Figura 17. Configuracin del plugin de Android en Eclipse I


Figura 18. Configuracin del repositorio ADT


42

Figura 19. Configuracin del plugin de Android en Eclipse II

Y a partir de ah comenzar a descargarse el software necesario para
comenzar a desarrollar aplicaciones.

Por ltimo Eclipse pedir que se reinicie, para poder configurar los
cambios realizados.

3.5.3 Completar la instalacin

Tras reiniciar Eclipse, los siguientes pasos a realizar son:

3.5.3.1 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.


Figura 20. Configuracin del path de la SDK de Android en Eclipse

Y en ltimo lugar pulsar Apply y Ok.


43
3.5.3.2 Configurar emulador AVD y actualizar plugin

Para finalizar la configuracin de la SDK en Eclipse, se proceder a la
descripcin de la configuracin del emulador y de las posteriores
actualizaciones necesarias.

A la hora de realizar ambas operaciones se debe pulsar sobre el icono:


Figura 21. Icono Plugin Android en Eclipse

Y a continuacin, sobre el campo Virtual Devices pulsar el botn New, y
aparecer la siguiente ventana.


Figura 22. Configuracin del emulador de Android

En la figura mostrada, es sobre la cual se crear el emulador Android
correspondiente, dnde el principal hincapi es en el campo target, puesto que
se le asigna la SDK correspondiente.

44

Para finalizar, sobre la primera ventana mostrada tras pulsar el icono
anteriormente descrito en la Figura 21, sobre el campo Available Packages, y
pulsando el checkbox y posteriormente el botn Install Selected. Comenzar un
proceso de actualizacin de la SDK.


Figura 23. Actualizador de versiones


3.5.4 Otras herramientas tiles

Como bien se ha podido apreciar en el apartado anterior la SDK de Android,
incluye diversas herramientas y utilidades que permiten al usuario poder crear,
testear y analizar las propias aplicaciones.

Otra herramienta que aporta la SDK es el emulador. El cual es una
propia mquina virtual destinada a ejecutar las aplicaciones de Android, es por
ello la manera ms cercana de poder conocer cmo sera un dispositivo mvil
con dicho sistema operativo. ste a su vez, dispone de una variedad de posibles
maneras de mostrarse como interfaz grfica, es decir, dispone de distintos
tamaos de pantalla, resoluciones. Adems de proveer de una buena conexin a
Internet, en cuanto a rapidez y latencia respecto a las aplicaciones, y de permitir
recibir llamadas y SMS, obviamente simulados. Como aadido a las
caractersticas anteriormente habladas, existe una funcionalidad que permite al
emulador de Android contactar y realizar operaciones mediante una conexin
Telnet. A travs del puerto 5554 se puede entablar todo tipo de rdenes con el
emulador.


Tambin existen otro tipo de funcionalidades no menos importantes pero
que merecen la pena describirlas.

45

3.5.4.1 Otras funcionalidades del emulador

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.

Imagen de runtime: a diferencia de las anteriores, stas permiten escribir
adems de la posibilidad de leer de la imagen correspondiente. Y
principalmente se utilizan para guardar datos de la sesin, como pueden
ser aplicaciones instaladas. Al igual que las imgenes que simulan
almacenamientos extrables.

Imagen temporal: la caracterstica principal de estas imgenes es que al
acabar la ejecucin, es decir, al apagar o cerrar el emulador, se eliminan
por completo. Y la utilidad que tienen, es para hacer las labores de cach
y para realizar una copia del sistema.


3.5.4.2 Dalvik Debug Monitor Service

Aparte del emulador, existen otras herramientas que facilitan la programacin
de cualquier aplicacin en Android. De estas herramientas cabe destacar la
Dalvik Debug Monitor Service o DDMS.

En primera instancia, el emulador, te permite ver qu aspecto presenta la
aplicacin, cmo se comporta y poder interactuar con la misma, pero realmente
no sabes lo que realmente est pasando dentro. De este modo, la DDMS es una
herramienta que permite debutar la aplicacin y conocer en todo momento
que est sucediendo dentro de los entresijos de la aplicacin que se est
ejecutando.

De esta manera, con esta herramienta, se tiene una versin fidedigna de
la ejecucin de la aplicacin, porque se pueden acceder a los log, conocer de
manera primordial la gestin de recursos, y la simulacin de envo de SMS as
como de llamadas entrantes y geolocalizacin.



46
Para poder acceder a esta herramienta basta con pulsar la pestaa
Window-> Open Perspectiva-> DDMS. Y aparecer una perspectiva similar a la
siguiente imagen.


Figura 24. Imagen DDMS

3.5.4.3 Android Debug Bridge

Para finalizar, la Android Debug Bridge o ADB, es una herramienta que
mediante una arquitectura cliente servidor permite conectarte desde tu
mquina al dispositivo Android.

Esta herramienta te permite copiar archivos, instalar aplicaciones o
ejecutar comandos para acceder a la shell. Para poder utilizar las utilidades que
nos facilita esta herramienta, basta con acceder mediante la lnea de comandos
hasta el path en el que se encuentra la SDK, y acceder a la carpeta tools y una
vez all, ejecutar los posibles comandos.

De entre esos comandos, los ms comunes son los siguientes:

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.

adb push [local][remoto]: con este comando se pueden enviar archivos
al dispositivo desde nuestra propia mquina.


47
adb pull [remoto][local]: el comando contrario al anterior, con l, nos
descargamos archivos desde el dispositivo a la mquina.

adb install [path/aplicacion.apk]: con este comando, se permite instalar
aplicaciones en el dispositivo, indicndole slo la ruta desde donde se
encuentra el paquete compilado de la aplicacin(.apk).

adb reboot: comando con el que se reinicia el emulador.







































48
Captulo 4 Creacin de una aplicacin Android

En este captulo se explica la forma de crear aplicaciones en el sistema operativo
Android. En primer lugar se indicar cmo realizar un programa HolaMundo
para familiarizarse un poco con la estructura de un programa en Android.
Posteriormente, se proceder a realizar un exhaustivo conocimiento de los
principios bsicos de la programacin en Android, as como de su estructura
para despus finalizar con la programacin de aplicaciones con mayor
dificultad, cuyas componentes grficas son muy avanzadas.

4.1 Hola Mundo

En este apartado se presenta cmo programar en Android mediante la creacin
de una aplicacin HolaMundo para que de esta manera se tenga una primera
toma de contacto con el nuevo entorno de desarrollo.

En primer lugar se explicar cmo crear un nuevo proyecto en Android y
posteriormente, como poder crear una pequea interfaz de usuario, para que
finalmente poder ejecutar el programa.

4.1.1 Nuevo proyecto Android

A la hora de crear un nuevo proyecto de Android en Eclipse hay que seguir los
siguientes pasos:

- Dentro de Eclipse hay que dirigirse a la pestaa File->New->Android
Project.

- Despus aparecer una pantalla, tal y como se muestra a continuacin


Figura 25. Creacin de un nuevo proyecto Android I

49

Figura 26. Creacin de un nuevo proyecto Android II


En esta figura, se escribir el nombre del proyecto (Project Name),
el cual ser HolaMundo. Debajo, en el campo Build Target, se debe
seleccionar una SDK (versin) sobre la cual se va a realizar el ejemplo. Y
para finalizar, rellenar el campo Application name que es el nombre que
aparecer en el telfono mvil como nombre de la aplicacin. El campo
Package name el cual indica el paquete sobre el cual residir el programa,
y el campo Create Activity, que ser el nombre del Java con el que se
empezar a programar.

- Tras rellenar los campos anteriormente descritos, y pulsando el botn
Finish aparecer la estructura jerrquica de carpetas sobre el proyecto
HolaMundo.

- Sobre la carpeta src se encuentra el paquete que se habr descrito
anteriormente y en el cual se albergan dos ficheros Java, el primero ser
el HolaMundo.java con el que se empezar a poder entender un poco la
programacin en Android y el segundo fichero, R.java, el cual es
autogenerado por Android y donde se guardan las referencias a las
variables utilizadas en el programa.




50
Si se profundiza dentro del primer archivo Java, se podr ver un
cdigo similar al que se muestra a continuacin.





Cdigo 1. Programa HolaMundo en Android

Como se puede observar, la clase HolaMundo hereda de la clase
Activity que anteriormente se ha comentado, la principal caracterstica
de esta clase es que interacta con el usuario. Para ello habr que crear
una interfaz de usuario, pues bien, cuando a la clase HolaMundo la
invocan por primera vez, se crear y con ello el conveniente interfaz.
Para crear el interfaz, la clase HolaMundo mediante el mtodo
setContentView accede al xml main el cual contiene toda la estructura de
cmo queda configurada la interfaz del usuario.



- Al conocer como se crea la interfaz de usuario, se procede a ver el
contenido del archivo main.xml



Cdigo 2. Interfaz de usuario del programa HolaMundo



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>

package paquete.HolaMundo;

import android.app.Activity;
import android.os.Bundle;

public class HolaMundo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

51
Este archivo se encuentra dentro de la carpeta layout dentro de res.
Y como se puede contemplar en dicho archivo se indica el layout
contenedor de la interfaz, en este caso LinearLayou y el componente
grfico que se muestra, que en este caso es un texto TextView. Como se
indica, el texto que se muestra aparece referenciado a otro archivo xml
strings en el cual aparece el texto que finalmente se mostrara por
pantalla al usuario. Que en este caso ser Hello World, HolaMundo!

- Para terminar, se lanza la ejecucin del programa para poder ver su
finalizacin. Para ello se pincha en la pestaa Run->Run Configurations y
aparecer una pantalla similar a la que aparece a continuacin.


Figura 27. Configuracin del proyecto Android a ejecutar I

Dentro de esta pantalla, en el apartado Android Application se pulsa
con el ratn el botn derecho y escoger opcin New, una vez elegida
dicha opcin se mostrar la siguiente imagen, desde la cual se debe
seleccionar que proyecto Android se desea ejecutar. De tal modo que
pulsando en el botn Browse se lanzar una nueva ventana desde donde
se podr escoger el proyecto en cuestin. Para este caso HolaMundo.





52

Figura 28. Configuracin del proyecto Android a ejecutar II

Configurado el proyecto, solamente queda cerciorarse dentro de la
pestaa Target que se ha seleccionado por defecto el emulador
previamente configurado. Tras este paso slo queda pulsar el botn
Apply y el botn Run y a continuacin se lanzar el emulador.


Figura 29. Ejecucin del programa HolaMundo


53
4.2 Organizacin de una aplicacin Android

Partiendo del ejemplo HolaMundo, se ensea cmo est formada una
aplicacin Android por dentro, es decir, la estructura jerrquica de archivos y
carpetas de la que lo forman.

Aunque no forma parte directa de la programacin de la aplicacin. En
primer lugar, se hablar de un archivo xml que es muy importante para el
correcto funcionamiento de la misma. Este archivo, el AndroidManifest.xml, sirve
para definir la estructura de los componentes que forman la aplicacin as como
de lo que hay que realizar en cada momento.

A continuacin, se especificar y explicar el resto de carpetas que
conforman la totalidad de una aplicacin Android. Las ms significativas son:
la src que es donde se guarda el archivo Java fuente y la carpeta res que es
donde se almacenan todos los recursos necesarios de la aplicacin.

4.2.1 Android Manifest

Cada proyecto Android, incluye un archivo, AndroidManifest.xml, almacenado
en la carpeta raz del proyecto y donde se define: la estructura de los
componentes que forman la aplicacin, los permisos que la aplicacin puede
tener, las polticas de seguridad y los datos que maneja.

Es por ello que dicho archivo, incluye nodos para cada componente de
los anteriormente descritos (Activity, Service, Content Provider y Broadcast
Receiver) que pueden formar la aplicacin y permisos e Intent Filters con los que
se determina cmo interactan cada uno de ellos o con el resto de aplicaciones.

En la estructura jerrquica de nodos que forman el archivo
AndroidManifest se halla en primer lugar el tag manifest desde donde se indica el
paquete en el cual se encuentra la aplicacin Android y las diversas versiones.


Cdigo 3. Archivo AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="paquete.HolaMundo"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".HolaMundo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

54
Los distintos tipos de nodos son:

4.2.1.1 Nodo <application>

Como se puede ver en el cdigo del archivo AndroidManifest.xml aparece el
nodo <application>. Dicho archivo slo podr contener un nodo de aplicacin.

Dentro de este nodo, se indican atributos y datos a los que accede,
necesarios en la aplicacin como pueden ser el icono, el ttulo y tema.





Cdigo 4. Nodo application

Como se indica en la parte de cdigo anteriormente mostrado, dentro de
este nodo pueden existir nodos internos en los cuales se indican precisamente
los componentes que dan forma a la aplicacin; los diferentes nodos internos
que pueden ser son los siguientes:

<activity> nodo requerido por tantas Activities que compongan la
aplicacin. Para referenciar la clase en la cual se desarrolla la totalidad de
la ejecucin se realiza mediante el atributo android:name. Al igual que
la etiqueta que obtendr la actividad al lanzarse android:label.

Dentro de este nodo tambin se incluyen diversos subnodos, en los
que se indica que Intent lanza la actividad.

o <intent-filter> al igual que en las Activities, este nodo,
tambin es aplicado a los componentes Service y Broadcast Reciver.
La principal funcionalidad que tiene este nodo, es determinar
cundo y dnde se ejecuta la Activity, las acciones que puede
soportar y la categora que ostenta dicha actividad. Estas
funcionalidades son:

<action>: que indica que accin puede soportar la
actividad.

<category>: especifica sobre qu circunstancias debe ser
lanzada la actividad.

<data>: permite especificar los datos con los que va a
tratar la actividad.


<application
android:icon="@drawable/icon"
android:label="@string/app_name">
[. . . nodos de aplicacin . . .]
</application>

55

Cdigo 5. Nodo interno activity

<service>: dentro del nodo de aplicacin, nos podemos encontrar
tambin con el nodo interno que indica que la aplicacin pueda tener un
componente Service.

<provider>: este nodo es utilizado cada vez que la aplicacin contenga
como componente un Content Provider y que son utilizados para la
gestin de acceso a datos, almacenarlos o compartirlos con diferentes
aplicaciones.

<reciver>: con este nodo, incluimos el componente Broadcast Receiver y
que se utilizan cuando la aplicacin est a la espera de la llegada de
eventos.

4.2.1.2 Nodo <uses-permission>

Dentro de este nodo se declaran los permisos necesarios para que la aplicacin
pueda funcionar correctamente. Generalmente, estos permisos son requeridos
por aquellas aplicaciones cuya funcionalidad depende de servicios que
requieran seguridad o recursos o accesos a stos de otra ndole.

Un claro ejemplo puede ser que la aplicacin que se quiera lanzar tenga
acceso a Internet, por lo que necesita un permiso para utilizar dicho recurso.


Cdigo 6. Nodo uses-permission

4.2.1.3 Nodo <permision>

Con el siguiente nodo, se garantiza el acceso restringido a determinados
componentes que utilice la aplicacin.

4.2.1.4 Nodo <instrumentation>

Dicho nodo provee de una serie de recursos desde la cual se puede probar la
funcionalidad de la aplicacin.

<uses-permission
android:name="android.permission.INTERNET">
</uses-permission>

<activity android:name=".HolaMundo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>


56
4.2.2 Carpeta src

Dentro del workspace de la aplicacin aparece una carpeta llamada src, en la
cual se alberga todo el cdigo Java fuente que es necesario para arrancar la
aplicacin.

Aplicndolo al ejemplo del programa HolaMundo, en esta carpeta se
encontrar el paquete en el cual se encuentra el HolaMundo.java.


4.2.3 Carpeta res

En esta carpeta se guardan todos aquellos recursos que son utilizados por el
proyecto en cuestin. Desde Android, se puede acceder a todo recurso externo
bien sea una imagen, un archivo xml, o cualquier otro archivo del cual se hace
referencia en el cdigo de la aplicacin.

La mayora de los recursos que quedan en un plano exterior al cdigo
suelen ser por lo general archivos XML, JPEG, GIF y PNG. Todos y cada uno de
ellos han de permanecer en una determinada carpeta para el buen
funcionamiento de la aplicacin.


Las diferentes subcarpetas en las que pueden localizarse estos recursos
pueden ser:

Anim: en esta carpeta se almacena un fichero XML desde el cual se hace
referencia a diversas animaciones que se pueden mostrar en la
aplicacin. Estas animaciones pueden consistir a su vez de animaciones
que pueden rotarse, girarse, etc.. dentro de la aplicacin o de
animaciones en las que se muestra una secuencia de frames.

Drawable: esta carpeta guarda todas aquellas imgenes que son
utilizadas por la aplicacin. Los formatos permitidos son PNG, JPG y
GIF. En las ltimas versiones de Android esta carpeta se subdivide en 3
subcarpetas, en funcin de la resolucin de las imgenes empleadas. De
forma que dichas subcarpetas corresponden con una resolucin alta,
media y baja.

Layout: dentro de la carpeta layout, es donde reside el archivo XML
desde el cual se define la capa de presentacin para la interfaz de usuario
de una Acticity.



57
Values: al igual que en carpetas anteriormente comentadas, dentro de la
carpeta values, se almacena un archivo/s XML donde se incluyen las
cadenas string, colores, dimensiones o arrays que posteriormente son
accedidos en el cdigo.

Raw: por ltimo, la carpeta raw que es el lugar donde se sitan todos
aquellos recursos que nos son necesarios que sean compilados como en
los casos anteriores y que son aadidos sin procesar. Generalmente
suelen ser archivos de audio y vdeo.


4.2.4 Carpeta gen

En la carpeta gen, se encontrarn todos los archivos Java generados por
Android. En cada proyecto Android, una vez que queda compilado, se genera
automticamente un fichero llamado R.java desde el cual se aportan todas las
referencias a las variables o recursos empleados en la aplicacin.

La principal ventaja que aporta este archivo, es poder utilizar todos los
recursos disponibles desde el cdigo. En el cdigo ejemplo del programa
HolaMundo, por medio de este archivo que es donde se guardan todas las
referencias, la Activity conoce qu elementos son los necesarios para mostrar la
interfaz de usuario.

En el ejemplo HolaMundo sera de la siguiente manera R.layout.main.
Esta configuracin sirve para acceder a variables o todo tipo de recursos.

4.2.5 Carpeta bin

Por ltimo, la carpeta definitiva que se puede encontrar en el workspace, es la
carpeta bin. sta es la asignada para almacenar todos aquellos archivos binarios
derivados de los archivos fuente.

En esta carpeta se guardan todos los .class generados a partir de los
archivos fuente Java y se almacena el paquete de la aplicacin compilada, o en
simples palabras el cdigo binario de la aplicacin Android apk.








58
4.3 Interfaz de usuario en Android

En el siguiente apartado, se aclarar cmo crear una interfaz de usuario en
Android, aparte de conocer los diferentes elementos que la pueden componer y
la diferente terminologa que se usa para la creacin de la interfaz.

A la hora de crear una aplicacin en Android, sta debe utilizar un
componente Activity para simbolizar una ventana o pantalla con la que el
usuario pueda establecer de alguna manera contacto con la aplicacin. Ahora
bien, para poder mostrar la interfaz al usuario, se debe asignar una View o un
layout a esa actividad para que de esta forma se le muestre algo al usuario. Esta
asignacin es la que se realiza cuando en el mtodo setContentView()se le
asigna el fichero XML que se encuentra dentro de la carpeta de recursos (res) en
la subcarpeta (layout).


A continuacin se expondrn las clases View y ViewGroup necesarias para
construir una interfaz de usuario en Android y los diferentes elementos que
forman a su vez la interfaz.


4.3.1 View

La clase View es la unidad bsica donde se construye la interfaz de usuario y
donde se forman todos aquellos elementos visuales que el usuario tiene sobre
una aplicacin en Android. En relacin con lo descrito, todo componente visual
en Android hereda de la clase View tambin llamadosViews.


Figura 30. Estructura jerrquica de la clase View

En la figura anterior se puede comprobar dicha jerarqua que se forma en
torno a la clase View.

View
ViewGroup Control
Layout Widget

59
De los elementos que descienden de View se expondrn los Widgets,
ViewGroup y otros que forman parte de la interfaz de usuario pero que por ello
no son menos importantes.


4.3.1.1 Widgets

Se comentar los diferentes Widgets ms habituales en la programacin de una
interfaz de usuario y la forma en la cual se pueden crear y aadir a la interfaz.

Los principales Widgets son:

TextView: es la forma ms simple de mostrar un texto por pantalla.

A partir del ejemplo HolaMundo, se puede ver como se puede
crear un TextView. Si se abre el archivo, main.xml que se encuentra en la
carpeta res/layout , aparecer el siguiente cdigo.


Cdigo 7. Creacin de un elemento TextView

En el correspondiente cdigo, se puede ver como se forma el
respectivo texto, en el que hay que destacar diversos aspectos que son
comunes a todos los Views.


Cuando en el cdigo aparecen las lneas layout_width y
layout_height se quiere indicar la altura y anchura que va a tener
sendo Widget. El valor que puede tomar tanto la anchura como la altura
del elemento puede ser o fill_parent o wrap_content; en el primer
caso se desea que el elemento integrado ocupe el mximo posible y para
el segundo caso, que ocupe el mnimo exigido.


Adems de estas funcionalidades, se puede establecer el texto que
se quiere mostrar, bien haciendo referencia de ste al archivo XML de la
carpeta values, en donde el campo hello contiene la cadena de texto que
se mostrar por pantalla, o bien escribiendo el texto a mostrar en el
campo text.



<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>

60
EditText: con este widget se puede crear una caja de texto.

El siguiente cdigo muestra como poder crear una caja de texto o
Editext.







Cdigo 8. Creacin de un elemento EditText

La parte visual de la misma sera la siguiente:



Figura 31. Salida por pantalla de un elemento EditText


ListView: Con este elemento, se puede crear y gestionar diferentes
Views mostrndolos por pantalla como en una lista.

En el ejemplo de un componente ListView expone el valor del
texto de un array de EditText.

La siguiente parte de cdigo muestra la parte desarrollada en el
archivo main.xml .






Cdigo 9. Creacin de un elemento ListView

Para que se pueda utilizar cualquier elemento de la interfaz dentro
del cdigo Java, lo necesario es hacer referencia de ste, para ello se
utiliza el campo id, y el nombre de la variable con el cual hacer dicha
referencia, en este caso list.


<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="caja de texto"
/>
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/list"
/>

61
En el siguiente cdigo Java se comprueba cmo se guarda el valor
introducido en la caja de texto y que se almacena como un elemento del
ListView.



Cdigo 10. Construccin de un elemento ListView








public class EjemploLW extends Activity {

private EditText editText;
private ListView lw;
private ArrayList<String> items;
private ArrayAdapter<String> aa;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

editText=(EditText)findViewById(R.id.editText);
lw=(ListView)findViewById(R.id.list);
items=new ArrayList<String>();
aa=new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 ,
items);
lw.setAdapter(aa);

editText.setOnKeyListener(new View.OnKeyListener() {

public boolean onKey(View v, int keyCode, KeyEvent
event) {
boolean valor=false;

if(event.getAction()==
KeyEvent.ACTION_DOWN){
if(keyCode==
KeyEvent.KEYCODE_DPAD_CENTER){

items.add(0,editText.getText().toString());
aa.notifyDataSetChanged();
editText.setText("");
valor=true;
}
}

return valor;
}
});
}
}

62



En la siguiente imagen se puede apreciar cmo funciona un
componente ListView.



Figura 32. Visualizacin de un elemento ListView


Spinner: este elemento es el smil a un combobox.

La parte correspondiente al cdigo que se forma en el main.xml es
el correspondiente.


Cdigo 11. Creacin de un elemento Spinner

En el cdigo anterior, se hace referencia en el campo prompt a una
cadena que se encuentra referenciada en el archivo strings.xml de la
carpeta values. Es ah donde se escribe en la variable combo la cadena de
texto que hace las veces de ttulo del Spinner.


<Spinner
android:id="@+id/combo1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/combo"
android:duplicateParentState="true"
/>

63
Adems del archivo strings.xml, la carpeta values deber contener
otro archivo XML desde el cual se configuran todos los elementos o tems
que forman el combo. El contenido de dicho archivo, concretamente el
arrays.xml es el siguiente.



Cdigo 12. Composicin de elementos de un Spinner


Este archivo arrays.xml es el que se hace falta desde el cdigo Java
para incluirlo en el combo o Spinner. En el siguiente cdigo Java se
muestra dicha inclusin.


Cdigo 13. Clase Java de creacin de elemento Spinner

Como se puede apreciar en el cdigo, al Spinner creado, se le
asigna un ArrayAdapter, que incluye la referencia del contenido del
archivo arrays.xml mediante la referencia R.array.combo.



public class EjemploCombo extends Activity {

private Spinner combo1;
private ArrayAdapter adapter1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

combo1=(Spinner)findViewById(R.id.combo1);

adapter1=ArrayAdapter.createFromResource(this, R.array.combo,
android.R.layout.simple_spinner_item);

adapter1.setDropDownViewResource(android.R.layout.simple_spinn
er_dropdown_item);

combo1.setAdapter(adapter1);


}
}
<resources>
<string-array name="combo">
<item>Esto</item>
<item>es</item>
<item>un</item>
<item>combo</item>
</string-array>
</resources>

64

La imagen final que tiene dicho combo es la siguiente:


Figura 33. Ejecucin de elemento Spinner I



Figura 34. Ejecucin de elemento Spinner II


65

Button: es el widget con el cual se crean botones.

El cdigo necesario para crear un botn es el siguiente.


Cdigo 14. Creacin elemento Button

La imagen de un botn estndar sera la siguiente:


Figura 35. Ejecucin elemento Button

CheckBox: es un botn especial que tiene doble estado, que indica si est
o no chequeado.

El cdigo necesario en el archivo main.xml es el siguiente.


Cdigo 15. Creacin elemento CheckBox

Lo ms destacable es el valor del campo checked cuyo valor es
verdadero o falso.


Figura 36. Ejecucin elemento Checkbox

RadioButton: otro tipo especial de botn.





Cdigo 16. Creacin elemento RadioButton

La imagen que se obtendra ser la siguiente:


Figura 37. Ejecucin elemento RadioButton
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Botn"
/>
<RadioButton
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:checked="true"
/>

66

4.3.2 View Groups

La clase View Groups es una extensin de la clase View en la que se pueden
incluir mltiples Views. Por as decirlo cada View Group es un contenedor de
diversas View.


Figura 38. Jerarqua ViewGroup

En cada View Group se encargan de asignar el espacio del que disponen
para cedrselo a las Views que lo componen. Esta concesin puede ocupar todo
el espacio disponible o tan slo el tamao mnimo permitido.

Un claro ejemplo de ViewGroup, son los Layout Managers, que son a su
vez una extensin de la primera clase mencionada y que son designados para
controlar las posicin de los diversos Views que forman la interfaz.

Los principales Layouts son los siguientes:

FrameLayout: es el ms sencillo de los Layout Managers. La peculiaridad
que tiene es que se aaden cada View desde la esquina superior
izquierda y superponindose el ltimo View encima del anterior.

A continuacin se expone un ejemplo de FrameLayout donde se
mostrar el contenido del archivo main.xml que ha definido la interfaz de
usuario que est formada por tres botones. Despus se proceder a la
vista de la posterior ejecucin en la cual se puede comprobar la
superposicin de los diversos elementos.


67

Cdigo 17. Composicin de un elemento layout FrameLayout



Figura 39. Ejecucin elemento FrameLayout


<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Boton"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Boton2"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Boton3"
/>
</FrameLayout>


68
LinearLayout: con este tipo de Layout, se aaden los diferentes Views
ordenados de forma seguida y en lnea y pueden estar en vertical u en
horizontal.

En el primer caso los Views se almacenan uno encima del otro en
forma de filas, mientras que en el segundo caso, se van disponiendo en
columnas.

La ejecucin de este Layout teniendo en cuenta la orientacin
vertical sera la siguiente:


Figura 40. Ejecucin elemento LinearLayout I


La ejecucin de este Layout teniendo en cuenta la orientacin
horizontal sera la siguiente:


Figura 41. Ejecucin elemento LinearLayout II

69

RelativeLayout: Con este Layout, se permiten agregar elementos
respecto a uno previo. Cuando se quiere introducir un nuevo View en el
Layout se posiciona en funcin de otro View.

En el siguiente cdigo se puede apreciar como varios de los elementos
estn dispuestos en funcin de otros.


Cdigo 18. Creacin de un elemento layout RelativeLayout







<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:id="@+id/boton1"
android:layout_alignTop="@+id/layout"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:id="@+id/boton2"
android:layout_toRightOf="@+id/boton1"

/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:id="@+id/boton3"
android:layout_below="@+id/boton1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"
android:layout_below="@+id/boton1"
android:layout_toRightOf="@+id/boton3"
/>
</RelativeLayout>

70
La vista final del mismo sera:


Figura 42. Ejecucin del elemento RelativeLayout


TableLayout: para poder aadir los diferentes Views que lo componen,
se realiza en forma de filas y columnas.

Dicha disposicin en filas se puede observar en el siguiente cdigo:


Cdigo 19. Creacin de un elemento TableLayout

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableRow >
<TextView
android:text="Primera Fila"
android:width="100px"
/>
<EditText/>
</TableRow>
<TableRow >
<TextView
android:text="Segunda Fila"
android:width="100px"
/>
<EditText/>
</TableRow>
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Boton1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Boton2"
/>
</TableRow>
</TableLayout>

71
La ejecucin del mismo sera la siguiente:


Figura 43. Ejecucin del elemento TableLayout


AbsoluteLayout: por ltimo, con este Layout se aaden los sucesivos
elementos utilizan coordenadas X e Y

En el cdigo siguiente se muestra como quedara conformado este
Layout.


Cdigo 20. Creacin del elemento AbsoluteLayout


<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="Boton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="100px"
android:layout_y="12px"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_x="12px"
android:layout_y="100px"
/>
<Button
android:text="Boton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="300px"
android:layout_y="40px"
/>
</AbsoluteLayout>

72
La vista final del mismo, sera la que se muestra a continuacin:


Figura 44. Ejecucin del elemento AbsoluteLayout

4.3.3 Otros elementos de la interfaz

En este punto se dar a conocer otro tipo de elementos que sirven de gran
ayuda para la elaboracin de la perspectiva del usuario de una aplicacin en
Android.

De los diferentes elementos anexos a los que anteriormente se han visto,
destacan principalmente el uso de mens y los mensajes de alerta. Estos
elementos facilitan en gran medida la relacin que se establece entre usuario y
aplicacin.

4.3.3.1 Menu

La Interfaz Menu ofrece una manera de exponer determinadas funciones de la
aplicacin sin necesidad de alterar la interfaz creada en la pantalla. Cada
Activity puede especificar su propio Menu que es desplegado cuando se pulsa la
tecla o botn men.

Para la creacin de un Menu basta con sobrescribir el mtodo
onCreateOptionsMenu, ste recibe un objeto Menu como parmetro, con el que
se puede trabajar hasta que se invoque otra vez el mismo mtodo.

73


Cdigo 21. Mtodo de creacin de un Men

Una vez recibida la instancia del Menu, es con ella con la cual se trabaja
para crear los diferentes elementos que conforman el men. De tal modo que
con el mtodo add se crean los diferentes tems que lo componen.

A la hora de crear un tem del men, se le debe especificar:

1. El grupo al que pertenece dicho elemento, es decir, pueden existir
diferentes tems que quedan agrupados de esta forma.

2. El identificador unvoco que recibe ese elemento. La labor de
identificacin es importante, debido a que cuando los diferentes tems
son manejados o gestionados a travs del mtodo
onOptionsItemSelected y para conocer que elemento del men ha
sido pulsado, se realiza mediante este identificador. Por convencin, la
declaracin de los identificadores de los elementos de un men se
realizan como si fueran variables estticas dentro de la Activity. Para ello
se utiliza la constante Menu.FIRST a la cual se le incrementa en uno el
valor por cada elemento que componga dicho men.

3. El orden en el cual los diversos tems son desplegados.

4. El texto que aparece dentro de cada elemento que conforma el men.

Adems cada tem o elemento puede incluir diversas funcionalidades,
que pueden ser las siguientes:

Checkbox / RadioButtons: este tipo de opcin slo est disponible y
visible en mens que se pueden expandir o en los submens.

En los CheckBox es controlado mediante el mtodo setChecked, el cual
previamente se le ha inicializado con el mtodo setCheckeable.

Y en cuanto los RadioButtons, se puede asignar a un grupo de tems
dentro de los cuales slo uno podr ser pulsado. Este control se realiza
mediante el mtodo setGroupCheckeable.

Shortcut Keys: utilizando el mtodo setShortcut, asignamos a un
tem la posibilidad de acceder al mismo mediante un procedimiento
abreviado de teclas.
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);

return result;
}

74

Condensed Titles: esta opcin no es visible tanto en los mens que se
pueden expandir como en los submens, y la principal funcin que se
lleva a cabo, es asignar un ttulo a un tem.

Icons: si se quiere asociar a un tem un icono, con el mtodo setIcon,
se le asigna una imagen a ese elemento. Esta opcin slo es disponible en
los mens de iconos.

Menu Item Clic Listener: con el mtodo
setOnMenuItemClickListener, se maneja el tem seleccionado del
men, y realizar las tareas que se crean oportunas. Esta opcin es vlida,
siempre y cuando ese mismo tem no sea manejado desde el mtodo
onOptionsItemSelected.

Intent: un nuevo Intent se lanza cuando se pulsa el elemento que usa el
mtodo setIntent, con ste mtodo, se puede pasar de la clase actual a
otra clase Java. Para que pueda llevarse a cabo este procedimiento el
elemento no debe implementar los mtodos anteriormente descritos en el
punto anterior, es decir, el onOptionsItemSelected y el
setOnMenuItemClickListener.


Existen tres tipos diferentes de mens:

Icon Menu: es el men de iconos, ste aparece cuando se pulsa el botn
men. Una vez que se pulsa dicha tecla, se despliega un men que
contiene como mucho hasta seis elementos, ya que ante un mayor
nmero de tems se convierte a partir del sexto elemento en un men de
que se expande.

Este tipo de men no soporta ni Checkbox, ni RadioButtons, ni
Shortcut pero sin embargo si permite Iconos.

Expanded Menu: es un men que se expande. ste se lanza cuando en el
tipo anterior de men existen ms elementos de los soportados.

El men de expansin, permite los Checkbox, RadioButtons y los
Shortcut pero sin embargo no permite Iconos.

SubMenus: como su propio nombre indica, es un submen que se
despliega al ser pulsado algn tem.





75

Para verlo con mayor nitidez, se muestra el consiguiente cdigo Java en
el cual se muestra el proceso de creacin de los diferentes tipos de mens
disponibles, as como de las funcionalidades que pueden tener los elementos
que lo componen.


Cod

Y la interfaz con los diferentes tipos de mens sera la siguiente:





















public class EjemploMenu extends Activity {

private LinearLayout layout;

static final private int OPCION_1= Menu.FIRST;
static final private int OPCION_2= Menu.FIRST+1;
static final private int OPCION_3= Menu.FIRST+2;
static final private int OPCION_SALIR= Menu.FIRST +3;
static final private int OPCION_4= Menu.FIRST+4;
static final private int OPCION_5= Menu.FIRST+5;
static final private int OPCION_6= Menu.FIRST+6;
static final private int OPCION_7= Menu.FIRST+7;
static final private int OPCION_8= Menu.FIRST+8;
static final private int OPCION_9= Menu.FIRST+9;

//Agrupar los items del menu que tendrn radioButtons
static final private int GRUPO_BOTONES=1;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

layout=(LinearLayout)findViewById(R.id.layout);
}

public void onDestroy(Bundle savedInstance){
super.onDestroy();
finish();
}

public boolean onOptionsItemSelected(MenuItem item){

boolean valor=false;

switch(item.getItemId()){

case OPCION_1:
valor=true;
break;
case OPCION_3:
valor=true;
break;
case OPCION_4:
valor=true;
break;
case OPCION_5:
valor=true;
break;
case OPCION_6:
valor=true;
break;
case OPCION_7:
valor=true;
break;
case OPCION_SALIR:
finish();
valor=true;
break;
}
return valor;
}


76





Cdigo 22. Creacin de los diferentes tipos de Mens












public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);

menu.add(0,OPCION_1,
0,R.string.menu1).setIcon(android.R.drawable.ic_menu_info_details);
menu.add(0,OPCION_2, 0,R.string.menu2);

SubMenu submenu =menu.addSubMenu(0, OPCION_3, 0, R.string.menu3);
submenu.add("Item 1");
submenu.add("Item 2").setOnMenuItemClickListener(new
OnMenuItemClickListener(){

public boolean onMenuItemClick(MenuItem item) {
Random r=new Random();
int valor=r.nextInt();
layout.setBackgroundColor(valor);

return false;
}

});
submenu.add("Item 3");

//Aadir ttulo de otra forma
menu.add(0,OPCION_4, 0,"").setTitleCondensed("CUARTO ITEM");
menu.add(0,OPCION_SALIR,
0,R.string.menuSalir).setIcon(android.R.drawable.ic_delete);
menu.add(0,OPCION_5, 0,R.string.menu5);

//Menu con CheckBox
menu.add(0,OPCION_6, 0,R.string.menu6).setCheckable(true);

//Menu con RadioButtons y chequear el grupo de radioButtons
menu.add(GRUPO_BOTONES,OPCION_7, 0,R.string.menu7);
menu.setGroupCheckable(GRUPO_BOTONES, true, true);

//A la eschucha
menu.add(0,OPCION_8, 0,R.string.menu8).setIntent(new Intent(this,
EjemploMenu3.class));

//Acceder por mtodo abreviado
menu.add(0,OPCION_9, 0,R.string.menu9).setShortcut('0', 'a').setIntent(new
Intent(this,EjemploMenu2.class));


return result;
}

77

Y la interfaz con los diferentes tipos de mens sera la siguiente:


Figura 45. Ejecucin de un Men de tipo Icono


Figura 46. Ejecucin de un Men de tipo Expansin



Figura 47. Ejecucin de un Men de tipo Submen


78
4.3.3.2 Dialogs

Los Dialogs, son cajas o ventanas que son utilizadas para ayudar a los usuarios,
responder a preguntas formuladas, realizar alguna seleccin, confirmar
acciones o mostrar mensajes de alerta o de error.

La principal caracterstica de los Dialog, es una ventana flotante dejando
a la Activity como en un segundo plano en cuanto a perspectiva visual.


Los principales ejemplos de Dialog son:

AlertDialog: es la opcin ms verstil de los Dialog, la cual ofrece
diversas opciones:

o Muestra un mensaje al usuario, y permite al usuario que pueda
escoger tres opciones, Ok, Cancel, S o No.

o Permite CheckButtons o RadioButtons.

o Se puede introducir InputText.

ProgressDialog: dentro de la ventana lanzada se muestra una barra de
progreso.

Para mejor entendimiento de ambos Dialog se muestra el siguiente cdigo Java.






Cod

A simple vista dichos Dialog seran vistos de la siguiente forma:











public class EjemploDialog extends Activity {

private Button botonAlerta;
private Button botonProgreso;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

botonAlerta=(Button)findViewById(R.id.boton);
botonProgreso=(Button)findViewById(R.id.boton2);

botonAlerta.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
mostrarDialogo();
}
});

botonProgreso.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
mostrarDialogo2();
}
});
}

79

Cdigo 23. Creacin de los diferentes tipos de Dialogs

A simple vista dichos Dialog seran vistos de la siguiente forma:



Figuras 48 y 49. Ejecucin de los dilogos de Alerta y de Progreso



public void mostrarDialogo(){

AlertDialog.Builder dialogoalerta=new
AlertDialog.Builder(EjemploDialog.this);
dialogoalerta.setTitle("Dialogo de Alerta").setMessage("Esto es un dialogo de
alerta. Que desea hacer???");
dialogoalerta.setPositiveButton("Ok",new OnClickListener(){

public void onClick(DialogInterface arg0, int arg1) {
//nada
}

});

dialogoalerta.setNegativeButton("Salir",new OnClickListener(){

public void onClick(DialogInterface arg0, int arg1) {
EjemploDialog.this.finish();
}

});

dialogoalerta.show();

}

public void mostrarDialogo2(){

ProgressDialog
dialogoprogreso=ProgressDialog.show(EjemploDialog.this,"Dialogo de Progreso","En
progreso...",true);
dialogoprogreso.setCancelable(true);

}

}

80

4.4 Uso de Intents para lanzar nuevas Activities

Es lgico que al ejecutar una aplicacin en Android en la cual se interacte con
el usuario, la aplicacin no permanezca esttica y ofrezca dinamismo en funcin
de las peticiones propuestas por el cliente.

En apartados anteriores se ha dicho que el componente bsico en una
aplicacin Android en la cual est involucrado el usuario es la clase Activity. En
cierta manera las Activities estn expuestas a las necesidades o peticiones del
usuario de modo que cuando stas reciban algn evento deban alterar algn
componente del Layout, de tal forma, que la Activity inicial pasa a ser otra
Activity.

Para poder redirigir el flujo de la aplicacin de una Activity a otra, se
hace uso de los Intents. A travs de ellos se indica qu Activity lanzar, de tal
manera que, si se quiere mostrar diferentes pantallas, se debern implantar
tantos Intents como pantallas se deseen.

Para utilizar diversas pantallas o Activities se debern crear los
correspondientes Intents. Para que se lance una nueva actividad en el Intent
debe quedar reflejado la clase Java en la que se encuentra ahora el flujo y la
clase Java a la que se redirige el mismo. Adems para que se lleve a cabo dicho
proceso se debe ejecutar el mtodo startActivity indicando el Intent en
concreto.

En el siguiente cdigo puede verse como realizar dicho proceso:



Cdigo 24. Creacin de un componente Intent


public class Ejemplo extends Activity {

private Intent intent=new Intent();

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);

intent.setClass(Ejemplo.this,EjemploIntet.class);
startActivity(intent);

}
}

81

Aparte de mostrarlo en el cdigo Java, dicho cambio de testigo entre una
Activity y otra tiene que quedar reflejado en el archivo AndroidManifest.xml
desde el cual se indica el Intent invocado. Dicha modificacin es la siguiente:


Cdigo 25. Configuracin del componente Intent

Como se puede observar existen dos nodos <activity> puesto que se
realiza el cambio de Activity.

4.4.1 Paso de parmetros y resultados

Aparte de la necesidad de hacer dinmica la vista que tiene el usuario de la
aplicacin, tambin puede ser necesario el paso de parmetros a travs de las
distintas Activities o que la Activity a la cual se ha redirigido devuelva algn
tipo de valor.

Para poder pasar parmetros a otra Activity, el Intent nuevo que se crea,
deber pasar dicho valor en una variable que despus ser tomada por la nueva
Activity. Este caso puede ser similar a los datos que se pasan por contexto en las
arquitecturas web.

En el ejemplo, se pasa el valor de una cadena de texto que introduzca el
usuario.


Cdigo 26. Paso de parmetros a travs de un componente Intent



intent.setClass(EjemploBundle.this,EjemploBundle2.class);
intent.putExtra("id", texto1.getText().toString());
startActivity(intent);

<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".EjemploIntet"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".Ejemplo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
</application>


82
A la hora de recogerlos, mediante el mismo mtodo o prcticamente
similar, la nueva Activity recoge los parmetros recibidos por la peticin, y para
acceder al valor de dicho parmetro, se accede mediante la variable pasada en
dicha peticin.


Cdigo 27. Recogida de parmetros a travs de un componente Intent
El ejemplo visual de cmo se pasan dichos parmetros a la vez de cmo
se realiza el cambio de flujo entre una Activity a otra sera el siguiente:


Figuras 50 y 51. Ejecucin de un componente Intent

Si por lo contrario, se desea que la Activity a la cual se invoca, en vez de
pasarle parmetros devuelva algn tipo de valor, en vez de llamar al mtodo
startActivity, se deber llamar al mtodo startActivityForResult el cual
a diferencia del anterior mtodo pasar adems del Intent creado, la variable en
la cual la otra Activity guardar el valor devuelto.

Si el valor devuelto es algn dato especfico mediante este mtodo es el
apropiado, ya que se guarda en dicha variable el valor necesitado, aparte, para
tratar dicho valor devuelto, se realizar en el mtodo onActivityResult.

Pero si slo se necesita saber el valor de cmo ha finalizado la Activity el
mtodo indicado es el setResult.


bundle=getIntent().getExtras();
texto.setText(bundle.getString("id"));


83
4.5 Creacin de BBDD

Para la creacin de BBDD, Android soporta BBDD Sqlite y proporciona todo
tipo de funciones de control que pueden permitir almacenar datos por muy
complejos que sean en forma de objeto.

Como ejemplo de accesos a BBDD se ha realizado como ejemplo un bloc
de notas.

A la hora de crear un programa en el cual existe acceso y toda la gestin
que conlleve, la creacin, actualizacin o borrado de una BBDD, se ha de crear
una clase la cual herede de SQLiteOpenHelper. Es en esta clase donde residirn
los mtodos de creacin y actualizacin. Ahora bien dentro de dicha clase
existir un mtodo onCreate que es donde se realiza la creacin de la base de
datos. En dicho mtodo, se ejecuta la sentencia SQL para poder crear la base de
datos. El cdigo en el cual se lleva a cabo esa operacin es el siguiente:


Cod


Cdigo 28. Mtodo de creacin de un BBDD en Android

Siendo la sentencia SQL la siguiente:

Cdigo 29. Sentencia de creacin de la BBDD
Creada la base de datos, existe un manejador desde el cual se puede
tener acceso a los datos y utilizar los correspondientes mtodos de alta, baja y
actualizacin de ellos. Adems se debe utilizar dicho manejador para poder
cerrar la base de datos en cuanto sta deje de utilizarse. En el caso de abrir la
base de datos y que sta no se pueda abrir, se crea y si an as no se puede, se
lanza una excepcin.


Cdigo 30. Mtodos de apertura y cierre de la BBDD
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;

public NotasDbAdapter open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}

public void close() {
mDbHelper.close();
}

private static final String DATABASE_CREATE =
"create table notes (_id integer primary key autoincrement, "
+ "title text not null, body text not null);";

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}








84
De acuerdo con lo comentado, ahora se podrn utilizar los mtodos con
los que podemos utilizar los datos, bien sean para lectura, escritura o
eliminacin.

Para poder crear una nota, se ha utilizado la clase ContentValues, con
la cual aadimos todo el texto insertado en la caja de texto y lo introducimos en
la base de datos.








Cdigo 31. Mtodo de creacin de una nueva tupla


Si se desea actualizar una nota ya creada, el correspondiente mtodo es el
siguiente:



Cdigo 32. Mtodo de actualizacin de la BBDD


Del mismo modo, si lo que se desea es eliminar una nota, el mtodo para
realizar esta operacin es:





Cdigo 33. Mtodo de borrado de un elemento de la BBDD




public bolean updateNote(long 84owed, String title, String body) {
ContentValues args = new ContentValues();
args.put(KEY_TITLE, title);
args.put(KEY_BODY, body);

return mDb.update(DATABASE_TABLE, args, KEY_ROWID + = +
84owed, null) > 0;
}

public long createNote(String title, String body) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_BODY, body);

return mDb.insert(DATABASE_TABLE, null, initialValues);
}


public boolean deleteNote(long rowId) {
return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId,
null) > 0;
}


85

Obviamente para poder realizar ambos mtodos, es decir, poder insertar
y poder borrar alguna nota; previamente se debe saber en concreto sobre qu
nota realizar dichas operaciones. Para ello se utiliza un mtodo que nos
devuelve el cursor a la nota seleccionada.










Cdigo 34. Mtodo para obtener el cursor de la BBDD

Otro dato a tener en cuenta cuando se crean bases de datos en Android,
es que cualquier base de datos creada para una aplicacin, es accedida por
todas las clases que conforman la totalidad de la aplicacin, sin embargo las
clases que permanezcan fuera no lo podrn hacer.

























public Cursor fetchNote(long rowId) throws SQLException {

Cursor mCursor =mDb.query(true, DATABASE_TABLE, new String[]
{KEY_ROWID,KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;

}


86
4.6 Aplicaciones multimedia

Una de las mltiples razones por las cuales los telfonos mviles han tenido
especial repercusin en la actualidad ha sido el poder reproducir contenidos
multimedia. Adems, esta utilidad puede ser gran detonante a la hora de
reproducir determinados contenidos, factor que es especialmente considerado
por los consumidores puesto que pueden decantarse por un dispositivo u otro.

Desde Android, se aporta una serie de libreras que permiten la
reproduccin o grabacin de contenidos de video o audio, sobre una amplia
gama de formatos multimedia, tanto en local como en streaming.

Los principales formatos soportados son los siguientes:

JPEG

PNG

OGG

Mpeg 4

3GPP

MP3

Bitmap

Para poder reproducir dichos contenidos, la clase destinada a realizar
dichas labores es MediaPlayer, con la que se pueden reproducir recursos
locales o recursos por medio de una URL.

4.6.1 Reproduccin de archivos locales

En este apartado se va a mostrar cmo por medio de la clase MediaPlayer, se
puede reproducir un archivo local. En este caso se va a reproducir un archivo
de audio.

En primer lugar, para poder reproducir un archivo de cualquier formato
en local, se ha de crear la carpeta res/raw desde la cual se reproducir el archivo
contenido en dicha carpeta.

A continuacin, una vez que se ha creado dicha carpeta lo nico que
queda es reproducir el archivo contenido en ella. Para poder hacerlo, la clase
MediaPlayer proporciona los mtodos start, pause y stop.

87

El cdigo que se muestra debajo refleja cmo se reproduce este tipo de archivos.











































Cdigo 35. Diferentes mtodos de reproduccin de archivos
public void onClick(View v){
long t=0;

if(v.equals(bplay)){
if(mp==null){
estado.setText(R.string.estado1);
mp=MediaPlayer.create(Ejemplo3.this,
R.raw.personal);
mp.start();
pb.setVisibility(ProgressBar.VISIBLE);
pb.setProgress(0);
pb.setMax(mp.getDuration());
new Thread(this).start();
cr.start();
cr.setBase(SystemClock.elapsedRealtime());
}else if(mp!=null && !mp.isPlaying()){
estado.setText(R.string.estado1);
this.notify();
cr.start();
cr.setBase(SystemClock.elapsedRealtime()-t);
mp.start();
}else if(mp.isPlaying())return;
}else if(v.equals(bpause)){
if(mp!=null){
estado.setText(R.string.estado3);

mp.pause();
cr.stop();
t=SystemClock.elapsedRealtime()-cr.getBase();
try{
this.wait();
}catch(Exception e){
e.printStackTrace();
System.out.println(e);
}

}else{
return;
}

}else if(v.equals(bstop)){
if(mp!=null)
{
estado.setText(R.string.estado2);
mp.stop();
mp=null;
pb.setVisibility(ProgressBar.GONE);
cr.stop();
cr.setBase(SystemClock.elapsedRealtime());
}else{
return;
}
}
}


88
La vista que puede tener una reproduccin de audio es la siguiente:


Figura 52. Ejecucin de un archivo de msica

4.6.2 Reproduccin de archivos remotos

Dentro de este apartado, se va a describir como reproducir un archivo mediante
una URL. Para ello se ha utilizado la reproduccin de un archivo de vdeo
mediante streaming.

La principal diferencia que se encuentra es que ahora, en vez de
reproducir archivos de la carpeta res/raw, se reproducen mediante una URL.
Tambin otra diferencia es que para poder reproducir archivos remotos, la clase
MediaPlayer facilita un mtodo para poder reproducir mediante este
procedimiento en vez del mtodo start, dicho mtodo es el setDataSourse.


Cdigo 36. Mtodos de reproduccin remota

Existe otra posibilidad de reproducir dichos archivos sin necesidad de
utilizar la clase MediaPlayer. En Android existe un componente View llamado
VideoView con el cual se pueden reproducir dichos archivos.

En el siguiente cdigo, se puede ver como se utiliza dicho View.


Cdigo 37. Clase View disponible para reproducir archivos

Adems permite realizar las mismas funcionalidades de stop, pause,
etc.. que la clase MediaPlayer.

mVideoView.setVideoPath(getDataSource(path));
mVideoView.start();
mVideoView.requestFocus();

MediaPlayer mp = new MediaPlayer();
mp.setDataSource(PATH_TO_FILE);
mp.prepare();
mp.start();


89
4.7 Localizacin GPS y Mapas

Uno de las actividades ms notorias es la facilidad con la que las aplicaciones
de Android pueden trabajar con la API de Mapas que Google facilita.

Amn de los mapas, otra funcin es la geolocalizacin que se puede
realizar del terminal en cuestin.

En primer lugar se empezar a tratar en cmo utilizar la seal GPS para
posteriormente pasar a utilizar los mapas.

4.7.1 Uso de la seal GPS

En el uso de la seal del GPS, existen una serie de clases con las cuales se puede
manejar la seal del dispositivo. Dentro de estas clases una de las principales, es
la clase LocationManager que se utiliza principalmente para gestionar la
localizacin del dispositivo.

Tambin existe la clase Location con la cual se representa una
localizacin geogrfica y la interfaz LocationListener con la que se capturan
los eventos asociados al dispositivo de localizacin.

Para poder acceder a cualquier servicio integrado del telfono, se realiza
mediante el mtodo getSystemService. Para acceder a este servicio y poder
luego gestionarlo hay que crear una constante del contexto en el que se indique
que el servicio que se desea es el de localizacin.

Para poder obtener la seal de GPS, se utiliza el mtodo
requestLocationUpdates que a su vez implementa un mtodo llamado
onLocationChanged que es invocado cada vez que se detecta que la seal
cambia.

En el cdigo Java que se muestra a continuacin podr verse con mejora
lo explicado en los prrafos anteriores.





public class EjemploGPS extends Activity {

private TextView latitud;
private TextView longitud;
private LocationManager locman;
private String contexto;
private String provider;
private Location location;

90

Cdigo 38. Creacin del programa que maneja los recursos de GPS

Antes de probarlo, no hay que pasar por alto que para poder utilizar la
seal GPS es necesario obtener permisos, de forma que stos tienen que
aparecer en el archivo AndroidManifest.xml:


Cdigo 39. Permisos necesarios para el acceso al recurso de GPS
Para poder emular dicha seal, se debe abrir un terminal de ejecucin en
el equipo y lanzar una conexin telnet hacia el emulador. Y ejecutar el comando
geo fix con la posicin geogrfica, es decir:



<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"></uses-
permission>

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

latitud=(TextView)findViewById(R.id.latitud);
longitud=(TextView)findViewById(R.id.longitud);

contexto=Context.LOCATION_SERVICE;
locman=(LocationManager)getSystemService(contexto);
provider=LocationManager.GPS_PROVIDER;
busca();
}

private void busca()
{
if(locman.isProviderEnabled(provider))
{
locman.requestLocationUpdates(provider, 0, 0,new
LocationListener(){
public void onLocationChanged(Location loc){
if(loc!=null){
location=loc;

latitud.setText("latitud"+location.getLatitude());

longitud.setText("longitud"+location.getLongitude());
}
}
public void onProviderDisabled(String provider){}
public void onProviderEnabled(String provider){}
public void onStatusChanged(String provider, int
status,Bundle extras){}
});
}
}
}

telnet localhost 5554
geo fix LONGITUD LATITUD


91
La ejecucin de dicho ejemplo sera la siguiente:


Figura 53. Ejecucin del programa ejemploGPS

4.7.2 Uso de mapas

El principal aliciente que presenta la programacin en Android, es la utilizacin
del servicio de los mapas de Google. Este servicio se usa posteriormente como
si fuera una View lo cual permite trabajar fcilmente con el mapa.

Antes de comenzar a conocer qu clases son las ms importantes a la
hora de crear mapas, es importante saber que para utilizar stas, no slo basta
con los permisos necesarios de acceso a Internet, sino que se necesita una clave
para poder utilizar la API de mapas de Google. Para poder obtener dicha clave
es imprescindible realizar una serie de pasos para registrarse y obtener los
permisos para programar con los mapas.
En cierta manera cada aplicacin que se utiliza en Android tiene
asignada un certificado de su autora. Dentro del entorno de programacin de
Eclipse, las aplicaciones estn firmadas bajo un certificado de prueba que se
obtiene a travs del fichero de claves debug.keystore.

Pero como en el caso de los mapas, los recursos son accesibles mediante
descarga y se necesita un certificado individual para poder utilizarlos.



92
El procedimiento para poder obtener el certificado individual, es el
siguiente:

1. Primero, debemos de obtener un resumen MD5 para conseguir el
certificado con el cual firmar la aplicacin. Dicho resumen se puede
generar con la herramienta keytool de la JDK de Java.



Cdigo 40. Obtencin de la clave para la firma de los mapas

Un ejemplo de huella puede ser el siguiente:



Cdigo 41. Certificado MD5

2. Despus, con esa huella generada, se debe registrar en la pgina
disponible de Google.

http://code.google.com/android/maps-api-signup.html

3. Y una vez efectuado el registro, desde Google se genera un cdigo donde
aparece la clave de la API para poder utilizar los mapas y la estructura
del componente View creado que se deber aadir en el archivo main.xml.
Dicha estructura es similar al cdigo que se muestra debajo.


Cdigo 42. Clave API del mapa

Realizados los trmites pertinentes para la generacin de la clave
necesaria y as poder trabajar con los mapas desde Android, hay que cerciorarse
de que se est trabajando con la API adecuada y con la cual se da el soporte
necesario para poder usar este nuevo tipo de componente View. Entonces desde
el equipo se abre una ventana de acceso al sistema mediante consola y se
ejecuta la siguiente sentencia:


Cdigo 43. Comando de listado de targets de Android


<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0YXlXnN2PDCEvQ4SKPxeOcguVzo5QmTopYguKew"
/>

keytool.exe - lista -alias androiddebugkey - almacn de claves "C : \
android \ debug.keystore " - storepass android android - keypass

Huella digital de certificado (MD5):
B1:1B:5D:7B:0B:8E:5C:0B:0E:DD:0D:6D:E1:0B:83:12

android list targets


93


Al ejecutar el comando de encima, se listar desde consola todos los
targets posibles que se pueden utilizar para poder escoger a la hora de
programar una aplicacin en Android.

Como lo que se busca es poder programar una aplicacin en la que se
usen componentes View que lleven embebidos mapas geogrficos, a la hora de
crear un nuevo proyecto se deber elegir el target que incluya las APIs
correspondientes. Este target especfico puede aparecer en el listado que se crea
a travs de la ejecucin del comando anterior as como se puede observar en la
siguiente imagen:



Figura 54. Listado de targets disponibles en el equipo


En el caso que tras ejecutar el comando de listado, no apareciera ningn
target con la API necesaria para poder utilizar los mapas, se deben de actualizar
la SDK de Android de forma que al igual que antes, desde consola se ejecuta el
comando que se ensea a continuacin y posteriormente realizar el mismo
procedimiento anterior descrito de listado.


Cdigo 44. Comando de actualizacin de la SDK de Android








android update sdk


94
Aparte de la eleccin del target necesario tambin hay que crear un
nuevo emulador o avd desde el que se pueda ver el resultado de la aplicacin
creada adems de realizar las pruebas pertinentes y como en principio no se
tiene ningn avd con el target de Google Maps se procede a la creacin de un
nuevo, con el target correspondiente.



Figura 55. Creacin de un emulador para mapas


4.7.2.1 Creacin de una aplicacin Android con uso de mapas

A la hora de crear un proyecto en Android en el que se desee el uso de mapas,
previamente se han debido de cumplir los requerimientos necesarios
anteriormente expuestos, cumplidos stos, es momento de pasar a comentar los
principales aspectos que se tienen que complementar para conseguir una
aplicacin de estas caractersticas.

En primer lugar, y despus de haber escogido el target adecuado para
esta clase de proyecto, hay que dirigirse al archivo AndroidManifest.xml en el
que se tiene que referenciar a las libreras necesarias para poder trabajar con
mapas desde Android, de manera que en el nodo application se tiene que
aadir el siguiente cdigo:



Cdigo 43. Permiso para el uso de la librera de mapas


<uses-library android:name="com.google.android.maps"></uses-library>


95

Adems de aadir las libreras que dan soporte a la aplicacin, tambin
es necesario incluir dentro de este archivo XML los permisos que se necesitan
para poder utilizar acceso a Internet. Dicha inclusin sera la que se muestra:


Cdigo 44. Permisos de Internet en una aplicacin Android
En segundo lugar, se pasa a crear la interfaz de usuario en la que se
muestre la presentacin que puede tener un mapa geogrfico en Android, y
para ello hay que utilizar la clase Activity de Android. Aunque para este caso
preciso, la clase Java que se implementar no heredar de la clase Activity si
no que lo har de la clase MapActivity.

Con la clase MapActivity se puede manejar todo el ciclo de vida
comprendido para una aplicacin y realizar todas las gestiones necesarias
requeridas en cuanto a la representacin de mapas. Adems con esta clase
proporcionada se crea una nueva Activity en la que su componente principal
es el MapView.

En este cdigo, se muestra como quedara confeccionada la clase Java con
la que se va a trabajar con mapas.


Cdigo 45. Ejemplo de una clase Java que utiliza mapas

En referencia al cdigo Java mostrado, hay que hacer mencin especial al
componente MapView que es el encargado de desplegar el mapa proporcionado
por Google como un elemento que forma parte de la interfaz que se muestra al
usuario. Como ejemplo, se ensea como quedara plasmado en el archivo
main.xml que es dnde se declara la interfaz de usuario que se utiliza, la
declaracin del componente MapView en cuestin.
public class EjemploMapa extends MapActivity {

private MapView mapView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mapView=(MapView)findViewById(R.id.mapview);

}

protected boolean isRouteDisplayed(){
return false;
}
}

<uses-permission android:name="android.permission.INTERNET"></uses-
permission>


96













Cdigo 46. Ejemplo de archivo main.xml de una aplicacin Android con mapas

Adems de este componente imprescindible, tambin es importante que
para poder crear la clase Java, sta herede de la clase MapActivity, y
sobrescribir el mtodo isRouteDisplayed el cual devuelve un valor true si el
componente Activity devuelve informacin sobre la ruta o conjunto de
indicaciones de la obtencin del recurso y en cualquier otro caso devolver un
valor de false.

En la siguiente imagen mostrada puede verse un claro ejemplo de cmo
se mostrara un mapa desde el emulador de Android.



Figura 56. Ejecucin de una aplicacin con mapas



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:enabled="true"
android:apiKey="0YXlXnN2PDCEvQ4SKPxeOcguVzo5QmTopYguKew"
/>
</LinearLayout>


97
Otra de las peculiaridades que ofrece el componente visual MapView, es
la posibilidad de poder cambiar de imagen estndar como la mostrada en la
imagen anterior. Como ejemplos posibles puede servir una visin desde el
satlite, el trfico estimado o una simple muestra del callejero. Para hacer
posible este cambio existen diferentes mtodos provistos desde el componente
MapView que se pueden ver en el siguiente cdigo.



Cdigo 47. Posibles perspectivas de un mapa en Android

A la hora de fijar un punto en el mapa, se hace uso de la clase GeoPoint
que sirve para poder fijar una localizacin geogrfica dentro del componente
MapView. Al crear una ocurrencia de la clase GeoPoint, se le envan la longitud
y la latitud del punto en cuestin.



Cdigo 48. Ejemplo de una ocurrencia de tipo GeoPoint

Aparte de las clases habladas anteriormente, desde Android se ofrecen
otra serie de clases las cuales sirven para el manejo de mapas. De entre estas
clases anexas hay que destacar la clase MapController, cuyo uso se dedica
principalmente al control del mapa. Adems esta clase permite centrar la
posicin del mapa as como ejercer el control sobre el nivel del zoom aplicado
sobre el componente visual.

Para obtener dicho control, se ha de crear un nuevo objeto de la clase
MapController, y que ste obtenga dicho poder mediante el mtodo
getController() proporcionado por el componente MapView. Con mayor
claridad, se puede ver en el siguiente cdigo.


Cdigo 49. Ejemplo de un objeto de tipo MapController



private GeoPoint punto;

String coordenadas[] = {"40.406944", "-3.875"};
double lat = Double.parseDouble(coordenadas[0]);
double lng = Double.parseDouble(coordenadas[1]);

punto = new GeoPoint((int) (lat * 1E6),(int) (lng * 1E6));

mapView.setSatellite(true);
mapView.setStreetView(true);
mapView.setTraffic(true);
private MapController controlador;

controlador=mapView.getController();

98
Una vez que se obtiene el control sobre el componente MapView, con la
ocurrencia creada de la clase MapController se puede asignar un punto del
mapa en concreto y fijarlo como centro de la imagen cartogrfica mostrada. Al
igual que hacer fijo un punto en particular, desde la clase MapController se
pueden fijar los niveles de zoom para poder ver la representacin del mapa ms
alejada o cercana. A continuacin se muestra el cdigo necesario para poder
adoptar dichas cualidades.


Cdigo 50. Ejemplo de uso de zoom en un programa Android con mapas

Como se puede ver en el cdigo anterior, para poder ejercer control sobre
el zoom se utiliza el mtodo setZoom() al cual se le pasa como parmetro un
valor entero comprendido entre 1 y 21 que representan el grado ms lejano y
cercano respectivamente. A la hora de fijar un punto como centro del mapa se
puede realizar por medio del mtodo setCenter(), aunque tambin se puede
hacer con el mtodo animateTo().

En la siguiente imagen se puede ver la ejecucin de estas nuevas
cualidades que se han comentado previamente:


Figura 57. Ejecucin de una aplicacin con mapas en Android
private GeoPoint punto;
private int valorzoom;

valorzoom=controlador.setZoom(MEDZOOM);

String coordenadas[] = {"40.406944", "-3.875"};
double lat = Double.parseDouble(coordenadas[0]);
double lng = Double.parseDouble(coordenadas[1]);

punto = new GeoPoint((int) (lat * 1E6),(int) (lng * 1E6));

controlador.animateTo(punto);



99

De la misma forma que existe la clase MapController para poder ejercer
determinadas acciones sobre el mapa, tambin existe la clase Overlay, cuyo
empleo se encamina sobre el poder anotar texto o pintar sobre el mapa
mediante el uso de clases Canvas. La clase Overlay tiene como principal
objetivo permitir incluir dibujos, texto, lneas, imgenes o formas dentro de un
componente MapView adems de manejar los clicks realizados sobre el mapa.

El modo en el cual se aaden uno o ms Overlays es a base de capas
sucesivas que se superponen obstruyendo la capa ms reciente a la ms
antigua. Al crear estas capas, se debe de crear una clase que herede de la clase
Overlay en la que se deben de sobrescribir los mtodos draw(), el cual se
encarga de aadir todas las anotaciones creadas y el mtodo onTap(), que se
utiliza ante los eventos generados por los clicks del usuario. En el caso ejemplo
slo se tratar el primero de estos eventos.



Cdigo 51. Ejemplo de clase Overlay

Para aadir una anotacin dentro de la clase Overlay se recurre a la clase
Canvas que se encarga de pintar dicho texto dentro del componente MapView.
Si lo que se desea, es incluir una anotacin a una localizacin fsica, se debe
realizar previamente una conversin entre el punto en cuestin y las
coordenadas dentro de la pantalla.

Al realizar esta transformacin, se ha utilizado la clase Projection que
permite realizar el cambio de longitud /latitud a un punto situado dentro del
eje de abscisas y ordenadas de la pantalla y viceversa. El nuevo objeto de tipo
Projection se crea por medio de la asignacin del mtodo getProjection()
del componente MapView. Y la conversin citada se realiza por medio del
mtodo toPixels() si se desea obtener las coordenadas x /y de un punto
geogrfico o por el mtodo fromPixels() si se desea lo contrario.


Cdigo 52. Ejemplo de transformacin de un punto geogrfico a un punto de la pantalla

private GeoPoint punto;
private Point mipunto;

mipunto = new Point();
mapView.getProjection().toPixels(punto, mipunto);
public class MiOverlay extends Overlay{

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{

}
}

100

En el cdigo siguiente, se puede contemplar lo comentando en los
prrafos anteriores:


Cdigo 53. Ejemplo completo de una clase Overlay
public class MiOverlay extends Overlay{

//variables de localizacin
private GeoPoint punto;
private Point mipunto;

private int radio=5;
private Paint pinta;
private Paint pinta2;
private Paint pinta3;

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
String coordenadas[] = {"40.406944", "-3.875"};
double lat = Double.parseDouble(coordenadas[0]);
double lng = Double.parseDouble(coordenadas[1]);

punto = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));

//transformamos el punto de geolocalizacion a pixeles
mipunto = new Point();
mapView.getProjection().toPixels(punto, mipunto);

//crear circulo
RectF circulo=new RectF(mipunto.x-radio,mipunto.y-
radio,mipunto.x+radio,mipunto.y+radio);
RectF fondo=new RectF(mipunto.x+radio-1,mipunto.y-
5,mipunto.x+10*radio,mipunto.y+5);

//modo de pintar
pinta=new Paint();
pinta.setARGB(250, 255, 0, 0);
pinta.setAntiAlias(true);
pinta2=new Paint();
pinta2.setARGB(250, 250, 250, 250);
pinta2.setAntiAlias(true);
pinta3=new Paint();
pinta3.setFakeBoldText(true);
pinta3.setARGB(255,0, 0, 0);
pinta3.setAntiAlias(true);

//pintar en el mapa
canvas.drawOval(circulo, pinta);
canvas.drawRect(fondo, pinta2);
canvas.drawText("BOADILLA DEL MONTE", mipunto.x+radio,
mipunto.y, pinta3);

}

}

101
A la hora de aadir la clase Overlay creada al componente MapView se
puede observar en el cdigo que se muestra a continuacin.


Cdigo 54. Ejemplo de adhesin de un objeto Overlay al componente MapView

Para acabar finalmente con la clase Overlay, comentar brevemente que
existe una clase especial que se dedica principalmente a mostrar la localizacin
actual del dispositivo en un componente MapView a travs de la clase
MyLocationOverlay.

La ejecucin de una aplicacin en Android en la cual se combine por un
lado mapas y por otro lado clases Overlay es la siguiente:


Figura 58. Ejecucin de una aplicacin Android con mapas y objetos Overlay


En Android existe tambin otra forma con la cual se pueden aadir
componentes visuales como objetos Views o ViewGroups en vez de utilizar la
clase Overlay. Este procedimiento se realiza de tal manera que queden
adjuntos dichos objetos al componente MapView en una determinada posicin al
igual que sucede con las ocurrencias de la clase Overlay.


miOverlay=new MiOverlay();
overlays=mapView.getOverlays();
overlays.add(miOverlay);

102
Una vez que se haya creado el objeto View, se deber asignar al
componente MapView en cuestin mediante el mtodo addView, al cual se le
pasan como argumentos el objeto a incrustar en el mapa y la posicin deseada
dentro de ste. Dicha posicin viene dada por un objeto de tipo
MapView.LayoutParams que sirve para determinar dnde y cmo ser el objeto
View a desplegar dentro de la pantalla. Para verlo con mayor precisin se aade
el siguiente cdigo.















Cdigo 55. Adhesin de un objeto View a un mapa

Otro dato a tener en cuenta a la hora de adjuntar este tipo de objetos
View, es que se debe realizar dentro de los mtodos onCreate u onRestore de
la clase MapActivity con la que se trabaje.

La ejecucin resultante del cdigo anterior es la que se muestra a
continuacin:


Figura 59.Ejecucin de la adhesin de un objeto View a un mapa

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

mapView=(MapView)findViewById(R.id.mapView);
crearMapa();
pto= new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTET
,MapView.LayoutParams.WRAP_CONTENT,punto,MapView.LayoutParams.
RIGHT);
layout=new LinearLayout(this);
layout.setBackgroundColor(Color.LTGRAY);
texto=new TextView(this);
texto.setText("BOADILLA DEL MONTE");
texto.setTextColor(Color.BLACK);
layout.addView(texto);
mapView.addView(layout, pto);
}


103
4.8 Uso de recursos de Internet

Otra de las peculiaridades que proporciona Android es el modo en el cual se
pueden acceder a diferentes recursos, y uno de ellos es Internet. Por ello se
tratar de mostrar cmo acceder a un recurso mediante la conexin a Internet y
se ensear un ejemplo didctico: un traductor que accede va web al traductor
online de Google.


Para poder acceder a los recursos de Internet, la aplicacin debe poseer
permisos y a su vez tiene que quedar reflejado en el archivo
AndroidManifest.xml. De tal manera que debe aparecer el siguiente nodo:



Cdigo 56. Permisos necesarios para el uso de Internet en una aplicacin Android

Obtenidos los permisos para el acceso a Internet, se debe de crear un
patrn de acceso al recurso de Internet. Dicho patrn es el siguiente:


Cdigo 57. Clase Java de acceso al traductor de Google

try{
URL url=new URL(direccion);
URLConnection connection=url.openConnection();
HttpURLConnection
httpConnection=(HttpURLConnection)connection;
int respuesta=httpConnection.getResponseCode();
if(respuesta==HttpURLConnection.HTTP_OK){
InputStream in=httpConnection.getInputStream();
StringBuilder sb=new StringBuilder();
String line;
try{
BufferedReader br=new BufferedReader(new
InputStreamReader(in));
while((line=br.readLine())!= null){
sb.append(line);
}
}finally{
in.close();
}
aux=sb.toString();

traduccion=aux.substring(aux.indexOf(":\"")+2,aux.indexOf("\"},"));
System.out.println(traduccion);

}
}catch(MalformedURLException e){

}
catch(IOException e){

}

<uses-permission android:name="android.permission.INTERNET"/>


104

Para este caso en particular la URL a la cual accedemos para obtener el
recurso es la formada por las siguientes cadenas de texto:


Cdigo 58. Ejemplo de URL necesaria para acceder al traductor de Google

Como se puede apreciar, la URL la conforman la concatenacin de la
cadena direccin ms el texto que se quiera traducir, que a su vez queda
concatenado con la cadena espacio, y por ltimo, se indica desde que idioma
proviene el texto a traducir y a que idioma destino traducirlo.


Este simple ejemplo realiza la comprobacin de que se realiza traduccin
de un texto de espaol a ingls. Puesto que esto se puede extrapolar a diferentes
idiomas.


Figura 60. Ejemplo sencillo de un traductor











private String direccion=
"http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q
=;
private String espacio ="%20";
private String idioma= "&langpair=es%7Cen";


105
Captulo 5 Mquina Virtual

La virtualizacin es una nueva tecnologa que ha revolucionado el conjunto de
las TIC y el modo por el cual se utilizan los recursos proporcionados por un
ordenador. Esta nueva tecnologa consiste principalmente en desplegar diversas
mquinas virtuales alojadas dentro de una nica mquina fsica. Esta mquina
es la encargada de proporcionar los recursos necesarios para que stas puedan
llevar a cabo las actividades para las cuales son requeridas. Adems, en el
interior de cada una de estas mquinas virtuales se pueden ejecutar diferentes
sistemas operativos dentro una misma mquina fsica.


Mquina Virtual

Una mquina virtual es un receptculo que contiene un sistema operativo
completo que est totalmente abstrado y cuyo comportamiento es similar al de
un ordenador fsico, es decir, una mquina virtual es un componente software
capaz de almacenar diferentes sistemas operativos. stos pueden estar
compuestos por diversas aplicaciones y aislados e independientes de los dems
sistemas operativos funcionando como si de un nico ordenador se tratara.

Esta plataforma contenedora de software es la principal encargada de
gestionar los recursos proporcionados por el hardware de un ordenador, as
como de redistribuirlos eficazmente por los diferentes sistemas operativos
soportados y ser la interfaz entre la capa hardware real y el software
hospedado.

En la siguiente imagen, se puede ver un ejemplo sencillo de la
virtualizacin. El principal beneficio que otorga una mquina virtual es poder
compartir los diferentes recursos proporcionados por un ordenador entre las
diferentes mquinas virtuales. A modo de capas, en la capa ms inferior, se
encuentra el hardware. A continuacin se sostiene la mquina virtual y por
ltimo se sitan las capas de software con los diferentes sistemas operativos
virtualizados.


Figura 61. Ejemplo de capas de virtualizacin


106
Por lo tanto una mquina virtual es un paquete software capaz de
englobar una serie de recursos hardware virtual, un sistema operativo y
diversas aplicaciones que forman un conjunto fcil de portar y de gestionar.
Hacindolo totalmente independiente del hardware fsico sobre el que se
sostiene y a su vez aislado por completo de las diferentes mquinas virtuales
con las que conviva.


Ventajas de la virtualizacin

Las principales ventajas que propone la virtualizacin son las siguientes:

La reduccin de costes econmicos es una de las principales razones por
las cuales la visrtualizacin supone una gran ventaja. Gracias a la
virtualizacin se permite un ahorro considerable de recursos de tal
manera que conlleva una mejora en la productividad y control de la
infraestructura haciendo posible una disminucin considerable de
mquinas fsicas. Este hecho facilita en gran medida que se gane en
menor espacio fsico requerido implicando una reduccin importante de
gastos de energa, refrigeracin y otros costes de infraestructura.

Otra ventaja es la flexibilidad y dinamismo que tiene una infraestructura
virtual. La virtualizacin permite una asignacin y gestin de los
recursos permitiendo agruparlos y distribuirlos de manera que se
cumplan los requerimientos de nivel de servicio de forma ms rpida y
rentable; siendo la infraestructura susceptible a todo tipo de cambio.

Es una infraestructura altamente segura ofreciendo una gran
disponibilidad. La virtualizacin adems, puede servir como un
elemento ms de recuperacin dando un servicio ptimo como servicio
de backup ante situaciones o incidentes imprevistos.

















107
5.1 Creacin de una Mquina Virtual

En este apartado, se proceder a ver cmo se ha creado la mquina virtual sobre
la cual se ha construido todo el framwework necesario para poder desarrollar
aplicaciones en Android.

Para poder establecer la mquina virtual, se ha utilizado VirtualBox.
VirtualBox es un producto software de cdigo y distribucin libre sobre el cual
se va a implantar la infraestructura virtual. La finalidad que se busca con este
software es simular un entorno en el que se instale un sistema operativo
Ubuntu-Linux y sobre este ltimo reproducir todo los instrumentos necesarios
para poder programar aplicaciones de Android.


Figura 62. Logotipo VirtualBox

Como caracterstica principal VirtualBox aporta compatibilidad con
todos los ordenadores que cumplan el estndar x86, as como todas las ventajas
anteriormente citadas sobre las maquinas virtuales. Tambin proporciona una
interfaz sencilla e intuitiva desde la cual se puede instaurar un sistema
operativo simulado como si fuera un ordenador autnomo e independiente.

Para llevar a cabo la virtualizacin de un sistema operativo Ubuntu-
Linux desde VirtualBox se deben realizar los siguientes pasos:

1) Descargar el software VirtualBox desde su pgina web:

http://www.virtualbox.org/wiki/Downloads

2) Una vez descargado e instalado el producto VirtualBox , se pulsa sobre el
icono Nueva.


Figura 63. Creacin de una mquina virtual I

108

3) A continuacin se pulsa Siguiente y se pasa a seleccionar el tipo de sistema
operativo que se va a simular y el nombre que tendr la mquina virtual. Y
finalizado el proceso se pulsa otra vez el botn Siguiente.



Figura 64. Creacin de una mquina virtual II





Figura 65.Configuracin del sistema operativo de la mquina virtual







109
4) En el siguiente paso se selecciona parte de los recursos que dispondr la
mquina virtual, en este caso, se trata de la memoria RAM que se le asignar.



Figura 66.Configuracin de la memoria RAM de la mquina virtual



5) Despus se debe asignar el disco duro virtual en el cual se crear la imagen y
que har las veces de disco duro, donde se almacenarn todos los archivos del
sistema operativo virtualizado. Lo recomendable es escoger la opcin de
imagen dinmica en expansin, puesto que dicho sistema virtualizado no
requerir desde el principio la totalidad del disco sino que ir en aumento en
funcin de sus necesidades.



Figura 67.Configuracin del disco duro virtual I


110

Figura 68. Configuracin del disco duro virtual II


Figura 69. Configuracin del disco duro virtual III

6) Una vez elegida la capacidad y el lugar donde residir el disco virtual
creado, se pulsa al botn Terminar y en la pantalla principal pulsar la opcin de
Configuracin en donde se terminar de dar forma a la mquina virtual.


Figura 70. Creacin de una mquina virtual III


111
Es aqu donde se termina de dar los ltimos retoques para reproducir la
mquina virtual deseada. Por ejemplo, en la opcin Almacenamiento se
configura desde donde se va ejecutar el arranque inicial del sistema operativo
en cuestin, es decir, desde donde se comienza para que dicho sistema quede
almacenado en el disco duro virtual; este proceso de arranque se puede realizar
desde una imagen (.iso) o desde la unidad CD/DVD. Este procedimiento es
similar al que se puede realizar en un ordenador de sobremesa o porttil
cuando se instala el sistema operativo.


Figura 71. Creacin de una mquina virtual IV

Por ltimo solo falta pulsar la opcin de Iniciar, en cuanto se finalicen las
configuraciones deseadas.


Figura 72. Creacin de una mquina virtual V



112
Captulo 6 Valoracin econmica

Dentro de este apartado se va a proceder a realizar el desglose de los costes del
proyecto. Para ello, se ha tenido en cuenta el cmputo total de horas empleadas
por las personas involucradas en el desarrollo del mismo haciendo una
mencin especial en el papel desempeado por cuatro figuras imprescindibles
que son las siguientes:

- Coordinador de Proyecto: es la figura responsable de recoger y evaluar
el proyecto finalizado adems de realizar labores compartidas junto con
el Director de Proyecto, de seguimiento y supervisin del proyecto en
cuestin.

- Director de Proyecto: es el encargado de proponer el proyecto, facilitar la
labor de su elaboracin mediante sus indicaciones con el fin de orientarlo
por la senda idnea ante diversos problemas que surjan y llevar a cabo
una supervisin de los contenidos del proyecto as como el seguimiento
del mismo.

- Analista: como principales funciones que debe desempear el analista
destacan: la de distribuir las tareas necesarias para el desarrollo del
proyecto entre los diferentes programadores, supervisar el trabajo de
stos, realizar toda la labor de documentacin previa necesaria, as como
del diseo de la aplicacin y de elaborar y colaborar en la documentacin
final del proyecto.

- Programador: es la persona o grupo de personas que se encargan de
realizar el proyecto de acuerdo con las pautas marcadas por el Director
de Proyecto y/o Coordinador de Proyecto. Su organizacin se realiza
bajo la supervisin del Analista y tambin es el encargado de elaborar la
documentacin final.


A continuacin se muestra una tabla en la que se puede observar el total
de horas imputadas en el proyecto por cada uno de los cuatro integrantes
anteriormente descritos adems de obtener el coste proporcional que supone
cada hora invertida para cada uno de los componentes mediante una
estimacin aproximada a los costes medios por hora actuales en el mercado.








113


Componentes Horas /Hora Total
Coordinador del proyecto 25 60 1.500
Director del proyecto 90 40 3.600
Analista 280 20 5.600
Programador 160 10 1.600
Total 12.300

Tabla 2. Valoracin presupuestaria del proyecto

Una vez realizados los clculos necesarios en los que adems se muestra
la equivalencia de horas realizadas por cada rol y el coste equivalente de cada
uno se obtiene el presupuesto total del proyecto.































114
Captulo 7 Conclusiones y trabajos futuros

7.1 Conclusiones obtenidas

Tras la finalizacin del presente proyecto, se puede concluir que el principal
hito alcanzado ha sido el amplio conocimiento que se ha podido obtener de la
estructura del sistema operativo Android, as como de los elementos o
componentes necesarios para poder crear una aplicacin para un telfono mvil
que disponga de este sistema operativo en concreto. Otro resultado obtenido ha
sido la ventaja que ofrece la optimizacin de recursos y la portabilidad que
hoy da permite la virtualizacin.

El desarrollo de aplicaciones para telfonos mviles era prcticamente
utpico o de muy difcil acceso. Una de las principales razones se debe en gran
medida a la rigidez que presentaban en cuanto cdigo, puesto que eran difciles
de programar, dependientes de los recursos proporcionados y en cierta manera,
el alcance a este tipo de aplicaciones estaba reservado a personal especializado
en esta materia, hacindolas de acceso cerrado para cualquier desarrollador.

Tras la irrupcin de los nuevos sistemas operativos destinados
principalmente a telfonos mviles, se abra una nueva puerta a los
desarrolladores y un nuevo concepto en la programacin de aplicaciones para
dispositivos mviles en las cuales la interfaz de usuario es la principal baza.
Pero sin embargo seguan existiendo restricciones en cuanto al framework o
entorno de desarrollo y el despliegue de las aplicaciones creadas, que estn
principalmente sujetas a fuertes licencias de software.

Con la llegada del sistema operativo Android, no slo llega un sistema
operativo verstil y dinmico, sino que ofrece mltiples facilidades desde el
punto de vista del desarrollador de software. En contrapartida a otros sistemas
operativos destinados para terminales mviles existentes en el mercado,
Android hace posible que mediante el sustento y soporte proporcionados tanto
por la SDK y diversas API publicadas, la programacin de aplicaciones para
este sistema operativo sea ms fcil y llevadero sin que al programador le
acarree coste alguno.

Adems de la facilidad proporcionada a travs de las herramientas de
trabajo, otra ventaja es el uso de un lenguaje de alto nivel, Java, para poder
construir cualquier tipo de programa para Android.

Tambin cabe destacar la conectividad presentada entre los diversos
archivos tanto XML como Java destinados para la creacin de una aplicacin, al
igual que el uso de recursos tanto internos como externos que se realizan como
de la sencilla forma que tiene un programa Android, puesto que se puede
fcilmente desglosar en una serie diversa de componentes.

115

Por otro lado, hace falta hacer hincapi en una de las principales razones
por la que el sistema operativo Android es un serio competidor a tener en
cuenta y se debe principalmente a que se desarrolla bajo licencia Apache. Bajo
este tipo de licencia cualquiera puede conocer y modificar dicho sistema
dejando a expensas del desarrollador la libertad para poder distribuir el
software generado. As, de esta manera, se permite reconocer la labor que se
hace por parte del desarrollador y a diferencia de otros sistemas operativos de
este tipo, se puede tener acceso libre al ncleo primitivo que lo compone y
poder realizar los cambios que se deseen en funcin de la customizacin que
quiera otorgarle el desarrollador, adems de no tener ninguna restriccin en
cuanto a licencias software se refiere.

Por ltimo, concluir y decir que Android no slo supone un competidor
ms en el mercado de los sistemas operativos de los telfonos mviles puesto
que a parte de las caractersticas que presenta de cara a los usuarios finales en
cuanto trminos de usabilidad, permite poder desarrollar aplicaciones
facilitando todo tipo de herramientas y documentacin necesarias ayudando en
todo lo posible al programador y sin presentar ninguna traba legal al respecto a
diferencia de muchos de sus competidores. Es por ello, que este acceso libre al
contenido proporcionado por Android ha sido uno de los grandes factores en
su expansin e innovacin, haciendo de esta virtud una serie ventaja
competitiva en un mercado en el cual el riesgo de quedarse obsoleto puede
suponer un error considerable.






















116
7.2 Trabajos futuros

Un aspecto fundamental en el diseo de este tipo de aplicaciones es la
posibilidad de poder probar cualquier tipo de aplicacin creada dentro de un
telfono mvil que alberge el sistema operativo Android. En la actualidad,
existe una amplia gama de fabricantes que ofrecen este sistema operativo como
gestor de sus dispositivos, en contradiccin a los comienzos de Android en los
cuales muy pocos fabricantes se arriesgaban a introducir ste en sus nuevos
terminales.

Con el paso del tiempo, los fabricantes han aceptado el reto de confiar en
el nuevo sistema operativo desarrollado por Google de forma que poco a poco
se va consolidando en el mercado, pudiendo existir terminales de un conjunto
de fabricantes como bien pueden ser HTC, Samsung, Motorola, etc. An as
estos fabricantes desean recuperar la inversin ante semejante apuesta realizada
de modo que el acceso a las ltimas novedades ofertadas por los creadores de
hardware de dispositivos mviles supone una barrera no muy fcil de superar
debido principalmente al coste econmico que supone adquirir uno de estos
dispositivos. Aunque en cierto modo el acceso a estos telfonos mviles con este
tipo de caractersticas tan sealadas podrn ser accesibles en cuanto los costes
de fabricacin se vayan abaratando as como el sistema operativo Android se
afiance como uno de los principales del mercado, como sucedi algo similar con
los primeros terminales mviles que posean diversos recursos hardware
innovadores como cmara de fotos, cuyo coste era considerable hasta hoy da
en el cual es raro que ningn telfono mvil dispongo de estos recursos.

Entonces de acuerdo con lo expresado en los prrafos anteriores, sera de
buen agrado poder disfrutar de las propias aplicaciones creadas dentro de un
dispositivo que tenga a Android como sistema operativo. Tambin sera
gratificante para el desarrollador poder ver cmo sus propias aplicaciones
pueden funcionar en un telfono mvil, no slo por la satisfaccin generada si
no porque puede ser fundamental incluir este proceso dentro del ciclo de
pruebas del software ya que generalmente las pruebas realizadas a las
aplicaciones que se crean en Android se llevan a cabo desde el emulador, pero
como su propio nombre dice, es un reflejo o abstraccin de la realidad. Por
tanto, por mucho que el software sea probado en el emulador no se puede
garantizar al cien por cien que una vez desplegado en el dispositivo no sea
susceptible de fallo.









117
Captulo 8 Bibliografa

La bibliografa utilizada para la elaboracin del proyecto es la que se muestra a
continuacin:

[MEI09] Meier, Retro; Professional Android Application Development.
Wrox.2009

[MEI10] Meier, Retro; Professional Android 2 Application Development.
Wrox.2010

[DEVAND] Android Developers. http://developer.android.com/index.html

[ANDGR] Android Develovepers Group.
http://groups.google.com/group/android-developers

[ANDDEV] Android Development Community. http://www.anddev.org/

[ANDSPA] Android-Spa. http://www.android-spa.com/

[ANDES] And.roid.es. http://and.roid.es/

[FER09] Fernndez Fernndez, Carlos Alberto; Investigacin sobre
Android. Universidad Tecnolgica de la Mixteca.2009.
http://www.utm.mx/~caff/poo/AndroidIntro.pdf

[ANDSOL] Android Solutions. Desarrollo de aplicaciones para Android.
http://www.androidsolutions.es/category/desde-cero/

[ANDJAV] Android Javienlinux. Plataforma para mviles.
http://stackoverflow.com/questions/tagged/android

[OREITR] OReilly training. http://training.oreilly.com/

[STACKOV] StackOverflow.
http://stackoverflow.com/questions/tagged/android

[WIKIAND] Wikipedia Android. http://es.wikipedia.org/wiki/Android

[WIKISYM] Wikipedia Symbian. http://es.wikipedia.org/wiki/Symbian_OS

[WIKIBB] Wikipedia BlackBerry.
http://es.wikipedia.org/wiki/BlackBerry_OS

[WIKIOS] Wikipedia iPhone. http://es.wikipedia.org/wiki/IPhone_OS


118
[SYMDEV] Symbian Developer. http://developer.symbian.org/

[IPSOFTW] iPhone SoftWare.
http://www.iphonesoftware.es/2008/04/15/el-sistema-
operativo-de-iphone/

[MOVFOR] Movil Forum.
http://www.movilforum.es/c/document_library/get_file?folderI
d=73602&name=DLFE-4802.pdf

[ADMOB] AdMob Mobile Metrics. http://metrics.admob.com/

[DIRAND] Diario Android.
http://diarioandroid.com/2009/05/06/comparativa-entre-
sistemas-operativos-moviles/#more-1717

[ECON] Eroski Consumer.
http://www.consumer.es/web/es/tecnologia/software/2009/10
/14/188468.php?page=2

[IDEG] IDG. http://www.idg.es/pcworldtech/Sistemas-operativos-
moviles:-en-busca-de-un-estand/art188636-.htm

[BITJAV] Bitcora de Javier Cancela.
http://javiercancela.com/2007/10/17/introduccion-al-desarrollo-
de-aplicaciones-para-telefonos-moviles-symbian/
http://javiercancela.com/2007/11/05/introduccion-al-desarrollo-
de-aplicaciones-para-telefonos-moviles-blackberry/
http://javiercancela.com/2007/10/19/introduccion-al-desarrollo-
de-aplicaciones-para-telefonos-moviles-windows-mobile/
http://javiercancela.com/category/iphone/


[BLOGEV] Blog de Edgar Velarde. http://blog.pucp.edu.pe/item/62443/los-
sistemas-operativos-moviles-alianzas-obstaculos-y-competencia

[BLOGJR] Blog de JRamrez. http://jramirez-favoritos.blogspot.com/

[WIKIVIR] Wikipedia virtualizacin. http://es.wikipedia.org/wiki/Virtualizacin

[VMWAR] VMware. http://www.vmware.com/es/virtualization/

[IBMVIR] IBM Virtualizacin.
http://www304.ibm.com/businesscenter/smb/es/es/solucionesdenegocio/i
nfraestructura/virtualizacion



119
Captulo 9 ndice de figuras

Figura 1. Diagrama de sectores del mercado de la telefona mvil

Figura 2. Cuota de mercado de los diferentes competidores

Figura 3. Dispositivo con sistema operativo Symbian

Figura 4. Dispositivo N-gage

Figura 5.Dispositivos con Windows Mobile

Figura 6. iPhone

Figura 7. Estructura iPhone OS

Figura 8. Dispositivo BlackBerry

Figura 9. Logotipo empresa RIM

Figura 10. Android

Figura 11. Icono de Android

Figura 12.Estructura del sistema operativo Android

Figura 13.Icono licencia Apache

Figura 14.Ciclo de vida componente Activity

Figura 15. Configuracin de la variable del sistema

Figura 16. Configuracin de la SDK como Path del sistema

Figura 17. Configuracin del plugin de Android en Eclipse I

Figura 18. Configuracin del repositorio ADT

Figura 19. Configuracin del plugin de Android en Eclipse II

Figura 20. Configuracin del path de la SDK de Android en Eclipse

Figura 21. Icono Plugin Android en Eclipse

Figura 22. Configuracin del emulador de Android


120
Figura 23. Actualizador de versiones

Figura 24. Imagen DDMS

Figura 25. Creacin de un nuevo proyecto Android I

Figura 26. Creacin de un nuevo proyecto Android II

Figura 27. Configuracin del proyecto Android a ejecutar I

Figura 28. Configuracin del proyecto Android a ejecutar II

Figura 29. Ejecucin del programa HolaMundo

Figura 30. Estructura jerrquica de la clase View

Figura 31. Salida por pantalla de un elemento EditText

Figura 32. Visualizacin de un elemento ListView

Figura 33. Ejecucin de elemento Spinner I

Figura 34. Ejecucin de elemento Spinner II

Figura 35. Ejecucin elemento Button

Figura 36. Ejecucin elemento Checkbox

Figura 37. Ejecucin elemento RadioButton

Figura 38. Jerarqua ViewGroup

Figura 39. Ejecucin elemento FrameLayout

Figura 40. Ejecucin elemento LinearLayout I

Figura 41. Ejecucin elemento LinearLayout II

Figura 42. Ejecucin del elemento RelativeLayout

Figura 43. Ejecucin del elemento TableLayout

Figura 44. Ejecucin del elemento AbsoluteLayout

Figura 45. Ejecucin de un Men de tipo Icono


121
Figura 46. Ejecucin de un Men de tipo Expansin

Figura 47. Ejecucin de un Men de tipo Submen

Figuras 48 y 49. Ejecucin de los dilogos de Alerta y de Progreso

Figuras 50 y 51. Ejecucin de un componente Intent

Figura 52. Ejecucin de un archivo de msica

Figura 53. Ejecucin del programa ejemploGPS

Figura 54. Listado de targets disponibles en el equipo

Figura 55. Creacin de un emulador para mapas

Figura 56. Ejecucin de una aplicacin con mapas

Figura 57. Ejecucin de una aplicacin con mapas en Android

Figura 58. Ejecucin de una aplicacin Android con mapas y objetos Overlay

Figura 59.Ejecucin de la adhesin de un objeto View a un mapa

Figura 60. Ejemplo sencillo de un traductor

Figura 61. Ejemplo de capas de virtualizacin

Figura 62. Logotipo VirtualBox

Figura 63. Creacin de una mquina virtual I

Figura 64. Creacin de una mquina virtual II

Figura 65.Configuracin del sistema operativo de la mquina virtual

Figura 66.Configuracin de la memoria RAM de la mquina virtual

Figura 67.Configuracin del disco duro virtual I

Figura 68. Configuracin del disco duro virtual II

Figura 69. Configuracin del disco duro virtual III

Figura 70. Creacin de una mquina virtual III


122
Figura 71. Creacin de una mquina virtual IV

Figura 72. Creacin de una mquina virtual V

Você também pode gostar