Está en la página 1de 205

Gua de Android Certified Professional

1. Introduccin.
1.1. Historia.
1.2. Qu es Android?
1.3. Qu necesito para programar en Android?
2. Arquitectura del sistema operativo
2.1. Arquitectura general
2.2. La mquina virtual de Android
2.3. Procesos en Android
3. Componentes de una aplicacin
3.1. Actividades (Activities)
3.1.1. Callbacks de una Actividad
3.2. Intenciones (Intents)
3.2.1. Tipos de Intents
3.2.2. Intent Filter
3.3. Proveedores de contenido (Content Provider)
3.4. Servicios (Services)
3.5. Receptores de radiodifusin (Broadcast Receiber)
4. Entorno de desarrollo
4.1. Instalacin de Android Studio
4.1.1. Requisitos del sistema
4.2. Instalacin de plataformas
4.3. Android Virtual Device (AVD) Manager
4.4. Comandos para AVD
5. Fundamentos de una aplicacin.
5.1. Creacin y estructura de un proyecto Android
5.1.1. Estructura de un proyecto
5.2. Trabajando con el archivo AndroidManifest.xml
5.3. Trabajando con el archivo Build.gradle
5.3.1. Archivo Proyect Build
5.3.2. Archivo Module Build
6. Creacin y manejo de Actividades.
6.1. Uso de recursos en una aplicacin
6.2. Seguridad y permisos
6.3. Uso de los mensajes Log
7. Interfaz de usuario y controles
7.1. Unidades y layout
7.2. Objetos Widgets
7.3. Uso de ListView
7.3.1. Listas simples
7.3.2. Listas personalizadas
7.4. Uso de TabLayout
8. Temas, estilos y elementos grficos
8.1. Creacin y uso de estilos
8.2. Creacin de iconos y comprensin de tamaos
8.3. Uso de la herramienta draw9patch
1

Gua de Android Certified Professional

8.4. Comprensin de tamao de pantalla y densidad


8.4.1. Un poco ms sobre DP
9. Animaciones y grficos
9.1. Animacin cuadro a cuadro (Frame animation)
9.2. Animacin sincronizada (Tween animation).
9.3. Trabajar con grficos 2D.
10. Mens
10.1.
Men de opciones
10.2.
Men contextual
10.3.
Men popup
11. Dilogos y notificaciones.
11.1.
Dilogos
11.1.1. Crear dilogos de alerta.
11.1.2. Crear dilogos personalizados
11.1.3. Crear dilogos de progreso
11.2.
Notificaciones.
11.3.
Notificaciones Toast
11.3.1.
Toast simple
11.3.2.
Toast personalizado
12. Multimedia.
12.1.
Reproduccin de audio con MediaPlayer
12.2.
Reproduccin de video con MediaPlayer
12.3.
Reproduccin de video con VideoView
12.4.
Acceso a la cmara
13. Persistencia y almacenamiento de datos
13.1.
SharedPreferences
13.2.
PreferencesActivity
13.3.
Sistema de archivos interno y externo
13.3.1.
Almacenamiento interno
13.3.2.
Almacenamiento externo
13.4.
Base de datos en SQLite
14. Geolocalizacin y mapas
14.1.
Geolocalizacin
14.2.
Criteria
15. Profundizando en la interfaz de usuario
15.1.
Fragmentos
16. Consumo de servicios web
16.1.
SOAP
16.2.
REST
16.3.
JSON
17. Multitasking
17.1.
Loaders
17.2.
AsyncTask
18. Integracin con redes sociales
18.1.
Facebook
2

Gua de Android Certified Professional

18.2.
Twitter
19. Conectividad
19.1.
Http
19.2.
Wifi
19.3.
Bluetooth
20. Realidad aumentada
21. Tpicos avanzados
21.1.
Servicios
21.1.1.
Servicio iniciado
21.1.2.
Servicio vinculado
21.2.
Content Provider
22. Publicacin de una aplicacin
22.1.
Preparacin de la aplicacin
22.2.
Firma y creacin del archivo APK
22.3.
Publicacin en Google Play
22.4.
Control de versiones
22.5.
Monetizacin de una aplicacin

Gua de Android Certified Professional

1. Introduccin
1.1.

Historia

Breve historia de los inicios del sistema operativo Android, los creadores, el
primer dispositivo mvil que se bas en Android y alguno de los principales hitos
en su historia.
En el ao 2003, cuatro expertos en tecnologa, Andy Rubin, Rich Miner, Nick
Sears y Chris White, se unieron para crear la empresa Android Inc., esta
empresa fue ubicada en Palo Alto California. Los cuatro trabajaron para crear un
sistema operativo para dispositivos mviles que pudiera ser consiente tanto de
la ubicacin de un usuario y permitiera ser configurado en base a las
preferencias de este.
En Agosto de 2005, Google compro Android Inc., aunque el precio de la compra
nunca ha sido revelado, se estima que ronda los 50 millones de dlares. Andy
Rubin, uno de los creadores de Android, trabaj de 2005 a 2013 como
vicepresidente de ingeniera de Google. El 13 de Marzo de 2013, Rubin anuncia
en su blog personal que se retira de Google para dedicarse a otros proyectos
externos, ocupando su lugar Sundar Pichai.
El 5 de Noviembre de 2007 Google dio a conocer la Open Handset Alliance
(OHA), una agrupacin de fabricantes de tecnologa que trabajan en conjunto
para crear estndares abiertos para dispositivos mviles. Las empresas de la
coleccin
incluan
proveedores
de
servicios
inalmbricos
de
telecomunicaciones, fabricantes de telfonos mviles y fabricantes de chipsets.
Con este anuncio, Google dejaba en claro que sera diferente a otros sistemas
operativos mviles, ya que no se limitara simplemente a un dispositivo o
fabricantes. En octubre de 2008, fue lanzado al mercado el primer dispositivo
inteligente con Android, el HTC Dream.

Gua de Android Certified Professional

Los inicios de Android fueron un poco lentos, ya que primero fue lanzado el
sistema operativo (Octubre de 2008) y posteriormente el primer dispositivo mvil,
el HTC Dream, tambin conocido como T-Mobile G1 (2010). Esto no ha sido
problema para que el sistema operativo tenga ganados muchos adeptos y ha
demostrado una velocidad de madurez importante debido a los diferentes
fabricantes de hardware, que han adaptado interesantes piezas para acompaar
las diferentes funcionalidades del sistema operativo.

1.2.

Qu es Android?

Caractersticas principales de Android, se describen a grandes rasgos como est


formado el sistema operativo y porqu utiliza Java como lenguaje de
programacin.
Android es una pila de software pensada inicialmente para telfonos mviles
(smartphones) que incluye un sistema operativo, middleware y una capa
aplicaciones para que el telfono pueda realizar funciones ms all de los
dispositivos que se usaban antao.
Dejando un poco de lado los tecnicismos, Android es otra de las opciones de
interfaces y caractersticas que podemos encontrar en telfonos mviles; as
como podemos identificar aspectos particulares de un Nokia cuyo sistema
operativo es Windows Phone, o un iPhone con iOS o incluso los Blackberry,
tambin existen cosas muy especficas en los telfonos que funcionan con
Android.

Gua de Android Certified Professional

En trminos tcnicos, Android es un sistema operativo basado en el kernel de


Linux, por esa razn tiene inmersas las caractersticas de ser libre, gratuito y
multiplataforma. Cualquier desarrollador puede crear aplicaciones para Android
sin la necesidad de pagar membresas anuales para obtener el kit de desarrollo
(SDK).
Android utiliza una variacin del lenguaje de
programacin Java (Java ME). Si has
desarrollado en Java, seguramente conocers
lo que es trabajar con una mquina virtual que
sirve para interpretar todo ese cdigo que
genera nuestro programa (bytecode) y pueda
ejecutarse. Pues bien, Android, tiene una
adaptacin de esta mquina virtual y se llama
ART. Distinta de la virtual machine por default
de Java, ART es una excelente versin que
optimiza muchas cosas en la plataforma y
mucho de la rapidez de Android y de algunas
aplicaciones se debe precisamente a esto.

1.3.

Qu necesito para programar en Android?

En este tema se describen las principales herramientas que se utilizarn a lo


largo del curso, as como los recursos hardware y los conocimientos tericos
para poder desarrollar aplicaciones en Android.

Herramientas de software.
Sistema operativo. Una computadora que corra con Windows, Linux o Mac
OS. En Windows y en Linux no importa la arquitectura (32 bits o 64 bits).
Java. Se recomienda la ltima versin de Java disponible, puede
descargarse desde la siguiente pgina.
http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
Kit de desarrollo. La ltima versin del SDK de Android, puede descargarse
de la siguiente pgina.
https://developer.android.com/intl/es/sdk/index.html
IDE. Android ha puesto a disposicin de los desarrolladores su propio IDE,
Android Studio. Este entorno de desarrollo ya incluye la ltima versin del
SDK y puede ser descargado de la siguiente pgina.
https://developer.android.com/intl/es/sdk/index.html
6

Gua de Android Certified Professional

Conocimientos tcnicos.
Programacin orientada a objetos (POO). Si se ha programado en algn
lenguaje que se base en este paradigma (PHP, Python, Java, .NET, C o C++,
etc.) no debera implicar mayor problema empezar a desarrollar aplicaciones
para Android.
Conocimientos Java. Si se ha programado en Java, la migracin a Android
ser mucho ms sencilla ya que las aplicaciones de Android se crean en este
lenguaje de programacin.
Manejo de un IDE de desarrollo. Cualquiera que sea el lenguaje en el que
se tenga un poco de experiencia programando seguramente se ha hecho uso
de algn IDE (entorno de desarrollo integrado). Esto te ser til en el curso.

Herramientas hardware.
Equipo Android. Uno de los puntos importantes que se recomienda, es tener
es un telfono que corra con Android. Esto es porque de esta manera se
tendr una autntica forma de probar cmo es que corren las aplicaciones en
un ambiente real, adems de que existen algunos ejemplos prcticos que por
sus caractersticas es altamente recomendable ejecutarlos en un dispositivo
fsico.

Gua de Android Certified Professional

2. Arquitectura del sistema operativo.


2.1.

Arquitectura general

Descripcin de la arquitectura general del sistema operativo, as como las


principales caractersticas y funciones de cada nivel.
El sistema Android es una pila de software para dispositivos mviles el cual se
encuentra compuesto por el sistema operativo, un middleware (software
intermedio entre las aplicaciones y el sistema operativo) y un conjunto de
aplicaciones bsicas. Android provee una plataforma de desarrollo abierto y
ofrece a los desarrolladores la capacidad de crear aplicaciones ricas e
innovadoras, adems permite tomar las ventajas que ofrece el hardware del
dispositivo para mejorar las aplicaciones. Como desarrolladores se tiene total
acceso a las APIs del framework, ya que la arquitectura en Android esta
diseada para simplificar el reuso de los componentes, as como APIs para el
control de los dispositivos para conectividad, sensores, etc.

Gua de Android Certified Professional

A continuacin se mencionan las principales caractersticas de cada capa de la


arquitectura.
Kernel de Linux. Primer capa de la arquitectura, el ncleo del sistema operativo
Android esta basado en la versin 2.6 del kernel de Linux, similar al que puede
incluir cualquier distribucin de Linux, como Ubuntu, solo que adaptado a las
caractersticas del hardware en el que se ejecutara Android, es decir, adaptado
a dispositivos mviles.
El ncleo acta como una capa de abstraccin entre el hardware y el resto de
las capas de la arquitectura. El desarrollador no accede directamente a esta
capa, sino que debe utilizar las bibliotecas disponibles en capas superiores. De
esta forma tambin se evita tener que conocer las caractersticas precisas de
cada dispositivo. Por ejemplo, si se requiere hacer uso de la cmara, el sistema
operativo se encarga de utilizar la que incluya el equipo, sea cual sea. Para cada
elemento de hardware del dispositivo existe un controlador (driver) dentro del
kernel que permite utilizarlo desde el software.
Otra de las tareas del kernel es la de gestionar los diferentes recursos del
dispositivo (energa, memoria, etc.), y del sistema operativo (procesos, red, entre
otros).

Libraries (Bibliotecas). La siguiente capa que se sita justo sobre el kernel la


componen las bibliotecas nativas de Android. Estn escritas en C o C++ y

Gua de Android Certified Professional

compiladas para la arquitectura hardware especfica de cada dispositivo.


Normalmente estn hechas por el fabricante, quien tambin se encarga de
instalarlas en el dispositivo antes de ponerlo a la venta. El objetivo de las
bibliotecas es proporcionar funcionalidad a las aplicaciones para tareas que se
repiten con frecuencia, evitando tener que codificarlas cada vez y garantizando
que las tareas se llevan a cabo de forma ms eficientes.
Entre las bibliotecas incluidas habitualmente encontramos OpenGL (motor
grfico), Bibliotecas multimedia (formatos de audio, imagen y video), Webkit
(navegador), SSL (cifrado de comunicaciones), FreeType (fuentes de texto),
SQLite (base de datos), entre otras.
Android Runtime (Entorno de ejecucin). El entorno de ejecucin de Android
no se considera una capa como tal, dado que tambin esta formado por
bibliotecas. Aqu se encuentran las bibliotecas con las funcionalidades
habituales de Java, as como otras especficas de Android.
El componente principal del entorno de ejecucin de Android es la mquina
virtual. Las aplicaciones se codifican en Java y son compiladas en un formato
especfico para que esta mquina virtual las ejecute. La ventaja de esto es que
las aplicaciones se compilan una nica vez y de esta forma estarn listas para
distribuirse con la total garanta de que podrn ejecutarse en cualquier
dispositivo Android que disponga de la versin mnima del sistema operativo que
requiera la aplicacin.
Cabe aclarar que la mquina virtual de Android es una variacin de la mquina
virtual de Java, por lo que no es compatible con el bytecode Java. Java se
usa nicamente como lenguaje de programacin, y los ejecutables que se
generan con el SDK de Android tienen la extensin .dex que es especfico para
la mquina virtual de Android, y por ello no podemos correr aplicaciones Java en
Android ni viceversa.

Application Framework (Marco de aplicaciones). La siguiente capa esta


formada por todas las clases y servicios que utilizan directamente las
aplicaciones para realizar sus funciones. La mayora de los componentes de esta
10

Gua de Android Certified Professional

capa son bibliotecas Java que acceden a los recursos de las capas anteriores a
travs de la mquina virtual. Algunos de los componentes ms importantes se
listan en la siguiente tabla.

Nombre de la
servicios
Activity Manager
Windows Manager

Content Provider

Views

Notification Manager

Package Manager

Resource Manager

Location Manager

clase

o Descripcin
Se encarga de administrar la pila de actividades de
la aplicacin as como su ciclo de vida.
Se encarga de organizar lo que se mostrara en
pantalla. Bsicamente crea las superficies en la
pantalla que posteriormente pasarn a ser ocupadas
por las actividades.
Esta librera crea una capa que encapsula los datos
que se compartirn entre aplicaciones para tener
control sobre cmo se accede a la informacin.
Elementos que nos ayudarn a construir las
interfaces de usuario: botones, cuadros de texto,
listas y hasta elementos ms avanzados como un
navegador web o un visor de Google Maps.
Engloba los servicios para notificar al usuario cuando
algo requiera su atencin mostrando alertas en la
barra de estado. Un dato importante es que esta
biblioteca tambin permite el acceso a elementos
como el sonido, activar el vibrador o utilizar los LEDs
del dispositivo en caso de tenerlos.
Esta biblioteca permite obtener informacin sobre los
paquetes instalados en el dispositivo Android,
adems de gestionar la instalacin de nuevos
paquetes. Un paquete es la forma en que se
distribuyen las aplicaciones Android, estos contienen
el archivo .apk, que a su vez incluyen los archivos
.dex con todos los recursos y archivos adicionales
que necesite la aplicacin, para facilitar su descarga
e instalacin.
Permite gestionar todos los elementos que forman
parte de la aplicacin y que estn fuera del cdigo,
es decir, cadenas de texto traducidas a diferentes
idiomas, imgenes, sonidos o layouts.
Permite determinar la posicin geogrfica del
dispositivo Android mediante GPS o redes
disponibles y trabajar con mapas.
11

Gua de Android Certified Professional

Sensor Manager

Cmara

Multimedia
Telephony Manager

Permite manipular los sensores hardware del


telfono como el acelermetro, giroscopio, sensor de
luminosidad, sensor de campo magntico, brjula,
sensor de presin, sensor de proximidad, sensor de
temperatura, etc.
Con esta biblioteca podemos hacer uso de la(s)
cmara(s) del dispositivo para poder tomar fotos o
grabar video.
Permite reproducir audio, video e imgenes en el
dispositivo.
Con esta biblioteca podremos realizar llamadas o
enviar y recibir SMS/MMS, aunque no permite
reemplazar o eliminar la actividad que se muestra
cuando una llamada esta en curso.

Applications (Aplicaciones). En la ltima capa se incluyen todas las


aplicaciones del dispositivo, tanto las que tienen interfaz de usuario como las
que no, las nativas (programadas en C o C++) y las administradas (programadas
en Java), las que vienen preinstaladas en el dispositivo y aquellas que el usuario
ha instalado.
En esta capa encontramos tambin la aplicacin principal del sistema: Inicio
(Home) o lanzador (launcher), porque es la que permite ejecutar otras
aplicaciones mediante una lista y mostrando diferentes escritorios donde se
pueden colocar accesos directos a aplicaciones o incluso widgets, que son
tambin aplicaciones de esta capa.

2.2.

La mquina virtual de Android

Conocer ms sobre las dos mquinas virtuales de Android; Dalvik y ART, su


funcionamiento, principales caracterstica y la diferencia entre ellas.
La versin de Android 4.4.4 (Android Kit-Kat), tuvo un cambio muy importante
en la mquina de virtual del sistema operativo ya que incorpor dos versiones
12

Gua de Android Certified Professional

de la mquina virtual; Dalvik (de manera predeterminada) y ART (como


alternativa).
Hasta antes de la versin 4.4.4, la nica mquina virtual incluida en los
dispositivos que ejecutaban Android era Dalvik. Esta versin de la mquina
interprete estuvo presente en Android desde la versin 2.2 (Android Froyo) y a
partir de Android 5.0 (Android Lollipop) desaparece para darle control total a
ART.

Dalvik es una mquina virtual intrprete que ejecuta archivos en el formato Dalvik
Executable (*.dex), un formato optimizado para el almacenamiento eficiente y
ejecucin mapeable en memoria. Su objetivo fundamental es el mismo que
cualquier mquina virtual; permite que el cdigo sea compilado a un bytecode
independiente de la mquina en la que se va a ejecutar, y la mquina virtual
interpreta este bytecode a la hora de ejecutar el programa.
Dalvik est basado en el tipo de compilacin JIT (Just In Time), por lo que cada
vez que se ejecuta una aplicacin en el dispositivo, la parte del cdigo requerida
va a ser compilada a cdigo mquina en ese momento. A medida que se utilice
la aplicacin y se avance en ella el cdigo adicional va a ser compilado y
almacenado en cache para poder reutilizarlo posteriormente mientras la
aplicacin este en ejecucin.
ART, por otro lado, compila el lenguaje intermedio bytecode, en un archivo
binario dependiente del sistema. Todo el cdigo de la aplicacin ser precompilado durante la instalacin de la aplicacin, es decir solo una vez,
eliminando as el retraso que se puede observar cuando una aplicacin es
ejecuta en un dispositivo con Dalvik. A este proceso de pre-compilado se le
conoce como AOT (Ahead Of Time)
Dejando de lado el potencial aumento de velocidad en la ejecucin de las
aplicaciones, el uso de ART proporciona un beneficio secundario muy
importante; como ART ejecuta cdigo mquina directamente de la aplicacin, no
hace uso extenso del CPU, como en el caso de JIT, por lo que implica menos
consumo de batera del dispositivo.
En la siguiente imagen se puede observar una comparacin entre las dos
mquinas virtuales de Android.

13

Gua de Android Certified Professional

Independientemente de que versin de la mquina virtual de Android se utilice,


el uso de esta permite reducir bastante el tamao del programa buscando
informacin duplicada en las diversas clases y reutilizndola.
Lo que conocemos en Java como recolector de basura, que se encarga de
liberar el espacio en memoria de objetos que ya no utilizamos en nuestros
programas, ha sido perfeccionada en Android con el fin de mantener siempre
libre la mxima memoria posible.
De igual forma, el hecho de que Android haga un uso extenso del lenguaje XML
para definir las interfaces grficas y otros elementos, implica que estos archivos
deben ser vinculados a la hora de compilar y para que su conversin a bytecode
pueda mejorar el rendimiento de nuestras aplicaciones.

14

Gua de Android Certified Professional

A lo largo del este curso en Android se mostrarn tambin algunos consejos y


mejores prcticas para no depender nicamente de la mquina virtual a la hora
de hablar de rendimiento en aplicaciones.

2.3.

Procesos en Android

Los procesos en Android y la jerarqua de importancia que es manejada por el


sistema operativo. Criterios de eliminacin de procesos y asignacin de
recursos.
En la mayora de los escenarios, una aplicacin Android es ejecutada en su
propio proceso y con sus propios recursos. Este proceso Linux es creado para
la aplicacin cuando es ejecutada y seguir corriendo hasta que no sea
necesario o el sistema operativo reclame los recursos para otras aplicaciones.
El tiempo de vida de un proceso en Android es manejada por el sistema
operativo, basndose en las necesidades del usuario, los recursos disponibles,
etc. Si tenemos una aplicacin que esta consumiendo muchos recursos y
arrancamos otra nueva aplicacin, el sistema operativo probablemente le diga a
la aplicacin que se queda en segundo plano que libere todo lo que pueda, y si
es necesario la cerrara.
En Android los recursos son normalmente muy limitados y por eso el sistema
operativo tiene ms control sobre las aplicaciones que en programas de
escritorio.
El sistema operativo puede decidir eliminar un proceso en el mismo punto,
cuando la memoria es baja y se requiere memoria por otros procesos que estn
sirviendo al usuario. Los componentes de la aplicacin que estn corriendo en
el proceso que se apag, son consecuentemente destruidos y cuando se queda
pendiente trabajo para ellos, se inicia un nuevo proceso.
Para realizar este trabajo de manera eficiente y ordenada Android utiliza un
sistema de jerarquas de importancia" en el cual categoriza cada proceso que
se inicia en base a los componentes que se ejecutan en ese proceso y el estado
de los mismos, por ejemplo, los de importancia ms baja se eliminan primero.
El sistema de jerarquas de importancia cuenta con cinco niveles,
organizndolos en orden de mayor jerarqua a menor jerarqua seran los
siguientes.
1. Proceso en primero plano (Foreground Process). Un proceso que es
requerido para lo que el usuario est haciendo actualmente, aloja una
Actividad que se muestra en primer plano en pantalla y con la cual el usuario
esta interactuando en ese momento. Por lo regular habr muy pocos
15

Gua de Android Certified Professional

procesos de este tipo corriendo a la vez en el sistema y son aquellos que se


eliminarn como ltima opcin si la memoria se encuentra en un estado
crtico que ni matando al resto de procesos se tendrn los recursos
necesarios.
2. Proceso visible (Visible Process). Es un proceso que no tiene
componentes en el primer plano (Foreground Process), pero que puede
afectar lo que el usuario ve en la pantalla. Un ejemplo puede ser la aplicacin
de correo, en la cual demos clic en algn enlace de inters lo que provoca
que se ejecute el navegador, este pasara a ser el Foreground Process
dejando a la aplicacin de correo en el concepto de Visible Process. Este
tipo de procesos se cerrarn nicamente cuando el sistema no tenga los
recursos necesarios para mantener corriendo todos los procesos que estn
en primer plano.
3. Proceso de servicio (Service Process). Se trata de un proceso que esta
ejecutando un servicio que se ha iniciado con el mtodo startService() y
adems no se encuentra contemplado en alguna de las categoras antes
mencionadas. Estos procesos se encargan de realizar tareas en segundo
plano que normalmente son importantes para el usuario (conexin con
servidores, actualizacin del GPS, reproductor de msica, etc.), por lo que el
sistema nunca va a liquidar un proceso de servicio a menos que sea
necesario para mantener vivos todos los procesos visible o en primer plano.
4. Proceso en segundo plano (Background Process). Un proceso que
contiene una Actividad que no es actualmente visible para el usuario y no
tiene gran importancia. Los programas que ejecut el usuario hace tiempo y
no los ha vuelto a usar, pasan a estar en Background. Es importante que
cuando una aplicacin pase a segundo plano, el sistema libere, en la medida
de lo posible, todos los recursos que pueda para que su rendimiento sea
ptimo.
5. Proceso vaco (Empty Process). Entra en esta categora un proceso que
no contiene ningn componente activo de la aplicacin, y que solo esta
creado para fines de almacenamiento en cach o para mejorar el tiempo de
arranque de un componente la prxima vez que se ejecute.

16

Gua de Android Certified Professional

17

Gua de Android Certified Professional

3. Componentes de una aplicacin


3.1.

Actividades (Activities)

Caractersticas del componente principal de una aplicacin en Android y sus


mtodos callbacks ms importantes.
Una Actividad o Activity es el componente de la aplicacin que provee una
ventana, la cual puede tomar diferentes tamaos en pantalla, esta ventana es
con la que los usuarios pueden interactuar. Se puedes pensar en una Actividad
como el anlogo de una ventana en una aplicacin de escritorio.
En las Actividades recae la responsabilidad de presentar los elementos visuales
y reaccionar a las acciones del usuario. Es importante tener en cuenta que cada
Actividad es independiente de las dems por lo que no importa el nmero que
se incluyan en una aplicacin.
Cuando se crea una nueva Actividad, la Actividad anterior se detiene mediante
notificaciones llamadas Callbacks que el sistema operativo Android usa para
gestionar el ciclo de vida de cada Actividad.

3.1.1.

Callbacks de una Actividad.

El ciclo de vida de una Actividad est compuesta por siete callbacks que
permiten al sistema operativo administrar el ciclo de vida de una Actividad,
adems permiten a los desarrolladores realizar acciones al pasar por algn
punto del ciclo de vida. Las dos callbacks ms importantes que tiene una
Actividad son:

onCreate( ). Es la primera en ejecutarse cuando se crea la aplicacin.

onPause( ). Se ejecuta cuando otra Actividad acaba de entrar a primer


plano, o acaba de ser instanciada. La Actividad visible se vuelve
parcialmente visible.

Las otras callbacks que conforman el ciclo de vida son:

onRestart( ). Se ejecuta cuando el usuario vuelve a navegar a una


Actividad, luego de haber sido ocultada por otra Actividad.

onStart( ). Se ejecuta justo antes de que la Actividad sea visible para el


usuario y pueda interactuar con ella.

18

Gua de Android Certified Professional

onResume( ). Se ejecuta justo antes de que la Actividad comience a


interactuar con el usuario.

onStop( ). Se ejecuta cuando la Actividad ya no es visible para el usuario.

onDestroy( ). Se ejecuta justo antes de destruir la Actividad.

19

Gua de Android Certified Professional

20

Gua de Android Certified Professional

3.2.

Intenciones (Intents)

Definicin y principales caractersticas de los diferentes tipos de Intents e IntentsFilter, los cuales sirven para la comunicacin entre los componentes de Android.
Los Intents son mensajes (llamados as y definindose como estructuras que
describen de forma abstracta una operacin a realizar o de algo que ha ocurrido).
Estos mensajes permiten activar tres de los componentes bsicos de una
aplicacin: Activities, Services, y Broadcast Receivers. Existen diferentes
mecanismos para realizar la entrega de los Intents a cada tipo de componente.

Un Intent se enva como parmetro dentro del mtodo startActivity( )


startActivityForResult( ) para lazar una actividad.

Un Intent se enva como parmetro dentro del mtodo startService( )


para iniciar un componente servicio o entregar nuevas instrucciones a un
servicio en marcha. Tambin se puede enviar como parmetro dentro del
mtodo bindService( ) para establecer una conexin entre un
componente y un servicio.

Un Intent se enva como parmetro dentro de cualquiera de los mtodos


de
emisin
Broadcast
como;
sendBroadcast(
),
sendOrderedBroadcast( ) o sendStickyBroadcast( ), los cuales
entregan el Intent a cualquier receptor interesado (Broadcast Receiver).

Un Intent puede contener informacin de inters para el componente que lo


recibe, por ejemplo una accin a realizar o datos para poder realizar la accin,
as como para el sistema operativo, como la categora del componente que
recibe el Intent o como ser tratada la Actividad al momento de ser ejecutada.
Dentro de los principales elementos que pueden incluirse en un Intent tenemos.

Nombre del componente. Nombre del componente que debe manejar el


Intent,
en
formato
de
nombre
completo,
por
ejemplo:
mx.com.omnius.MainActivity.

Accin (Action). Es una accin general a realizar. La clase Intent define


constantes de accin que se permiten definir (Intent.ACTION_VIEW,
Intent.ACTION_CALL, Intent.ACTION_EDIT, Intent.ACTION_MAIN,
entre otras).

Datos (Data). Datos necesarios para realizar una accin o requeridos por
el componente que recibe el Intent.
21

Gua de Android Certified Professional

Categora. Proporciona informacin adicional sobre el tipo de


componente que debe manejar el Intent. Al igual que las acciones, existen
categoras
definidas
para
poder
utilizar,
por
ejemplo;
CATEGORY_HOME, CATEGORY_LAUNCHER.
Extras. Informacin adicional que puede incluir el Intent y es entregada
al componente que lo maneja, se caracterizan por tener un formato llave
valor.
Banderas (Flags). Una bandera permite indicarle al sistema operativo
como debe ser tratado un componente al momento de ser ejecutado o
despus de realizar su ejecucin, por ejemplo; como debe ser tratada una
Actividad dentro de la lista de Actividades recientes.

3.2.1.

Tipos de Intents.

Dentro de Android podemos encontrar dos grupos de Intents para manejar


componentes.

Intents Explcitos. Lanzan un componente, generalmente de la misma


aplicacin, a partir del nombre de la clase y el paquete en el que se
encuentra. Por ejemplo, si queremos mostrar una Actividad
especificaremos el nombre de esta.
Algunos ejemplos de Intents explcitos son:

22

Gua de Android Certified Professional

NOTA: Para: algunos de estos ejemplos puede ser necesario aadir al


archivo AndroidManifest.xml algunos permisos.

Intents Implcitos. Permiten lanzar componentes de otras aplicaciones.


Utilizan la accin a realizar como base para designar el componente a
lanzar. Por ejemplo, si queremos ver una pgina web, se indica la accin
y el sistema determinar que debe lanzar un navegador web.
Algunos ejemplos de Intents implcitos son:

23

Gua de Android Certified Professional

NOTA: Para ejecutar algunos de estos ejemplos es necesario aadir al


archivo AndroidManifest.xml algunos permisos.

3.2.2.

Intent Filter

Para el caso especfico de los Intents implcitos, el sistema operativo debe


determinar que aplicacin o aplicaciones son las adecuadas para responder
a ciertos Intents. En el caso de que ms de una aplicacin pueda responder
a la necesidad del Intent, se le mostrara al usuario un cuadro de dialogo con
el cual podr elegir que aplicacin es la ms conveniente para l. Esta
24

Gua de Android Certified Professional

seleccin de aplicaciones se lleva a cabo mediante los Intent Filters, los


cuales son definidos dentro del archivo AndroidManifest.xml.
Para reaccionar a determinado Intent implcito un componente de la
aplicacin debe tener registrado un elemento Intent Filter dentro del archivo
manifest para el evento que se quiere pueda responder. En el caso de que el
o los componentes no tengan registrado un Intent filter nicamente podr
ser llamado a travs de Intents explcitos.

25

Gua de Android Certified Professional

3.3.

Proveedores de contenido (Content Providers).

Descripcin de los Content Providers (Proveedores de contenido), los cuales


permiten definir una interfaz para el acceso a datos entre aplicaciones.
Los proveedores de contenido (Content Providers) son los encargados de
administran el acceso a los datos persistentes de una aplicacin, encapsularlos
y de proveer los mecanismos necesarios para el aseguramiento de la integridad
en los datos. Los proveedores de contenido estn destinados principalmente a
ser utilizados por otras aplicaciones.
Existe un objeto llamado ContentResolver el cual puede ser visto como el
cliente que solicita informacin y se comunica con el objeto proveedor llamado
ContentProvider. Este objeto proveedor recibe solicitudes de los clientes,
realiza la accin solicitada y devuelve los resultados, por ello se dice que un
ContentProvider no tiene un ciclo de vida ms all del ser referenciado por el
ContentResolver. El proveedor de contenido presenta los datos a aplicaciones
externas como una o ms tablas de una base de datos relacional.
Es importante mencionar que cada proveedor de contenido se identifica con una
URI, la cual contiene una cadena de texto nica para el proveedor. Las URI de
contenido se encuentran compuestas por tres partes importantes:

Esquema URI. Tambin conocido como URI scheme, es el mximo


atributo esencial para especificar una URI, algunos ejemplos son: http://,
https://, content://, file://, market://search?
Nombre simblico del proveedor. Tambin conocido como autoridad o
authority.
El nombre que apunta a la tabla. La ruta o path separado por una /

26

Gua de Android Certified Professional

Content://mx.com.omnius/notas/1
Esquema

3.4.

Autoridad

Ruta

Servicios (Services)

Descripcin de los diferentes tipos de servicios y los diversos mtodos que se


tienen para poder iniciar o detener estos componentes. Tambin se aborda la
forma de cmo declarar estos componente dentro de una aplicacin en Android.
Los servicios son componentes de una aplicacin que se caracterizan por no
contar con una interfaz de usuario definida, y que pueden realizar, en segundo
plano y cuando otro componente de la aplicacin lo indica, tareas de larga
duracin, incluso si el usuario decide salir o cambiar de aplicacin. Un
componente tambin puede realizar la vinculacin con un servicio (bound
service) para interactuar con l, llegando a realizar en algunas circunstancias
comunicacin entre procesos (IPC). Por ejemplo, un servicio puede manejar
las operaciones de red, reproducir msica, realizar operaciones con de entrada
y salida con archivos o interactuar con un proveedor de contenido, todo desde
segundo plano, ejecutndose, de forma predeterminada, en el hilo principal de
la aplicacin.
Un servicio puede tomar dos formas no excluyentes:

Iniciado. Cuando un componente de la aplicacin (como una Actividad)


inicia un servicio llamando al mtodo startService( ), lo que resulta en una
llamada al mtodo onStartCommand( ) del servicio.
Vinculado. Cuando un competente de la aplicacin se vincula con un
servicio llamando al mtodo bindService( ), lo que resulta en una llamada
al mtodo onBind( ) del servicio.

Todos los servicios deben ser declarados en el archivo AndroidManifest.xml de


la aplicacin. Para que el sistema reconozca un servicio y pueda ser utilizado,
se debe agregar el elemento <service> como elemento hijo del elemento
<application> del archivo AndroidManifest. El elemento <service> deber
especificar, en el atributo android:name="", el nombre completo (incluyendo el
paquete) de la clase del servicio. Por ejemplo:
27

Gua de Android Certified Professional

3.5.

Receptores de radiodifusin (Broadcast Receiver)

Definicin de los tipos y caractersticas del componente Broadcast Receiver


(Receptores de radiodifusin), los cuales permiten registrar y notificar eventos a
una aplicacin.
Este componente responde a las notificaciones de difusin de todo el sistema
como por ejemplo que la pantalla se ha apagado, que la batera del telfono esta
por terminarse o que una fotografa ha sido tomada. Las aplicaciones tambin
pueden lanzar este tipo de notificaciones, un ejemplo de ello es el aviso de que
alguna informacin ha terminado de descargarse en el dispositivo y se
encuentran disponibles para que el usuario pueda utilizarla.
Los Broadcast Receivers permiten a las aplicaciones recibir Intents que se
emiten por el sistema o por otras aplicaciones, incluso cuando los otros
componentes de la aplicacin no se estn ejecutando. Un objeto
BroadcastReceiver slo es vlido mientras dure la llamada al mtodo
onReceive(Context, Intent), durante el cual se considera que es un proceso en
primer plano, que es el nivel ms alto de importancia que el sistema Android
proporciona a un componente y que destruye nicamente como ltimo recurso;
cuando termina la ejecucin de ese mtodo el sistema considera que el objeto
ya no esta activo y puede terminarlo. Es importante aclarar que no es posible
mostrar un dilogo o vincularse a un servicio desde dentro de un
BroadcastReceiver, si es necesario hacerlo se debe usar el API
NotificationManager para mostrar un dialogo y Context.startService( ) para
enviar un comando al servicio.
28

Gua de Android Certified Professional

Al igual que la mayora de los componentes es requerido registrar en el archivo


AndroidManifest.xml el Receiver al cual queremos que nuestra subclase de
BroadcastReceiver pueda escuchar.

29

Gua de Android Certified Professional

4. Entorno de desarrollo
4.1.

Instalacin de Android Studio.

Requisitos y proceso de instalacin del entorno de desarrollo Android Studio,


indispensable para realizar las practicas a lo largo del curso y desarrollar
aplicaciones en Android.
La siguiente gua lleva al usuario por el procedimiento para poder instalar el IDE
Android Studio en alguna computadora que ejecute cualquiera de los sistemas
operativos ms usados; Windows, Mac o Linux.
1. Abrir un navegador y dirigirse a la siguiente direccin de Internet
http://developer.android.com/sdk/index.html
2. Seleccionar la opcin Download Android Studio.

30

Gua de Android Certified Professional

3. Aceptar trminos y condiciones y dar clic en el botn Download Android


Studio.

31

Gua de Android Certified Professional

4. Seleccionar la ubicacin donde se guardar y dar clic en el botn Guardar:

5. Una vez terminada la descarga, abrir la carpeta donde se descarg el archivo


y darle doble clic para ejecutar. Aparecer un asistente de instalacin, damos
clic en el botn Next.

32

Gua de Android Certified Professional

6. Seleccionar de la lista las opciones Android SDK y Android Virtual Device.


Dar clic en el botn Next.

7. Leer y aceptar los trminos y condiciones. Dar clic en el botn I Agree.


33

Gua de Android Certified Professional

34

Gua de Android Certified Professional

8. Seleccionar la ubicacin de instalacin de Android Studio y del SDK de


Android (Se recomienda no cambiar la ubicacin), dar clic en Next.

9. Una vez configurado lo anterior se proceder con la instalacin. Dar clic en


el botn Install.

35

Gua de Android Certified Professional

10. Esperar a que la instalacin se lleve a cabo, esto puede llevar varios minutos.
Terminado el proceso dar clic en el botn Next y finalizar el asistente.
4.1.1. Requisitos del sistema

Windows:

Microsoft Windows 10/8/7/Vista/2003 (32 o 64 bits).


2 GB en RAM, 4 GB recomendado.
400 MB de espacio en disco duro para el IDE Android Studio
Al menos 1 GB de espacio en disco duro para el SDK de Android.
1280 x 800 resolucin de pantalla como mnimo.
Oracle Java Development Kit (JDK) 7 o superior

Mac OS X:

Mac OS X 10.8.5 o superior.


2 GB en RAM, 4 GB recomendado.
400 MB de espacio en disco duro para el IDE Android Studio
Al menos 1 GB de espacio en disco duro para el SDK de Android.
1280 x 800 resolucin de pantalla como mnimo.
Oracle Java Runtime Environment (JRE) 6 o superior.
Oracle Java Development Kit (JDK) 7 o superior

36

Gua de Android Certified Professional

En Mac OS, Android Studio corre con Java Runtime Environment (JRE) 6
para la renderizacin de fuentes optimizado. El proyecto puede ser
configurado para utilizar Java Development Kit (JDK) 6 o 7.
Linux:

GNOME o KDE Desktop


GNU C Library (glibc) 2.15 o superior
2 GB en RAM, 4 GB recomendado.
400 MB de espacio en disco duro para el IDE Android Studio
Al menos 1 GB de espacio en disco duro para el SDK de Android.
1280 x 800 resolucin de pantalla como mnimo.
Oracle Java Development Kit (JDK) 7 o superior

Probado en Ubuntu 14.04 o superior.

4.2.

Instalacin de plataformas

Una vez instalado el entorno de desarrollo se deben instalar y actualizar las


plataformas para poder desarrollar plenamente las aplicaciones para Android.
En este punto se muestra como llevar a cabo esta actualizacin.
El SDK de Android utiliza una estructura modular que separa las partes
principales del mismo (las versiones del SDK, complementos, herramientas,
ejemplos y documentacin) en un conjunto de componentes que podemos
instalar por separado. El SDK que es descargado junto con Android Studio o el
que es descargado por separado incluye nicamente la ltima versin de las
herramientas del SDK, por lo que es altamente recomendable actualizarlo.
Para desarrollar una aplicacin en Android es necesario descargar al menos una
versin de la plataforma de Android con sus herramientas asociadas. Es posible
instalar tantos componentes como plataformas se requieran para el desarrollo
de las aplicaciones.
Para realizar el proceso de instalacin y actualizacin de las plataformas de
Android realizar el siguiente procedimiento.
37

Gua de Android Certified Professional

1. Abrir Android Studio.


2. Ir al men Tools e ir al apartado Android, seleccionar la opcin SDK
Manager.

Tambin se puede acceder directamente al SDK Manager presionando el cono


que se encuentra en la barra de herramientas de Android Studio

3. En el panel principal se pueden ver todas las opciones disponibles para


descargar. En este link se puede consultar los componentes mnimos que se
recomiendan instalar de la pgina oficial de Android Developers
4. Por ltimo dar clic en el botn install # packages, donde # es el nmero de
paquetes que se instalarn el en proceso. Antes de empezar a descargar e
instalar los elementos el SDK Manager nos pide confirmar que estamos de
acuerdo con los trminos y condiciones de instalacin.

38

Gua de Android Certified Professional

Dependiendo del nmero de plataformas y componentes que se decida


descargar, este proceso puede tardar varios minutos.

4.3.

Android Virtual Device (AVD) Manager

Creacin y configuracin de los dispositivo virtuales de Android para poder


probar las aplicaciones que se realicen a lo largo del curso.
Antes de iniciar a desarrollar una aplicacin en Android es importante tener
configurado y disponible un AVD (Android Virtual Device).
Las AVD son herramientas imprescindibles para los desarrolladores y testers,
ya que permiten emular en una computadora un entorno mvil a los que
apuntarn las aplicaciones en Android al momento de querer instalarlas. Cuando
recin se ha instalado el SDK (que incluye el AVD Manager) no se cuenta con
ningn dispositivo virtual.
El administrador de Dispositivos Virtuales de Android (AVD Manager) cuenta
con una interfaz grfica de usuario muy fcil de usar para administrar
configuraciones de los dispositivos virtuales Android. Se utiliza el trmino AVD
como una configuracin de dispositivo que el emulador de Android lee para
emular diversos dispositivos Android. Despus de crear una configuracin AVD
podemos iniciar el emulador con esa configuracin, justo antes de lanzar el
emulador nos preguntara algunas opciones para la sesin actual, como si se
quiere escalar el contenido de la pantalla o borrar los datos anteriores de usuario.
Para crear un emulador de Android con AVD Manager, realizar los siguientes
pasos:
1. Ir al men Tools e ir al apartado Android, seleccionar la opcin AVD Manager.

39

Gua de Android Certified Professional

2. Se abrir una ventana con el botn Create a virtual device.

40

Gua de Android Certified Professional

3. El selector de dispositivos nos permites elegir entre crear un dispositivo a


travs de una plantilla con un perfil ya establecido o crear un nuevo perfil de
dispositivo con todas las caractersticas configurables.

41

Gua de Android Certified Professional

4. Si optamos por crear un dispositivo a travs de una plantilla ya defina, solo


se debe dar clic en el dispositivo a crear y posteriormente en el botn
siguiente.

5. La siguiente seccin nos pedir elegir la versin de Android que ejecutar el


equipo, una vez seleccionada dar clic en siguiente.
6. Por ltimo dar un nombre al emulador y finalizar el asistente.
7.
Si la opcin en crear un
emulador personalizado, que
cubra ciertas caractersticas
especficas, en el selector de dispositivos
debemos dar clic sobre el botn New Hardware Profile.

42

Gua de Android Certified Professional

8. En esta seccin se nos pedir realizar la configuracin del dispositivo a crear.


La ventana nos permite modificar los siguientes parmetros.

Device name. Nombre del dispositivo a crear.


Device type. Tipo de dispositivo a crear, por ejemplo Smartphone.
Screen. Parmetros de la pantalla; tamao (en pulgada) y resolucin (en
pixeles).
Memory. Cantidad de memoria RAM del equipo (en GB).
Input. Permite seleccionar si el equipo contara con botones fsicos de
atrs, home, men y teclado.
Supported device states. Define si el dispositivo podr cambiar de modo
Portrait a Landscape y viceversa.
Cameras. Determina si el emulador contar con cmara frontal y/o
trasera (El emulador toma la cmara de la computadora para poder
realizar la simulacin).
Sensors. Seleccionar los sensores con los que contara el equipo, por
ejemplo giroscopio, brjula, etc.

43

Gua de Android Certified Professional

9. Una vez realizar la configuracin deseada, dar clic en OK y el emulador


aparecer en la lista de dispositivos disponibles.

La primera vez que se ejecuta una AVD puede resultar tardado el proceso, por
lo que se recomienda que cuando se estn realizando constantes cambios a un
proyecto en Android, no se detenga el AVD, es mejor que permanezca
ejecutndose en segundo plano, de esta forma cada vez que se instale una
aplicacin con las modificaciones hechas automticamente se instalar en el
dispositivo que est corriendo (siempre y cuando sean compatibles en
versiones).

44

Gua de Android Certified Professional

4.4.

Comandos para AVD

Ejecucin y demostracin de algunos de los comandos ms importantes que se


encuentran disponibles para AVD en Android.
Usar el emulador de Android, configurado con el AVD Manager, permite realizar
funciones como si de un dispositivo fsico se tratase, algunas de las operaciones
que podemos realizar en emulador son:

Instalar aplicaciones.

Simular llamadas salientes y entrantes.

Simular el envo y recepcin de mensajes de texto.

Modificar los valores emulados de la red para el dispositivo.

Simular eventos del hardware, entre muchos ms.

Para poder enviarle instrucciones al emulador y modificar los elementos


mencionados anteriormente:
1. Ejecutar un emulador AVD.
2. Abrir la terminal de comandos de Android Studio, la cual se encuentra en las
pestaas de la parte inferior del IDE. Tambin se puede utilizar la consola de
lnea de comandos de la mquina para conectarse al emulador.
3. Realizar la conexin con el emulador ejecutando el comando;
telnet localhost <port>
Donde <port> es el nmero de puerto que ocupa el emulador, este nmero
puede obtenerse de la parte superior del emulador junto al nombre.
4. Ejecutar los comandos deseados para realzar la configuracin del emulador,
por ejemplo:

power display. Muestra informacin del estado de la batera.

power ac <on/off>. Determinar si la batera se encuentra alimentndose


de la corriente elctrica.

45

Gua de Android Certified Professional

power capacity <porcentaje>. Determina el porcentaje de carga de la


batera, puede tomar valores entre 0 y 100.

gms call <numero>. Realiza la simulacin de una llamada telefnica


entrante.

sms send <numero> <mensaje>. Realiza la simulacin de un mensaje


de texto entrante. El valor <numero> hace referencia al nmero telefnico
emisor y <mensaje> es el contenido que aparecer en el mensaje.

geo fix <lat> <lng>. Aade la posicin indicada al dispositivo.

46

Gua de Android Certified Professional

5. Fundamentos de Aplicaciones Android


5.1. Creacin y estructura de un proyecto Android
Pasos para la creacin de un nuevo proyecto en Android Studio. Descripcin
de la estructura de un nuevo proyecto y de sus carpetas principales.
Para crear un nuevo proyecto en Android Studio, una vez instalado todo lo
requerido, debemos ejecutar el IDE y desde la pantalla principal de
bienvenida seleccionaremos la opcin Start a new Android Studio
Project para iniciar el asistente de creacin de nuevo proyecto.

Si ya se ha abierto anteriormente Android Studio es probable que se habr


directamente la ltima aplicacin creada en vez de la pantalla de bienvenida,
si este es el caso accederemos a la creacin del nuevo proyecto mediante el
men File / New project.

47

Gua de Android Certified Professional

El asistente de creacin de un nuevo proyecto Android nos guiara de manera


muy intuitiva por las distintas opciones de creacin y configuracin del nuevo
proyecto.

Una vez finalizado el asistente de nuevo proyecto, Android Studio crear toda
la estructura de proyecto y los elementos indispensables que se requieren
para la aplicacin. Si todo se ha creado adecuadamente aparecer la pantalla
principal de Android Studio con el proyecto creado.
En la lateral izquierda de la ventana, podemos observar todos los elementos
creados inicialmente para el nuevo proyecto, por defecto vemos la estructura
del proyecto en la vista Android, pero se tiene disponible tambin las vistas
Packages y Project.

5.1.1.

Estructura del proyecto

48

Gua de Android Certified Professional

A continuacin se describirn los contenidos principales de la vista


Android.

Carpeta app/java

En su interior se encuentran dos mdulos con el nombre del paquete


principal de la aplicacin definido durante la creacin del proyecto. Una
de los mdulos destinados a almacenar el cdigo fuente de la aplicacin
y otro para generar los casos de prueba necesarios para la misma
(androidTest).
Inicialmente, Android Studio crea por nosotros el cdigo bsico para la
Actividad principal de la aplicacin, por lo regular la primera clase creada
lleva el nombre de MainActivity.java

Carpeta app/res/drawable

Contiene las imgenes y los elementos grficos usados por la aplicacin


(con excepcin del cono launcher de la aplicacin). Para poder definir los
diferentes recursos dependiendo de la resolucin y densidad de la
pantalla del dispositivo, se suele dividir en varias subcarpetas.
/drawable (recursos independientes de la densidad).
/drawable-ldpi (recursos densidad baja)
/drawable-mdpi (recursos densidad media)
/drawable-hdpi (recursos densidad alta)
/drawable-xhdpi (recursos densidad muy alta)
/drawable-xxhdpi (recursos densidad sper alta)

Carpeta app/res/layout

Contiene los ficheros de definicin XML de las diferentes pantallas de la


interfaz grfica. Para definir distintos layouts dependiendo de la
orientacin del dispositivo se puede dividir tambin en subcarpetas:
/layout (destinada a recursos XML con orientacin vertical)
/layout-land (destinada a recursos XML con orientacin horizontal)

Carpeta app/res/anim app/res/animator (no creada por default)

Contienen la definicin de las animaciones utilizadas por la aplicacin.

Carpeta app/res/color (no creada por default)

Contiene ficheros XML de definicin de colores.


49

Gua de Android Certified Professional

Carpeta app/res/men

Contiene la definicin XML de los mens de la aplicacin.

Carpeta app/res/xml (no creada por default)

Contiene otros ficheros XML de datos utilizados por la aplicacin.

Carpeta app/res/raw (no creada por default)

Contiene recursos adicionales, normalmente en formato distinto a XML,


que no se incluyan en el resto de carpetas de recursos, por ejemplo .mp3,
.mp4, .txt, etc.

Carpeta app/res/values

Contiene otros ficheros XML de recursos de la aplicacin, como por


ejemplo cadenas de texto (strings.xml), estilos (styles.xml), colores
(colors.xml), arrays de valores (arrays.xml), tamaos (dimens.xml), etc.

5.2. Trabajando con el archivo AndroidManifest.xml


Descripcin y manejo del archivo AndroidManifest.xml, principales elementos e
importancia de cada uno de ellos en la aplicacin.
Cada aplicacin debe tener, en su directorio raz, un archivo llamado
AndroidManifest.xml. El archivo manifiesto es el encargado de presentar
informacin esencial acerca de la aplicacin al sistema operativo, esta
informacin es la que el sistema Android debe tener antes de poder ejecutar
cualquier cdigo de la aplicacin. Entre otras cosas, el AndroidManifest.xml
permite definir lo siguiente.

Nombra el paquete Java de la aplicacin. Este nombre de paquete sirve


como identificador nico para la aplicacin.

Describe los componentes de una aplicacin Actividades, Servicios,


receptores de radiodifusin y proveedores de contenido. Tambin permite
nombrar a las clases que implementan cada uno de los componentes y
publica las capacidades de cada uno. Este tipo de declaraciones permiten
al sistema operativo Android conocer qu tipo de componentes integran
la aplicacin y como deben ser lanzados.

Determina los procesos que utilizar la aplicacin.


50

Gua de Android Certified Professional

Declara los permisos que la aplicacin debe tener y que permiten acceder
a partes protegidas de la API y la interaccin con otras aplicaciones.

Definir el nivel mnimo de API en el que corre la aplicacin (opcional).

Definir el nivel objetivo de API en el que corre la aplicacin (opcional).

Este archivo manifiesto, que es un recurso del proyecto, est compuesto por una
coleccin estructurada de elementos en XML, los cuales, junto con los atributos de
cada uno de ellos sirven para proporcionarle la informacin descrita anteriormente
al sistema Android, algunos de estos elementos y sus atributos son:
<manifest>: Es el elemento raz del archivo, debe contener de manera obligatoria
un elemento <application> y especificar dentro de sus atributos un xmlns:android
y un nombre de paquete.
<uses-permission>: Pide un permiso que el usuario debe conceder a la aplicacin
para que esta pueda funcionar adecuadamente. Estos permisos son otorgados por
el usuario cuando se instala la aplicacin y no mientras se ejecuta.
<application>: Este elemento contiene subelementos que declaran cada uno de los
componentes de la aplicacin y tiene atributos que pueden afectar a todos los
componentes. Algunos atributos como icon, label, permision y process pueden ser
modificados por cada componente de manera independiente. Otros como
debuggable, enable y description no pueden ser sobrescritos por los componentes
individuales.
<activity>: Declara una Actividad (una subclase de Activity) que implementa parte
de la interfaz de usuario de una aplicacin. Todas las actividades deben ser
representadas por un elemento <activity> dentro del archivo AndroidManifest.xml,
cualquiera que no sea declarada no podr ser vista por el sistema y nunca se
ejecutar.
<intent filter>: Especifica los tipos de Intents (intenciones), que una Activity,
Services o Broadcast Receiver puede responder. Un Intent Filter permite definir las
capacidades de un componente (lo que una Activity o Service puede hacer o un
Broadcast Receiver puede enviar) y filtra los Intents que no son significativos para
el mismo.
<action>: Permite aadir una accin a un Intent Filter. Un elemento <intent filter>
debe tener uno o ms elementos <action>. Si no contiene al menos uno, ningn
objeto Intent podr ser entregado al elemento.

51

Gua de Android Certified Professional

<category>: Permite aadir una categora a un Intent Filter. Es una cadena de texto
que contiene informacin adicional sobre el tipo de componente que debe manejar
la intencin. Por lo regular un Intent Filter no requiere una categora.
<service>: Define un componente servicio (una subclase de Service) como uno de
los componente de la aplicacin. Recordar que los servicios no cuentan con una
interfaz de usuario definida, a diferencia de otros componentes como las Activities,
y que tiene como propsito principal realizar tareas de larga duracin en segundo
plano. Todos los servicios deben ser representados por un elemento <services>
dentro del archivo AndroidManifest.xml. Cualquier que no sea declarado no ser
visible para el sistema operativo y no podr ser ejecutado.
<receiver>: Declara un receptor de radiodifusin (una subclase de Broadcast
Receiver) como uno de los componentes de la aplicacin. Estos receptores permiten
a las aplicaciones recibir las notificaciones que emite el sistema operativo u otras
aplicaciones.
<provider>: Define un componente proveedor de contenido (una subclase de
Content Provider) que suministra el acceso estructurado a una base de datos
gestionada por la aplicacin. Todos los proveedores de contenido deben ser
registrados bajo un elemento <provider> en el archivo manifiesto, de lo contrario no
ser visible para el sistema operativo y no podr ser ejecutado.

52

Gua de Android Certified Professional

5.3. Trabajando con el archivo Build.gradle


Adems del archivo AndroidManifest.xml, un proyecto Android tambin cuenta
los archivos de configuracin Gradle, en esta seccin se muestra la importancia
de estos archivos y la descripcin de los elementos ms importantes a tomar en
cuenta.
Gradle es un conjunto de herramientas de construccin que realiza la gestin
de dependencias y permite generar una construccin lgica personalizada de un
proyecto. Android Studio utiliza una envoltura Gradle para la integracin plena
entre el plugin de Android y Gradle.
El plugin de Android Studio para Gradle tambin funciona independiente sin
Android Studio, esto implica que se puede llegar a realizar la construccin de
53

Gua de Android Certified Professional

aplicaciones Android sin la necesidad de tener instalado el IDE de Android


Studio, todo esto desde una lnea de comandos.
Toda la configuracin para la generacin de un proyecto se lleva a cabo en un
par (o ms) de archivos llamados build.gradle ubicados en la seccin Gradle
Script dentro del proyecto Android. Los build.gradle son archivos escritos en
texto sin formato que utilizan las sintaxis Gradle y del plugin de Android para
realizar la configuracin de los siguientes aspectos en la aplicacin.

Construccin de variantes. El sistema de construccin permite generar


mltiples archivos apk con diferentes productos y construir
configuraciones diferentes para un mismo mdulo. Esto es til cuando se
requiere construir deferentes versiones de la misma aplicacin sin tener
que crear proyectos o mdulos por separado para cada versin.
Dependencias. El sistema de construccin maneja las dependencias del
proyecto y brinda soporte a las dependencias del sistema de archivos
local y repositorios remotos. Esto evita tener que buscar, desplegar y
copiar los paquetes binarios para cada una de las dependencias en el
directorio del proyecto.
Entradas para el archivo AndroidManifest.xml. El sistema de
construccin tambin permite especificar valores de entrada para algunos
elementos del archivo manifiesto de la aplicacin. Estos valores de
construccin anulan los definidos en el archivo AndroidManifest. Esto es
til si desea generar mltiples archivos apk para los mdulos, donde cada
uno de los archivos apk tiene un nombre diferente de aplicacin, versin
mnima del SDK (minSdkVersion), o versin objetivo del SDK
(targetSdkVersion).
Firmar la aplicacin. El sistema de construccin permite especificar la
configuracin para realizar el procedimiento y despliegue de la aplicacin.
Esto para firmar la aplicacin durante el proceso de construccin.
Pruebas. Para la mayora de las plantillas existentes en Android Studio,
el sistema de construccin crea un directorio de prueba, llamado
androidTest y genera un apk prueba con los archivos de prueba en el
proyecto, evitando as tener que crear un proyecto de prueba
independiente. El sistema de construccin tambin puede ejecutar las
pruebas durante el proceso de construccin.

5.3.1.

Archivo Proyect Build

54

Gua de Android Certified Professional

Se trata de uno de los archivos generados por Gradle para la configuracin del
proyecto. Se caracteriza por tener incluido el nombre del proyecto en su nombre.
Por
defecto
el
archivo
Gradle
a
nivel
de
proyecto,
build.gradle(proyect:nombreAplicacin), utiliza buildScript para definir los
repositorios y las dependencias Gradle. Esto permite que los diferentes
repositorios a utilizar puedan hacer uso de versiones diferentes de Gradle.

5.3.2.

Archivo Module Build

Este archivo build.gradle para el mdulo de la aplicacin, permite realizar


ajustes al mdulo de construccin, incluyendo las modificaciones que anularn
los parmetros por defecto que se encuentran en el archivo AndroidManifest.xml.
Tambin permite establecer opciones personalizadas de empaquetado. A
continuacin algunos parmetros que pueden ser configurados en este archivo.

compileSdkVersion. Propiedad que especifica la versin objetivo de


compilacin.

buildToolsVersion. Propiedad que permite especificar la versin de las


herramientas de construccin para la aplicacin. Para poder utilizar
diferentes versiones de estas herramientas deben descargarse del SDK
Manager.

applicationId. Nombre del paquete que identifica de manera nica a la


aplicacin.

minSdkVersion. Valor que permite designar el nivel mnimo de API


requerido para que la aplicacin se ejecute. El sistema Android evitar
que el usuario instale aplicaciones si el nivel de API del sistema es menor
55

Gua de Android Certified Professional

que el valor especificado en este atributo. Este valor siempre debe ser
incluido dentro de las propiedades de la aplicacin.

targetSdkVersion. Valor que indica el nivel de API objetivo para la


aplicacin. Si no se establece un valor objetivo se toma el minSdkVersion
como valor objetivo. Este atributo informa al sistema que la aplicacin ha
sido probada con este nivel y debe mantener compatibilidad con
versiones hasta la establecida en el valor minSdkVersion.

versionCode. Es un nmero entero que representa la versin del cdigo


de la aplicacin, en relacin con otras versiones. Normalmente, la primera
aplicacin que se crea establece este valor en 1, luego aumento
montonamente su valor con cada lanzamiento.

versionName. Representa la versin del cdigo de la aplicacin y es el


que debe ser mostrado a los usuarios. El valor es una cadena de texto
que describe la versin en un formato <cambio mayor>.<cambio
menor>.<punto> o cualquier otro tipo de identificador de versin absoluta
o relativa.

buildTypes. Es una estructura que permite controlar la forma en la que


se construye y se empaqueta una aplicacin. Por omisin el sistema
define dos tipos de construccin: depuracin y liberacin (debug y
release). La aplicacin empaquetada en modo debug no se encuentra
firmada por defecto.

dependencies. Esta seccin se encuentra fuera del elemento Android { }


del archivo y permite definir o declarar las dependencias a bibliotecas
externas del mdulo aplicacin.

Algo importante a tomar en cuenta al momento de trabajar con los archivos


build.gradle es que cualquier modificacin que se realice a los archivos
provoca que Android Studio requiera sincronizar el proyecto e importar los
cambios en la configuracin. Por eso una vez modificado cualquier archivo
se debe dar clic en el mensaje de alerta que aparece en la parte superior del
rea de trabajo de Android Studio, se caracteriza por ser de color amarillo y
mostrar la leyenda Sync Now.

6. Creacin y manejo de actividades


Una vez creado un proyecto Android y para poder iniciar con la creacin de la
interfaz de usuario de la aplicacin, se debe tomar en cuenta que esta debe ser
diseada usando una estructura de jerarqua de vistas (views) y grupos de vistas
(viewGroup). Las vistas o views, son usualmente elementos grficos como
56

Gua de Android Certified Professional

botones, campo de texto o etiquetas, y los viewGroup son los contenedores


invisibles que definen como las vistas son presentadas en pantalla. La clase
viewGroup es la clase base que se tiene para los layouts Manager, existen
diferentes tipos de viewGroup con diferentes caractersticas:

Linear Layout. Permite organizar a las vistas (views) en su interior en


una nica fila o columna dependiendo de la orientacin que se establezca.

Frame Layout. Es un contenedor que dispone todos los elementos vista


alineados en el vrtice superior izquierdo del contenedor, por lo que si se
aaden dos o ms elementos estos se apilarn.

Table Layout. Alinea los elementos vista en su interior en un formato de


filas y columnas. Un aspecto a considerar es que este tipo de
contenedores no tiene lmites fronterizos en sus celdas, filas o columnas.

Grid Layout. Este contendor fue introducido a partir del API 14 de Android
(Android 4.0). Se caracteriza por dividir en lneas invisibles el espacio,
estas lneas forman una cuadrcula que permiten la definicin de filas y
columnas. Los elementos view en su interior pueden ocupar una o varias
celdas de manera horizontal o vertical.

Absolute Layout. Se encuentra obsoleto desde la versin de API 3 de


Android. Permite organizar a las vistas en su interior por posiciones en
coordenadas especificas X y Y.

Relative Layout. Es quiz el ms potente de todos los viewGroup, su


flexibilidad se basa en permitir posicionar a los elementos vista en relacin
a otros elementos vista y a su propio contenedor.

ListView. Un viewGroup que permite mostrar los elementos en una lista


vertical con una barra de desplazamiento.

GridView. Permite mostrar los elementos en una tabla bidimensional con


barra de desplazamiento.
TabLayout. Permite crear una interfaz de usuario con pestaas, las
cuales pueden contener views dentro de una sola Actividad o usar
pestaas para cambiar entre diferentes Actividades.

Este diseo de jerarquas puede ser construido desde cdigo, el cual en


tiempo de ejecucin se convierte en elementos grficos, o definiendo los
elementos en archivos XML. Creando archivos XML se tiene la ventaja de
poder tener diferentes versiones de interfaz para usarlas en dispositivos con
caractersticas diferentes, por ejemplo en pantallas pequeas o grandes.
57

Gua de Android Certified Professional

Si se desea construir el diseo de interfaz por cdigo se deben definir las


propiedades llamando a los mtodos correspondientes para crear, en tiempo
de ejecucin, la interfaz de usuario de manera adecuada.
Cabe recalcar que todos los archivos XML para crear las interfaces de
usuario deben encontrarse en la carpeta res/layout del proyecto.

6.1. Uso de recursos en una aplicacin


Para poder dotar a un aplicacin con los recursos necesarios es
indispensable conocer donde aadir estos recursos. Aqu se describen los
principales recursos que se tienen para poder enriquecer las aplicaciones y
los directorios disponibles para cada uno.
Al ejecutar una aplicacin, independientemente si se realiza en un emulador
de Android o en un dispositivo fsico, los archivos que la aplicacin usa,
aparte de los archivos de cdigo fuente, son manejados como recursos
dedicados para la aplicacin, para el buen funcionamiento de la aplicacin
estos deben ser agrupados en directorios de recursos bajo la carpeta res/ del
proyecto con un nombre especial. El sistema Android usa automticamente
el recurso basado en la configuracin del dispositivo por lo que el
desarrollador no debe preocuparse por definir que elemento utilizar en cada
situacin que se presente. Algunos de los tipos de recursos que se tienen
disponibles son:

Recursos de animacin. Permite definir animaciones predeterminadas,


las animaciones de tipo Tween son almacenas en el directorio res/anim
o res/animator; las animaciones de tipo Frame son guardadas en el
directorio res/drawable.

Recursos de colores. Definen un recurso de color que cambia segn el


estado del componente View. Guardados en res/color/ y su acceso
desde cdigo es a travs de la clase R.color.

Recursos dibujables. Definen imgenes de mapa de bits (.png, .jpg o


.gif) o en archivos XML tipo "bitmap". Guardados en res/drawable/ y
accedidos desde cdigo por la clase R.drawable.

Recursos layout. Definen la disposicin (layout) de la interfaz de usuario.


Guardados en res/layout/ y accedidos desde cdigo por la clase
R.layout.

Recursos de men. Definen los contenidos men de la aplicacin.


Guardados en res/menu/ y accedidos desde cdigo por la clase R.menu.
58

Gua de Android Certified Professional

Recursos de cadenas de texto. Definen cadenas de texto, arreglos de


cadenas de texto y "plurales" (opciones para reglas de concordancia
gramatical con la cantidad) y pueden incluir formato y estilo de cadenas
de texto. Guardados en res/values/ y accedidos desde cdigo por las
clases R.string, R.array y R.plurals.

Recursos de estilo. Definen el aspecto y el formato de los elementos de


la interfaz de usuario. Guardados en res/values y accedidos por la clase
R.style desde cdigo.

Recursos de datos en bruto (raw). Contiene archivos que son


guardados en su forma original (raw) y que se necesitan leer mediante
flujos de datos (manejados por objetos Stream como InputStream), como
archivos de audio o video. Almacenados en res/raw y accedidos desde
cdigo por la clase R.raw.

6.2. Seguridad y permisos


Algunas de las funcionalidades de una aplicacin requieren de permisos
especiales que el usuario debe conceder al momento de instalar la aplicacin
en el dispositivo, a continuacin se muestran los principales permisos
existentes en Android y como definirlos en un proyecto.
Para proteger algunos recursos y caractersticas especiales del dispositivo,
Android define un esquema de permisos explcitos. Toda aplicacin que
dese acceder a un recurso crtico del sistema est obligada a definir la
intencin de usarla. En el caso de que una aplicacin intente acceder a un
recurso del que no ha solicitado permiso, se genera una excepcin de
permisos y la aplicacin es interrumpida inmediatamente.
Los permisos de una aplicacin son definidos en el archivo
AndroidManifest.xml, como se coment en captulos anteriores, y autorizados
por el usuarios cuando instala la aplicacin. El esquema de permisos de
Android impide que se realiza una concesin parcial de permisos, por lo que
si un permiso no es concedido por el usuario la aplicacin no se instalar en
el dispositivo. A continuacin se mencionan algunos de los permisos ms
importantes y el nivel de riesgo en el que se clasifica.
Nombre del permiso
CALL_PHONE

Descripcin
Nivel de riesgo
Llamar a nmeros telefnicos Muy alto
directamente sin la intervencin
del usuario. Implica servicios por
los que se tiene que pagar.
59

Gua de Android Certified Professional

INTERNET

Permite establecer conexiones a


Internet. Es quiz el permiso ms
importante.
READ_PHONE_STATE Leer el estado del dispositivo y su
ID. Permite el acceso al nmero
telefnico,
nmero
IMEI,
identificador SIM, nmero de
identificacin nico de Google, el
nmero de una llamada entrante
entre otros datos
SEND_SMS
Enviar mensajes de texto (SMS)
sin intervencin del usuario.
Implica servicios por los que se
tiene que pagar
RECEIVE_SMS
Permite identificar cuando un
mensaje de texto (SMS) ha
llegado, as como leer su
contenido, modificar o borrar el
mensaje
CAMERA
Permite el acceso a la(s)
cmara(s) y tomar fotos y video. El
usuario puede o no intervenir al
realizar la accin.
RECORD_AUDIO
Permite grabar sonidos desde el
dispositivo. El usuario puede o no
intervenir en la accin.
READ_CONTACTS
Permite leer la informacin de los
contactos almacenados.
WAKE_LOCK
Impide que el telfono entre en
modo suspensin
BLUETOOTH
Permite
crear
conexiones
Bluetooth con otros dispositivos.
VIBRATE
Permite hacer vibrar el dispositivo.

60

Muy alto

Muy alto

Muy alto

Alto

Moderado

Moderado

Moderado
Bajo
Bajo
Bajo

Gua de Android Certified Professional

6.3. Uso de los mensajes Log


Como herramienta para poder depurar aplicaciones y ver el contenido de
ciertas variables en una aplicacin, se muestra el uso de los mensajes Log
de Android.
Android proporciona una API para el envo de mensajes a la consola de
depuracin de Android Studio, comnmente son conocidos como mensajes
Logs. Generalmente se usan los mtodos: Log.v() Log.d() Log.i() Log.w() y
Log.e(), la letra despus de "Log." indica el nivel de detalle que se desea
usar: VERBOSE, DEBUG, INFO, WARN, ERROR.
Los mtodos reciben como parmetro dos cadenas de texto; la primera
permite etiquetar el mensaje y la segunda es el contenido del mensaje

61

Gua de Android Certified Professional

7. Interfaz de usuario y controles.


7.1. Unidades y layout.
Cuando se disea una aplicacin que admita diferentes densidades de pantalla,
lo NO recomendado es usar pxeles absolutos (px) para definir tamaos o
distancias, lo cual genera problemas porque cada pantalla tiene densidades de
pxeles diferentes, resultando en que el mismo nmero de pxeles absolutos (px)
corresponda a varios tamaos fsicos.
Para comprender las unidades de medicin utilizadas en Android se deben
entender los siguientes trminos :

Resolucin. El nmero total de pixeles fsicos en una pantalla.

Densidad de la pantalla. La cantidad de pixeles en un rea fsica de la


pantalla, normalmente se conoce como DPI (puntos por pulgada).

Lo que S es recomendado es usar pxeles independientes de la densidad que


tenga el dispositivo y hay dos unidades de medicin posibles:

dp: pxeles independientes de la densidad, es una unidad de pixel virtual


que escala el tamao fsico de un pxel a 160dpi (puntos por pulgada) y
se utiliza para definir los diseos de interfaz de usuario con el fin de
expresar las dimensiones del diseo o la posicin de una manera
independiente de la densidad.

sp: igual que el anterior pero escalada en funcin del tamao de la letra
configurado por el usuario, usado para tamao de letra.

Ejemplo de aplicacin sin soporte para diferentes densidades (px), como se


muestra en baja, media y pantallas de alta densidad.

62

Gua de Android Certified Professional

Ejemplo de aplicacin con un buen soporte para diferentes densidades (es


independiente de la densidad ), como se muestra en baja, media y pantallas de
alta densidad.

7.2. Objetos Widgets.


TextView
Control que se utiliza como medio de salida, es decir, para mostrar un
determinado texto al usuario. Tambin es posible cambiar el texto a mostrar.
Para agregar un TextView desde el editor grfico del layout, se arrastra
alguno de los tipos del objeto TextView, localizados en la paleta de componentes
del panel Widgets, lo que aade un elemento <TextView> al archivo XML Layout.

Este
control y las dems vistas cuenta con diferentes atributos dentro de las
principales se encuentran:

android:text. Texto del control a mostrar.

android:id. ID (Identificador) del control , con el que se identificar de


forma nica en el cdigo con findViewById().
63

Gua de Android Certified Professional

android:layout_width y android:layout_height. Especifica el ancho y la


altura de la vista con respecto al layout que lo contiene. Estos valores
pueden ser, una dimensin por ejemplo "12dip", o una de las constantes
especiales de ajuste; match_parent, constante especial para la altura o
el ancho de una vista. La vista debe ser tan grande como su padre menos
el relleno (padding), wrap_content, constante especial para la altura o el
ancho de una vista. La vista debe ser lo suficientemente grande como
para incluir su contenido adems del relleno (padding).

android:layout_margin. Propiedad que indica el espacio entre el control


y su padre Layout.

android:padding. Indica el espacio entre Texto o Imgenes que


pongamos dentro del control y el propio control.

android:gravity. Gravedad del control, permite poner una alienacin.

android:TextSize. Se indica un tamao en sp , si no ponemos esto, se


selecciona un tamao por defecto estndar.

android:backgroud. Con esta propiedad se define el color de fondo del


control.

android:textColor. Color del texto.

android:typeface. Estilo del texto, negrita, cursiva, etc.

EditText
Los controles de entrada de texto le permiten al usuario escribir texto mediante
un teclado flotante en pantalla, el cual aparece cuando el usuario "toca" el
control. El campo de texto puede ser de una o varias lneas y, adicionalmente,
permite otras acciones, como seleccionar texto, copiarlo o pegarlo y
autocompletado de texto.
Para agregar un campo de texto, desde el editor grfico del layout, se arrastra
alguno de los tipos del objeto EditText, localizados en la paleta de componentes
del panel Text Fields, lo que aade un elemento <EditText> al archivo XML
Layout.

64

Gua de Android Certified Professional

Aparte de los atributos que


comparte con el TextView, este control tiene atributos exclusivos, los ms
utilizados son estos dos:

android:hint. Permite poner un texto por defecto mientras el campo esta


vaco.
android:inputType. Esta propiedad indica el tipo de teclado que a
aparecer cuando se pulsa sobre el campo, por ejemplo si solo se requiere
introducir nmeros se indica el valor en numrico.

Button
Un botn es un control que consta de un texto o cono (o ambos) el cual puede
responder a una accin o evento que se produce cuando el usuario lo toca.
Se pueden crear botones de tres maneras :
1. Con texto, utilizando la clase Button

2. Con un cono, utilizando la clase ImageButton

65

Gua de Android Certified Professional

3. Con texto e cono, utilizando la clase Button con el atributo android:


drawableLeft

Para agregar un botn, desde el editor grfico del layout, se arrastra alguno de
los tipos del objeto Button o ImageButton, localizados en la paleta de
componentes ampliando el panel Widgets, los cuales agregan los elementos
<Button> o <ImageButton>, respectivamente, al archivo XML layout.
Tambin es posible modificar la propiedad background el botn, permitiendo
con esto darle un estilo ms personalizado, aadiendo ya sea un color o una
imagen.

CheckBox
Permiten
al
usuario
seleccionar una o ms
opciones de un conjunto y por lo general se debe presentar cada opcin en una

66

Gua de Android Certified Professional

lista vertical. Para cada opcin se debe crear un elemento <CheckBox> en el


layout y registrar un clic listener, ya que cada opcin se gestiona por separado.
Para agregar un ckeckbox, desde el editor grfico del layout , se arrastra el
objeto localizado en
la
paleta
de
componentes
del
panel Widgets.

Aparte de los atributos que comparte con el TextView, este control tiene un
atributo adicional android:checked, que permite a la opcin estar seleccionada,
si el valor es true y false en caso contrario .

Radio Button
El radiobutton permiten al usuario seleccionar una opcin de un conjunto, para
cada opcin se debe crear un elemento <RadioButton> en el layout. Sin
embargo , ya que los radiobuttons son mutuamente excluyentes, se deben
agrupar dentro de un RadioGroup, al agruparlos, el sistema asegura que slo
una opcin puede ser seleccionada a la vez.
Para agregar un radiobutton, desde el editor grfico del layout, se arrastra el
objeto localizado en la paleta de componentes del panel Widgets.
67

Gua de Android Certified Professional

Aparte de los atributos que


comparte con el TextView, este
control tiene un atributo
adicional
android:checked,
que permite a la opcin estar
seleccionada, si el valor es true y false en caso contrario .

Spinners
Los Spinners proporcionan una manera rpida para seleccionar un valor de un
conjunto . Por defecto muestra un valor seleccionado, al tocar el spinner muestra
un men desplegable con todos los dems valores disponibles, de las cuales se
puede seleccionar uno nuevo.
Para trabajar con los Spinners es indispensable proporcionar un adaptador de
datos por medio del mtodo setAdapter() y proveer de un listener para poder
manipular
las
opciones
que
se
elijen
a
travs
del
mtodo setOnItemSelectedListener(). Tambin se puede definir en un recurso
de cadenas las opciones a mostrar, este recurso se indica en la propiedad
entries del spinner.
Para agregar un Spinner, desde el editor grfico del layout, se arrastra el objeto
localizado en la paleta de componentes del panel Widgets.
68

Gua de Android Certified Professional

Aparte de los atributos bsicos, el spinner cuenta con atributos propios los cuales
son:
android:prompt: indica el texto a mostrar cuando se muestra la lista de
opciones.
android:entries. indica el nombre de un recurso array xml que contiene
los elementos a mostrar.
Para agregar los datos desde un adaptador primero se obtiene la referencia en
cdigo del spinner con findViewById(), posteriormente se define el arreglo de
datos a mostrar y se pasa como parmetro al adaptador, una vez definido el
adaptador se agrega al spinner con el mtodo setAdapter().
Finalmente para manipular las opciones seleccionadas se establece un
setOnItemSelectedListener al spinner y sobreescribiendo el callback
onItemSelected() podremos acceder al elemento que fue seleccionado de la
lista.

Eventos
En Android, hay ms de una forma de interceptar eventos desde la interaccin
del usuario con la aplicacin, el enfoque principal es capturar los eventos
especficos de una vista (view). Y la clase View nos proporciona los medios para
hacerlo, mediante mtodos "callback" que el sistema de Android llama cuando
la respectiva accin ocurre en esa vista (view), estos mtodos estn contenidos
dentro de unas interfaces de la clase View llamadas detectores de eventos
(event listeners).
Estos detectores de eventos (event listeners) contienen un solo mtodo
69

Gua de Android Certified Professional

"callback", los cuales son:

onClick(): de View.OnClickListener. Llamado cuando el usuario da click


en el elemento, o presiona "enter" sobre l con las teclas de navegacin.
onLongClick(): de View.OnLongClickListener. Llamado cuando el
usuario da click y sostiene el click en el elemento, o presione y mantiene
el "enter" con las teclas de navegacin.

onFocusChange(): de View.OnFocusChangeListener. Llamado cuando


el usuario se desplaza sobre o fuera del elemento, usando las teclas de
navegacin.
onKey(): de View.OnKeyListener. Llamado cuando el usuario se centra
en el elemento y presiona o suelta una tecla en el hardware del
dispositivo.
onTouch(): de View.OnTouchListener. Llamado cuando el usuario realiza
una accin calificada como un evento de toque, incluyendo presionar,
liberar, o cualquier gesto de movimiento en la pantalla (dentro de los
lmites del elemento).
onCreateContextMenu():
de
View.OnCreateContextMenuListener.
Llamado cuando se esta construyendo un men contextual (resultado de
un click sostenido).

7.3 Uso de ListView


La vista de grupo ListView permite mostrar una lista de elementos de forma
vertical. Estructuralmente un ListView contiene un View especfico por cada fila.
Tambin se compone de un ScrollView, el cual permite generar el
desplazamiento vertical por si se agota la pantalla para nuestros elementos.
La lista de elementos es poblada automticamente usando un Adapter
(ListAdapter). Un adaptador es un objeto que comunica a un ListView los datos
necesarios, ya se extrayendo el contenido de un arreglo o de una consulta a
base de datos, para crear las filas de la lista. Es decir, conecta la lista con una
fuente de informacin. Adems de proveer la informacin, tambin genera los
Views para cada elemento de la lista. Por lo tanto, la lista solo termina mostrando
la informacin final.
Los adaptadores se representan programticamente por la clase Adapter.
Dependiendo de la naturaleza de la lista se elegir el tipo de adaptador. Existen
70

Gua de Android Certified Professional

subclases de la clase Adapter provedas por Android, que facilitan la mayora de


casos al poblar una lista. Pero tambin se puede personalizar su
comportamiento para cubrir la necesidades requeridas.
Para agregar un ListView, desde el editor grfico del layout, se arrastra el objeto
localizado en la paleta de componentes del panel Containers.

Dentro de las propiedades del ListView se tiene las siguientes:

android:id. Este es el id que se utiliza en el cdigo para referirse a la lista.

android:layout_width = match_parent. Con esto le decimos a nuestra


aplicacin que la lista ocupar todo el ancho disponible por el layout
padre.

android:layout_height = wrap_content. Este valor indica que la lista


ser tan alta como sea necesario para mostrar el contenido.

Para la implementacin de una ListView, en el cdigo se puede realizar de dos


formas desde una Activity que extienda o herede de la clase ListActivity o de
Activity.
Eventos del ListView
Es posible ejecutar acciones cuando se selecciona algn item de la lista,
haciendo uso de la interfaz OnItemClickListener. Esta interfaz permite disparar
el mtodo onItemClick(), el cual permitir ejecutar acciones sobre el item.
onItemClick() recibe tres parmetros. El primero es el View que usa al adaptador,
en este caso la lista. El segundo es el View del item que ha sido presionado, el
tercero hace referencia a la posicin del item en la fuente de datos que maneja
el adaptador y el cuarto es un identificador del elemento.

71

Gua de Android Certified Professional

7.3.1

Listas simples

En las listas simples el adaptador por default espera un slo TextView para
llenar, es decir la view de cada fila estar conformada solo por texto.

Fuente
de datos

Adapter
Item 1

View

TextView

Item 2
Item 3

Argentina

ListView
Chile
Paraguay

Para la implementacin de una ListView primero se asocia el ListView de


nuestra clase java con la vista ListView mediante findViewById. A
continuacin en el mtodo crate se declara el arreglo que contendr los
elementos que se desean mostrar en la lista:
Una vez hecho esto, se crea el Adapter, el cual permite el acceso a los
elementos del arreglo y tambin es responsable de crear una vista para cada
elemento en el arreglo, en este caso ser un ArrayAdapter y se aade a la
lista con el mtodo setAdapter, el cual, en uno de sus constructores, recibe
en orden :
El contexto de la actividad donde se est llamando.
El id del recurso layout que contiene un TextView que se usar para
crear la vista para cada elemento (simple_list_item_1)por defecto.
El arreglo de Strings.

72

Gua de Android Certified Professional

7.3.2

Listas personalizadas

En adicin al control predeterminado de tipo lista mencionado anteriormente,


es posible crear listas personalizadas, tiles para que elementos de la lista
usen algn diseo creado manualmente, en este caso se tendr que crear
una clase que extienda de ArrayAdapter para crear el nuevo diseo.

Fuente
de

Item
1

Adapte
r

View

Meln
$10.50

Item
2
Meln
$10.50
Manzana
$19.90

ListView

Naranja
$6.50

Para esto se tienen los siguientes pasos:


1.- Establecer el diseo en un archivo layout que contendr una
imagen (ImageView) y un texto (TextView):
2.- Se declaran 2 arreglos, uno para los textos y otro para las id de las
imgenes que corresponden con los textos:
3.- Se crea una clase que extiende o hereda de ArrayAdapter y en el
mtodo sobreescrito getView estableceremos el texto y el id del
recurso drawable (imagen) que queremos que se muestre al lado del
73

Gua de Android Certified Professional

texto:
Parmetros de getView():

position: Es la posicin del item que deseamos inflar en la lista.

convertView: Representa la instancia donde asignaremos el View


creado. La primera vez que es llamado para un elemento especifico
su valor ser null, debido a que aun no existe el view en la lista, pero
una vez es haya sido creado debemos evitar volver a inflarlo, ya que
esto consumira memoria extra.

parent: View padre donde se asignar nuestro item, en este caso ser
el ListView.
4.- Y por ltimo se establece el adaptador propio en la ListView con el
mtodo setListAdapter:

7.4

Uso de TabLayout

TabLayout es un tipo de layout especial que consiste en la distribucin de


elementos mediante pestaas o tabs. El elemento principal de un conjunto
de pestaas ser el control TabHost y deber tener obligatoriamente como
id el valor @android:id/tabhost.
Para implementar un TabLayout primero se define el archivo layout XML con
el elemento raz <TabHost> que es un contenedor para una view de una
ventana con pestaas, este elemento raz tiene 2 hijos:

74

Gua de Android Certified Professional

TabWidget: que muestra un conjunto de etiquetas de las pestaas


que representan cada Activity en la coleccin de pestaas.
FrameLayout: que muestra el contenido de la Activity.

Tambin se deben definir Activities para las pestaas, una por cada una, de
forma normal y sobreescribir los mtodos onPause() y onResume() los
cuales son llamados cada vez que se sale o entra, respectivamente, de una
pestaa.
La Activity principal debe extender o heredar de TabActivity y se debe
implementar la agregacin de las Activities a las pestaas. Para esto:

Primero se obtiene la referencia del TabHost


Posteriormente se crea un objeto de tipo TabSpec para cada una de las
pestaas que se quieran aadir mediante el mtodo newTabSpec(), al
que se le pasa como parmetro una etiqueta identificativa de la pestaa
(ejemplo mitab1, mitab2). Ademas, tambin se asigna el layout de
contenido
correspondiente
a
la
pestaa
llamando
al
mtodo setContent(). Para indicar el texto y el cono a mostrar en la
pestaa ser mediante el mtodo setIndicator(texto, icono).
Finalmente se aade la nueva pestaa al control mediante el
mtodoaddTab().

75

Gua de Android Certified Professional

76

Gua de Android Certified Professional

8.

Temas, estilos y elementos grficos.

Los temas, son el mecanismo que Android proporciona para aplicar un estilo
coherente a una aplicacin completa o a una sola Actividad. Un estilo es una
coleccin de propiedades que especifican el aspecto y el formato de una vista o
ventana, especificando las propiedades visuales de los elementos que componen
la interfaz de usuario, como el color, la altura y el tamao de fuente. A partir de la
versin de Android 4.0 (Ice Cream Sandwich), la plataforma proporciona una serie
de temas que pueden ser utilizados para construir aplicaciones, algunos de estos
temas son:

Holo Light.
Holo Dark.
Holo Light with dark action bars.
Material.
Material Light.
Material Light with dark action bars.

8.1.

Creacin y uso de estilos.

Recursos de estilo en una aplicacin en Android. Es este tema se muestra la


definicin en los archivos de recursos de estilo y la implementacin en las
diferentes partes de una aplicacin en base a su uso.
Un estilo debe ser definido a travs de un archivo recurso XML y guardado en
el directorio /res/value, por lo que debe encontrarse separado del XML que
especifica el diseo (layout), permitiendo as separar el diseo del contenido. El
elemento raz, de este archivo XML estilo, debe ser una etiqueta <resources>,
y por cada estilo que se desee crear, se debe agregar un elemento hijo <style>
con el argumento obligatorio name="" que declara el nombre de ese estilo,
luego como elementos hijos del anterior, se deben agregar elementos <item>
que declaran las propiedades que se aplicarn al usar ese estilo.

77

Gua de Android Certified Professional

El atributo parent en el elemento <style> es opcional y especifica el ID del


recurso, de otro estilo, del cual se quiere heredar las propiedades,
sobrescribiendo algunas de ellas.
Los elementos hijos <style>, son convertidos, en tiempo de compilacin, en
recursos de la aplicacin que pueden ser referenciados por valor con el
atributo name del elemento <style>, en un archivo de diseo XML (layout).

Otra forma de aplicar estilos, esta vez a una Actividad o a la aplicacin


completa, es agregando el atributo android:theme al elemento <activity> o
<application> en el archivo AndroiManifest.xml

78

Gua de Android Certified Professional

Si se desea aplicar un tema a una Activity de forma dinmica en tiempo de


ejecucin, se debe llamar al mtodo setTheme() pasndole como parmetro
el identificador del recurso. Esto se debe hacer antes de llamar al constructor
de la clase padre y llamar al mtodo que establece el contenido de la
Actividad setContentView().

8.2. Creacin de conos y comprensin de tamaos


La iconografa es parte importante dentro de una aplicacin. En este tema se
aborda la creacin y uso de conos en un proyecto, as como la comprensin
de los diferentes tamaos de pantalla y las unidades de medida de Android.
Una parte importante para la originalidad y el reconocimiento de una buena
aplicacin es el proveerla con un diseo bien formado, esto incluye conos
personalizados. La pgina de desarrolladores de Android provee una extensa
gua y recursos que son tiles para esta tarea.
https://www.google.com/design/spec/style/icons.html
En esta gua se proveen las caractersticas, formato, tamaos y todo lo
requerido por Android para la correcta creacin de conos, estilos, temas y
otros puntos importantes del diseo de la aplicacin.
Otro de los aspectos que se deben tomar en cuenta al momento de crear
conos es el tamao de estos. La siguiente tabla muestra los tamaos exactos
que deben tener los conos para presentarlos en diferentes tamaos de
pantalla (densidades de pantalla).

79

Gua de Android Certified Professional

Otro de los recursos que nos provee Android para la correcta creacin de
iconografa es una gua con herramientas, ejemplos y diseos que pueden
ser modificados para acoplarlos al contexto de nuestro proyecto. Podemos
consultar esta informacin en:
http://developer.android.com/intl/es/design/downloads/index.html

8.3. Uso de la herramienta draw9patch


Con la finalidad de tener una crear conos responsivos para las aplicaciones
Android, se muestra el uso de la herramienta draw9patch.
La herramienta draw9patch permite crear imgenes PNG con la propiedad
de poderse escalar de manera automtica a la forma deseada, y cuando el
componente al cual se le agrega excede los lmites de la imagen. Por ejemplo
si se quiere poner un fondo en un botn, el tamao de estos pueden variar
dependiendo de varias cosas (entre ellas el tamao de pantalla), as que el
fondo se debe estirar para acomodarse a diferentes tamaos. El recurso
ninePatch generado por esta herramienta es una imagen PNG que contiene
un borde extra del tamao de 1 pixel, utilizado para definir las zonas
estirables y las estticas. El la extensin con la que se guarda el recurso es
.9.png, preferentemente dentro del directorio res/drawable del proyecto.
La herramienta draw9patch se encuentra dentro de las herramientas del SDK
de Android, en la carpeta tools.

80

Gua de Android Certified Professional

81

Gua de Android Certified Professional

8.4. Comprensin de tamao de pantalla y densidad


Explicacin de conceptos relacionados con tamaos y la densidad de la
pantalla de un dispositivo. Aplicacin de estos conceptos al momento de
desarrollar aplicaciones.
Uno de los aspectos ms importantes en Android es sin lugar a dudas el
diseo de interfaces, ya que esta ser la encargada de incitar al usuario a
utilizar una aplicacin. Si bien, la funcionalidad no deja de ser importante, en
el desarrollo mvil se ha observado un patrn constate en el cual los usuarios
no solo buscan que las aplicaciones realicen sus funcionalidad de manera
correcta y rpida sino que adems la interfaz con la que se interacta sea
llamativa y usable.
Debido a que Android corre en una diversidad de dispositivos muy alta, ya
sean telfonos mviles o tabletas, las aplicaciones deben lidiar con el proceso
de adaptacin a mltiples tamaos de pantallas. Android facilita el proceso
de adaptacin, sin embargo se deben conocer algunos conceptos
importantes para la completa comprensin.

Tamao de pantalla. Es el tamao fsico de la pantalla en diagonal.


Android divide el rango de tamaos de pantalla en:
o small : al menos 426dp x 320dp
o normal : al menos 470dp x 320dp
o large : al menos 640dp x 480dp
o xlarge : al menos 960dp x 720dp

Densidad de pantalla (DPI). Es la cantidad de pixeles dentro del rea


fsica de una pulgada de la pantalla, a mayor densidad mayor resolucin.
A esto se le conoce como DPI (dots per inches) o PPP en espaol, sin
embargo en Android se utiliza el termino DPI nunca PPP.
Pixeles independientes de la densidad (DP). Un pixel virtual que escala
el tamao fsico de un pixel a 160 dpi.

8.4.1.

Un poco ms sobre DP.

Como se mencion anteriormente, el DP es una unidad de medida de un


pixel virtual la cual es utilizada en la definicin de diseo de interfaces de
usuario en Android con el fin de expresar las dimensiones del diseo y de
la posicin de una manera independiente de la densidad de pantalla del
dispositivo.

82

Gua de Android Certified Professional

Los pixeles independientes de la densidad equivalen a un pxel fsico en


una pantalla de 160 DPI, que es la densidad de referencia asumida por el
sistema como la densidad media de la pantalla. En tiempo de ejecucin,
el sistema maneja de manera transparente cualquier ampliacin de las
unidades de DP segn sea necesario, en base a la densidad real de la
pantalla que se est utilizando.
Al igual que los tamaos de pantalla, Android divide a las densidades de
pantalla en cuatro densidades bsicas: LDPI (bajo), MDPI (medio), HDPI
(alto), y XHDPI (muy alta). Esto es importante ya que se debern
proporcionar a la aplicacin todos los elementos grficos (bitmaps) en
diferentes densidades. Si no se desea realizar todos los sets de
imgenes, por lo menos se tendr que entregar un set en MDPI y HDPI
para cualquier aplicacin Android, ya que son las densidades con mayor
presencia.

Una vez generados los recursos necesarios con las especificaciones


requeridas, se deben situar adecuadamente en el subdirectorio mipmapque les corresponde bajo la carpeta res/ del proyecto, de esta manera el
sistema podr seleccionar correspondiente de manera automtica en
funcin a la densidad de pantalla del dispositivo en el que se est
ejecutando la aplicacin.

83

Gua de Android Certified Professional

84

Gua de Android Certified Professional

9. Animacin y grficos.
9.1. Animacin cuadro a cuadro (Frame animation)
Creacin y uso de recursos de imagen para crear animaciones de tipo frame
(animaciones cuadro a cuadro) y la incorporacin de estas animaciones a un
proyecto Android.
Las animaciones cuadro por cuadro se encuentran definidas por una serie de
objetos dibujables que pueden ser utilizados como fondo de un elemento
view.
Para crear una animacin cuadro por cuadro:
Tener una serie de imgenes (fotogramas de la animacin) preparadas y
colocarlas en la carpeta drawable del proyecto.

Crear un archivo recurso XML bajo la carpeta res/drawable.

Dentro del archivo definir un elemento <animation list>, que ser el


encargado de contener a todos los fotogramas de la animacin.

Por cada elemento imagen a mostrar en la animacin se debe agregar


una etiqueta <item> indicando los atributos drawable, para el nombre del
recurso, y duration, para la duracin del fotograma en pantalla (en
milisegundos).

Agregar al archivo XML layout de la Actividad un objeto de tipo View


(imageView).
85

Gua de Android Certified Professional

En cdigo, obtener la referencia al objeto imageView definido en el XML


y agregar una propiedad de tipo AnimationDrawable.

Establecer el recurso animation-list, declarado anteriormente, como


recurso background del objeto ImageView y a su vez obtener ese
recurso background y castearlo al tipo AnimationDrawable.

Iniciar la animacin llamando al mtodo start().

9.2. Animacin sincronizada (Tween Animation).


Creacin y uso de recursos de animacin propios de Android para crear
animaciones de tipo Tween (animaciones sincronizadas) y la incorporacin
de estas animaciones a un proyecto Android.
Una animacin sincronizada o "tween animation" puede realizar series de
transformaciones simples (posicin, tamao, rotacin y transparencia) en el
contenido de un objeto View. Por ejemplo, si se tiene un objeto TextView se
puede aplicar moverlo, rotarlo, aumentarlo, disminuirlo o cambiarle la
transparencia al texto.

86

Gua de Android Certified Professional

Estas transformaciones, dadas por las instrucciones de animacin, pueden


estar escritas en cdigo pero es recomendable, escribirlas en un archivo
XML.
Las instrucciones de la animacin (<translate>, <rotate>, <scale>, <alpha>)
pueden ser secuenciales o simultneas y cada tipo de transformacin tiene
parmetros especficos, aunque algunos parmetros son comunes a todas
las transformaciones como la duracin. Para crear una animacin
sincronizada:
Crear un archivo dentro de la carpeta res/anim del proyecto.
El archivo deber contener las transformaciones de la animacin agrupadas
en un elemento <set>, estos elementos pueden ir anidados.

Aadir al archivo XML layout de la Actividad un objeto View al cual se le


quiera aplicar la transformacin.

87

Gua de Android Certified Professional

Dentro del cdigo, obtener la referencia al elemento View definido


previamente, declarar una variable de tipo Animation y cargarla con el mtodo
esttico AnimationUtils.loadAnimation( )

Iniciar la animacin con el mtodo startAnimation() de la View a la que


queremos aplicar la transformacin.

9.3. Trabajar con grficos 2D


En este capitulo se ve la creacin y uso de grficos 2D, as como las
principales caractersticas que pueden ser utilizadas para enriquecer las
vistas en una aplicacin.
Android puede hacer uso de grficos 2D usando la API de dibujo disponible
en el sistema, la cual, entre otras cosas, puede realizar la lectura de un
archivo XML que defina algunas formas grficas. Este archivo estar
almacenado en la carpeta res/drawable y conteniendo la declaracin y las
propiedades que tendr la forma grfica que se dibujar.
Por ejemplo, para dibujar un rectngulo con un color degradado, un relleno
en contenido (padding) y unas esquinas redondeadas, el archivo
rectangulo.xml contendr:

88

Gua de Android Certified Professional

Ahora, para aplicar esa forma a un elemento View (para este ejemplo un
botn) basta con poner ese recurso drawable como background del
elemento.

89

Gua de Android Certified Professional

10.

Mens

Los mens son componentes de una interfaz de usuario comn en muchos tipos
de aplicaciones. Para proporcionar una experiencia de usuario familiar y
consistente, debe utilizar las API de men para presentar las acciones del
usuario y otras opciones en sus actividades.
Aunque la experiencia de diseo y facilidad de uso para algunos elementos del
men han cambiado, la semntica para definir un conjunto de acciones y
opciones se sigue basando en la primera API de men de Android. A
continuacin se presentaran los tres tipos fundamentales de mens disponibles
para presentar en una aplicacin.

10.1.

Men de opciones

En esta seccin se muestra como crear un men de opciones e incorporarlo


a una aplicacin. Tambin se explica la definicin de una accin a cada
opcin del men y como personalizar cada una de las opciones.
El men de opciones es la coleccin principal de los elementos de men para
una Actividad. Es el lugar donde se debe colocar acciones que tienen un
impacto global en la aplicacin, como "Bsqueda", "Redactar correo
electrnico," y "Ajustes".
En la versin de Android 2.3 o inferior, los usuarios pueden acceder al panel
del men de opciones pulsando el botn Men. En Android 3.0 y superior,
elementos del men de opciones se presentan en la barra de accin (Action
Bar) de la aplicacin, permitiendo acceder a l desde el botn fsico o desde
el cono en el Action Bar.
Los Mens se pueden definir en Android en el formato XML, o mediante
cdigo el cual generara el men en tiempo de ejecucin. Para la opcin que
involucra el archivo XML, este se debe crear en el directorio res/menu/ y
debe contar con los siguientes elementos:

<menu>: Define el elemento raz del archivo y puede contener uno o


ms elementos <item> y <group>.

<item>: Representa un solo elemento del men, manejado en el


cdigo por la interfaz MenuItem. Este elemento puede contener
elementos <menu> anidados con el fin de crear submens.

<group>: Es opcional, contiene elementos <item> de forma invisible.


Permite categorizar los elementos del men para facilitar
90

Gua de Android Certified Professional

caractersticas compartidas por varios elementos, como estado o


visibilidad.

Otra forma de uso muy til para el elemento <group> es usar checkBox o
radioButton para activar o desactivar opciones, para esto es necesario
agregar el atributo android:checkableBehavior en el elemento <group>,
pudiendo seleccionar una pocin o varias del grupo de elementos.

10.1.1. Action Bar y mens


Uso del Action Bar de Android para incorporar mens de opciones a la
interfaz de una aplicacin.
La barra de accin de Android o Action Bar, es un componente capaz de
ser visible sobre una Activity. Es una funcin de la Activity que identifica
a la aplicacin y provee acciones a los usuarios y modos de navegacin,
se caracteriza por ofrecer una interfaz consistente en las aplicaciones y
adaptarse a diferentes configuraciones de pantalla.
Antes de agregar elementos a la Action Bar es importante mencionar que
esta tiene un lmite de tamao y por lo cual se debe limitar el nmero de
elementos o tems que son agregados, si se desea aadir un nmero de
elementos y no se tiene el tamao suficiente para ellos, se dispone de
una seccin llamada men overflow (men de sobre flujo) representada
por tres puntos verticales.

Para agregar tems a la Action Bar de una aplicacin se debe agregar la


propiedad android:showAsAction a los elementos tem que definen un
men en el archivo XML. Este atributo indica si la opcin de men se
91

Gua de Android Certified Professional

mostrara como botn de accin en la barra de accin o como parte del


men Overflow. Puede tomar varios valores:

ifRoom: Se mostrara como botn de accin slo si hay espacio


disponible.

withText: Se mostrara el texto de la opcin junto al cono en el


caso de que este se est mostrando como botn de accin.

never: El elemento siempre se mostrara como parte del men


Overflow.

always: La opcin siempre se mostrara como botn de accin.


Este valor puede provocar que los elementos se solapen si no
hay espacio suficiente para ellos.

Para crear un men para la aplicacin:

Crear el archivo XML bajo el directorio res/menu.

Para asociarlo el men a una Activity, se debe sobrescribir el mtodo


onCreateOptionsMenu(Menu menu) en la Actividad.

92

Gua de Android Certified Professional

Para responder a cada elemento del men sobrescribimos el mtodo


onOptionsItemSelected(MenuItem item).

Alternativamente a la implementacin ya mencionada, se puede crear


un men en tiempo de ejecucin aadiendo a la variable men, del
mtodo onCreateOptionsMenu(Menu menu), cada uno de los
elementos del men llamando a alguno de los mtodos
sobrecargados.

93

Gua de Android Certified Professional

10.2.

Men contextual

Creacin y uso de los mens de tipo contextual en un componente widget de


la aplicacin. Definicin de una accin para cada elemento del men.
La implementacin de los mens contextuales es similar a la de los mens
de opciones, tambin se crea el archivo XML que describe al men, la
diferencia radica en que se debe asociar el men a un elemento View (Button,
TextView, etc.) que responder al clic sostenido del usuario, haciendo que
aparezca el men contextual, esto se hace en el mtodo onCreate() de la
Actividad.

Lo siguiente ser "inflar" el archivo XML que describe al men en el mtodo


onCreateContextMenu( ).

94

Gua de Android Certified Professional

Para responder a cada elemento del men, se debe sobrescribir el mtodo


onContextItemSelect( ).

10.3.

Men Popup

Creacin y uso de los mens de tipo popup en un componente widget de la


aplicacin. Definicin de una accin para cada elemento del men.
Se trata de un tipo de men modal anclado a un objeto View (Button,
Textview, etc.). Aparece debajo de la vista de anclaje si existe espacio o de
lo contrario por encima de esta.
95

Gua de Android Certified Professional

Para mostrar un men popup anclado a un elemento View, se crea


nuevamente el archivo recurso XML para el men. Posteriormente en algn
evento del elemento View se crea un objeto de tipo MenuPopup, el cual
permitir inflar el archivo XML del men y mostrarlo.

96

Gua de Android Certified Professional

11.

Dilogos y notificaciones

11.1.

Dilogos

Los dilogos son una forma de interaccin entre el usuario y la aplicacin


para poder recopilar informacin y para preguntarle al usuario sobre alguna
accin a realizar. En esta seccin se muestra como crear los diferentes tipos
de dilogos que se pueden implementar en una aplicacin.
Un dilogo es una pequea ventana que presenta informacin al usuario con
el fin de que este tome alguna decisin o ingrese informacin adicional que
la aplicacin requiere, se caracteriza principalmente por no ocupar toda la
pantalla y normalmente se usa para eventos modales que requieren que un
usuario tome o decida una accin antes de continuar.
La clase Dialog es la clase base para todos los dilogos, pero se recomienda
evita crear instancias de Dialog directamente. En su lugar se deben utilizar
alguna de las siguientes subclases.

AlertDialog. Se trata de un cuadro de texto (dilogo) que permite


mostrar un ttulo, un mximo de tres botones, una lista de elementos
seleccionables o un diseo personalizado para que el usuario
interacte con la aplicacin.

DatePickerDialog o TimePickerDialog. Es un dilogo con una interfaz


de usuario predefinida que permite al usuario seleccionar una hora y/o
fecha.

Estas clases permiten definir el estilo y la estructura de un dilogo, pero para


poder mostrar cualquier dilogo se requiere el uso de un DialogFragment
como contenedor. La clase DialogFragment proporciona todos los controles
requeridos para crear su dilogo y gestionar su aparicin.
Usando DialogFragment para gestionar un dilogo se asegura que los
eventos del ciclo de vida son manejados correctamente como cuando el
usuario pulsa el botn atrs o gira la pantalla. La clase DialogFragment
tambin permite volver a utilizar la interfaz de usuario del cuadro de dilogo
como un componente integrable en una interfaz de usuario ms grande, al
igual que un fragmento tradicional (por ejemplo, cuando desea que la interfaz
de usuario de dilogo que aparezca de manera diferente en las pantallas
grandes y pequeas).

97

Gua de Android Certified Professional

NOTA: Debido a que la clase dialogFragment se agreg originalmente con


Android 3.0 (API 11 de Android), se recomienda el uso de la biblioteca de
soporte
(android.support.v4.app.DialogFragment)
para
crear
el
dialogFragment en aplicaciones que contengan un nivel menor a 11. Si la
versin mnima de la aplicacin es completamente compatible con el API 11
de Android se recomienda crear el dialogFragmente sin la biblioteca de
soporte (android.app.DialogFragment).

11.1.1. Crear dilogos de alerta


Creacin y uso de los dilogos de tipo alerta dentro de una aplicacin en
Android.
Para crear un dilogo de alerta bsico, se debe sobrescribir el mtodo
onCreateDialog(Bundle savedInstanceState) en la clase que extienda o
herede de la clase DialogFragment. Para agregar un texto al dilogo basta
con crear una instancia de la clase AlertDialog.Builder y utilizar el mtodo
setMessage(String).

Para mostrar el mensaje, basta con crear una instancia de la clase que
hereda de DialogFragment y llamar al mtodo show() del objeto.

98

Gua de Android Certified Professional

El dilogo se presentar de la siguiente manera.

Adems del mensaje, un dilogo puede contener elementos como ttulo


y botones. Para aadir estos elementos al dilogo se deben llamar a los
mtodos set del objeto AlertDialog.Builder para cada propiedad.

99

Gua de Android Certified Professional

Aadiendo una lista al dilogo.


Se tiene la opcin de poder agregar una lista de opcin simple o mltiple
(radioButtons o checkBoxes respectivamente) al dilogo para poder
enriquecer la funcionalidad de este. Para implementar una lista de opcin
simple se usa el mtodo setSingleChoiceItems() el cual se encuentra
sobrecargado de 4 formas, una de ellas recibe, en orden, los parmetros:

Arreglo de cadenas de texto (CharSequence[] elementos)

Nmero entero de la opcin inicialmente seleccionada (int seleccion)

Detector (tambin conocido como listener), el cual es una clase que


implemente la interfaz DialogInterface.OnClickListener al cual se le
notificara cuando se seleccione una opcin.

Es importante mencionar que para mostrar en un dilogo una lista de


opciones (mltiple o simple) el AlertDialog.Builder no debe tener
agregada la propiedad setMessage(String).

100

Gua de Android Certified Professional

11.1.2. Crear dilogos personalizados


Creacin y uso de los dilogos personalizados dentro de una aplicacin
en Android.
AlertDialog tambin permite crear dilogos personalizados a partir de un
archivo recurso XML de diseo (Layout), para poder hacer uso de esta
vista se debe utilizar el mtodo setView( ) en el objeto AlertDialog.Builder
para agregar al AlertDialog.
El mtodo setView( ) recibe como parmetro un objeto de tipo View, el
cual se debe "inflar" en el archivo XML del diseo, para as obtener el
objeto View dentro del dilogo.

101

Gua de Android Certified Professional

11.1.3. Crear dilogos de progreso


Creacin y uso de los dilogos de progreso dentro de una aplicacin en
Android.
Una barra de progreso es til ya que permite indicar al usuario que algo
esta pasando en la aplicacin y le permite tener una idea rpida de cunto
tardara aproximadamente en finalizar la tarea. Android incluye un tipo de
dilogo de progreso en la clase ProgressDialog, que brinda la opcin de
muestra un dilogo con una barra de progreso (extiende de
android.app.AlertDialog).
Este dilogo permite usar un mensaje de texto o una vista (View) al mismo
tiempo, el rango de progreso es de 0 a 10000, y se puede hacer
cancelable con la tecla "back" del dispositivo (a menos que se especifique
lo contrario).

El dilogo de progreso permite ser creado con dos estilos diferentes,


ambos aplicados con el mtodo setProgressStyle(int estilo):

Barra de progreso horizontal:


STYLE_HORIZONTAL.

Barra de progreso circular girando: definida por la constante


STYLE_SPINNER.

definida

por

la

constante

Una de las opciones que ofrece esta clase es la posibilidad de


personalizar la barra de progreso mostrada para utilizar un recurso
Drawable,
lo
que
se
logra
llamando
al
mtodo
setProgressDrawable(Drawable).
102

Gua de Android Certified Professional

11.2.

Notificaciones.

Las notificaciones son los elementos que permiten alertar al usuario cuando
un evento requiere de una respuesta. En esta seccin se explica como definir
y hacer uso de las notificaciones.
Una notificacin es un mensaje que se muestra al usuario fuera de la interfaz
normal de la aplicacin. Aparece como un cono en el rea de notificacin de
la pantalla del dispositivo Android y es posible hacer que vaya acompaada
con sonido, vibracin y el LED del dispositivo (si cuenta con el) al emitir la
notificacin, para mostrar los detalles cuando el usuario abre la barra de
notificaciones.
Las notificaciones primero se muestran en su vista normal, la primera que
visualiza el usuario, en la barra de estado. O en su forma de vista ampliada,
que es cuando se expande la barra de notificaciones o se expande la
notificacin de manera individual. Ambas vistas pueden contener conos en
diferente tamao.
Para realizar la implementacin de una notificacin se deben tomar los
siguientes puntos:

Se debe especificar la informacin y las acciones que realizar la


notificacin al ser presionada por el usuario, por ejemplo para ir
directamente a una Activity desde la notificacin a travs de un
PendingIntent.

Para
crear
la
notificacin,
se
llama
al
mtodo
NotificationCompat.Builder.build(), que regresa un objeto Notification.

Para emitir la notificacin se le pasa el objeto Notification al sistema


llamando al mtodo NotificationManager.notify().
103

Gua de Android Certified Professional

11.3.

Notificaciones Toast

Los Toast son mensajes de corta duracin que proporcionan informacin


simple al usuario, a continuacin se explica el uso de estos mensajes en las
aplicaciones, as como la correcta forma de personalizarlos.
Una notificacin Toast permite proporcionar informacin al usuario de alguna
operacin sencilla y no crtica en una pequea ventana emergente. Slo
ocupa la cantidad de espacio requerido para el mensaje y la Actividad en
pantalla permanece visible y permite la interaccin en todo momento.
Un uso aplicable a un Toast es crear un borrado de un correo electrnico, un
mensaje Toast le comunica al usuario que puede seguir la edicin en otro
momento porque se ha guardado su correo en borrador. Los mensajes Toast
desaparecen automticamente despus de un tiempo de espera.

11.3.1. Toasts Simples


Para mostrar un mensaje Toast en pantalla, se debe crear una instancia
de un objeto Toast (clase incluida en el paquete android.widget), llamando
a uno de los mtodos estticos makeText( ), el cual toma 3 parmetros:

Contexto (Context) de la aplicacin.


Texto del mensaje que se quiere mostrar.
Duracin del toast (LENGTH_LONG o LENGTH_SHORT).

104

Gua de Android Certified Professional

Este mtodo devuelve un objeto Toast y para mostrarlo debe usarse el


mtodo show( ), una vez hecho esto se mostrara el Toast en la pantalla
por el tiempo definido en la duracin y posteriormente desaparecer.

Adicionalmente se pude modificar la posicin del mensaje en pantalla.

11.3.2. Toasts Personalizados


Si un mensaje de texto simple no es suficiente, la clase Toast permite
crear un diseo personalizado para la notificacin. Para crear una
personalizacin del mensaje, se debe definir una vista de diseo, en un
recurso XML o en el cdigo de aplicacin, y pasar el objeto View al mtodo
setView(View) del Toast.

105

Gua de Android Certified Professional

12.

Multimedia

Uso del framework multimedia de Android en una aplicacin para la reproduccin


de Audio y Video, as como el uso de la cmara del dispositivo para capturar y
mostrar una fotografa.
El Framework Multimedia de Android incluye soporte multimedia para reproducir
diversos tipos de medios comunes, permitiendo integrar fcilmente audio, vdeo
e imgenes en la aplicacin. Existen 2 clases que son usadas para reproducir
audio y video en el framework de Android: MediaPlayer y AudioManager,
respectivamente.
Un aspecto importante de la clase MediaPlayer que se debe tener en mente es
que el control de la reproduccin es manejado como una mquina de estados,
es decir, que el objeto MediaPlayer tiene un estado interno que siempre hay que
tener en cuenta al escribir el cdigo, ya que algunas operaciones solamente son
vlidas cuando el reproductor esta en ciertos estados, si se realiza una
operacin, mientras esta en un estado incorrecto, el sistema puede lanzar una
excepcin o causar comportamientos indeseables.
El diagrama de estados del objeto MediaPlayer muestra cules mtodos mueven
este objeto de un estado a otro.

Inicialmente, cuando se crea un nuevo MediaPlayer, esta en estado reposo


(idle).

Cuando se llama al mtodo setDataSource( ) se pasa al estado inicializado

Cuando es llamando al mtodo prepare( ) o prepareAsync( ) se realiza la


preparacin con lo que entra en estado preparado

En este punto se puede llamar a start(), para iniciar la reproduccin.

106

Gua de Android Certified Professional

107

Gua de Android Certified Professional

12.1.

Reproduccin de audio con MediaPlayer

Reproduccin de un archivo de audio haciendo uso de la clase MediaPlayer


de Android.
Si se desea reproducir un elemento de audio en formato mp3 proporcionando
la ruta del archivo, se debe realizar la siguiente implementacin:

Crear un objeto URI con la ruta del recurso a mostrar.

Crear la instancia de un objeto MediaPlayer.

Aadir el recurso al MediaPlayer con el mtodo setDataSources( ).

Preparar al objeto MediaPlayer con el mtodo prepare( ).

Iniciar la reproduccin del elemento con el mtodo start( ).

108

Gua de Android Certified Professional

12.2.

Reproduccin de video con MediaPlayer

Reproduccin de un archivo de video haciendo uso de la clase MediaPlayer


y de SurfaceView de Android.
Si se desea reproducir un elemento de video en formato mp4 proporcionando
la ruta del archivo, se debe realizar la siguiente implementacin:

Crear un objeto URI con la ruta del recurso a mostrar.


Instanciar el objeto MediaPlayer.
Aadir el recuro URI al MediaPlayer con el mtodo setDataSources( ).

Obtener la superficie (SurfaceView) en la cual se reproducir el video.


109

Gua de Android Certified Professional

12.3.

Establecer el objeto superficie, donde se reproducir el video, en el


objeto MediaPlayer.
Iniciar la reproduccin.

Reproduccin de video con VideoView

Se ilustra la manera de reproducir un recurso de video a travs del objeto


VideoView de Android, como alternativa a MadiaPlayer y SurfaceView.
Existe un Android un objeto View llamado VideoView, el cual nos permite
agrega al diseo de la interfaz de una Activity un reproductor de video. Es
ms simple que MediaPlayer ya que solo requiere como parmetro el URI o
la ruta de la fuente.

12.4.

Acceso a la cmara
110

Gua de Android Certified Professional

Descripcin del uso de la cmara del dispositivo y de la aplicacin por defecto


para capturar una imagen y mostrar dicha imagen en la aplicacin.
La clase Camera es utilizada para configurar los ajustes de captura de
imagen, iniciar / detener una vista previa, tomar fotos, y recuperar los cuadros
(fotogramas) para la codificacin de un vdeo. Esta clase es un cliente para
el servicio de la cmara, que gestiona el hardware real de la cmara.
Para acceder a la cmara del dispositivo, es obligatorio declarar el permiso
CAMERA en el archivo AndroidManifest.xml. De manera opcional tambin
pueden incluirse algunos elementos <uses features> en el archivo
manifiesto para declarar funciones extras para la aplicacin cmara.
Dado que la mayora de los dispositivos Android en la actualidad cuentan con
una cmara y una aplicacin para esta, la forma ms sencilla para hacer uso
de este recurso es llamar directamente a la aplicacin por default de la
cmara para que se encargue de realizar todas las operaciones necesarias.
A continuacin se muestra la forma de delegar esta responsabilidad a la
aplicacin de la cmara.
Para lanzar la aplicacin de cmara que se encuentra instalada en el
dispositivo.

Para recuperar la respuesta de la aplicacin de la cmara y mostrar el


resultado en un elemento ImageView.

111

Gua de Android Certified Professional

13.

Persistencia y Almacenamiento de Datos

En este capitulo se describen y explican las diferentes opciones que se tienen


en Android para el almacenamiento de datos, as como correcto uso.
Android proporciona diferentes opciones para poder almacenar datos desde las
aplicaciones.

SharedPreferences. Guarda datos primitivos en pares llave valor.

Almacenamiento interno. Guarda datos privados en la memoria interna


del dispositivo.

Almacenamiento externo. Guarda datos pblicos en el almacenamiento


externo compartido.

SQLite Databases. Permite guardar datos estructurados en una base de


datos privada.

13.1.

SharedPreferences

Uso de la clase SharedPreferences para el almacenamiento de datos


primitivos. Modos de privacidad disponibles para SharedPreferences.
Las preferencias compartidas (SharedPreferences) no son ms que datos
que una aplicacin debe guardar para personalizar la experiencia del usuario,
por ejemplo informacin personal, opciones de presentacin, etc.
La clase SharedPreferences provee un framework que permite guardar y
recuperar informacin en tipos de datos primitivos (boolean, float, int, long y
string) en forma de pares llave-valor que persistirn aunque la aplicacin sea
terminada o el dispositivo se apague o reinicie.
Se pueden tener uno o ms archivos de preferencias en una aplicacin, si es
solo uno se puede hacer uso del mtodo getPreferences(int) y si son muchos
se utiliza el mtodo getSharedPreferences(String, int) el cual recibe el
nombre del archivo de preferencias (que se guardara en formato XML),
ambos mtodos reciben un modo de acceso al recurso, 3 de esos modos
son:
MODE_PRIVATE. Solo la aplicacin que creo las preferencias tiene acceso
al recurso.

112

Gua de Android Certified Professional

MODE_WORLD_REDEABLE. Todas las aplicaciones pueden leer el recurso


de preferencias, pero solo la aplicacin que las cre puede modificarlas.
MODE_WORLD_WRITEABLE. Todas las aplicaciones pueden leer y
modificar el archivo de preferencias.
Para guardar valores en un archivo SharedPreferences.

Para recuperar valores de un archivo SharedPreferences.

13.2. PreferencesActivity
Concepto y uso de PreferencesActivity para la creacin de interfaces con la
opcin de preferencias. Esta es una variante de SharedPreferences.
Android ofrece la posibilidad de crear preferencias para la aplicacin
extendiendo de la clase PreferenceActivity (Obsoleta a partir de la version 3.0
de Android) o PreferenceFragment que provee un framework para crear
preferencias personalizadas, las cuales son guardadas de forma automtica
en un archivo XML usando preferencias compartidas.
Para crear un actividad de preferencias en la aplicacin, el primer paso a
realizar es aadir (en caso de no existir) a la carpetas res un subdirectorio con
el nombre xml.

113

Gua de Android Certified Professional

Dentro de la carpeta res/xml se deber crear un nuevo archivo de recurso, el


cual deber tener como elemento raz un PreferenceScreen.
Dentro del nodo PreferenceScreen deben incluirse los elementos Preference
que conformarn la actividad de preferencias.

En la implementacin, si se desea usar PreferenceFragment, debe crear un


objeto FragmentManager y prepararlo para poder mostrar el contenido de la
subclase de PreferenceFragment.

114

Gua de Android Certified Professional

Posteriormente llamar al mtodo addPreferencesFromResource(int), dentro del


mtodo onCreate(), de la clase que herede de PreferenceFragment. El mtodo
addPreferencesFromResource deber recibir como parmetro el recurso XML
almacenado en res/xml.

13.3. Sistema de archivos interno y externo


13.3.1. Almacenamiento interno
Uso de la memoria interna del dispositivo para el almacenamiento de
archivos. Obtener informacin de un archivo almacenado en memoria
interna
En el caso del almacenamiento interno (Internal Storage), por omisin los
archivos guardados en el almacenamiento interno son privados, solo para
la aplicacin que los cre, y otras aplicaciones no pueden acceder ellos.
Cuando la aplicacin que cre los archivos se desinstala, estos archivos
son eliminados del dispositivo.

115

Gua de Android Certified Professional

Para poder almacenar archivos en memoria interna, Android proporciona


el mtodo openFileOutput(), que recibe como parmetros el nombre del
fichero y el modo de acceso con el que queremos abrir el fichero. Estos
modos de acceso son los mismos que los presentados en
SharedPreferences (MODE_PRIVATE, MODE_WORLD_REDEABLE,
MODE_WORLD_WRITEABLE)
El mtodo openFileOutput devuelve una referencia al stream de salida
asociado al fichero (en forma de objeto FileOutputStream), a partir del
cual se pueden utilizar los mtodos de manipulacin de ficheros
tradicionales del lenguaje java. Para asegurar que la operacin de
escritura de un fichero se lleva a cabo sin causar errores, todas las
operaciones crticas deben de ser ejecutadas en un bloque try/catch para
poder interceptar posibles excepciones.

116

Gua de Android Certified Professional

Para recuperar el contenido de un archivo almacenado en memoria


interna.

13.3.2. Almacenamiento externo


Uso de la memoria externa del dispositivo para el almacenamiento de
archivos. Obtener informacin de un archivo almacenado en memoria
externa.
En el caso del almacenamiento externo (External Storage), los archivos
que son almacenados de esta forma no tienen permisos de acceso de
Linux, por lo que son compartidos para todas las aplicaciones. Una de las
grandes ventajas que se tienen en el almacenamiento externo es la
posibilidad de guardar grandes cantidades de datos.
Los elementos se almacenan, la mayora de las veces, en la tarjeta SD
(SD Card), que normalmente tiene un sistema de archivos FAT, aunque
Android tambin soporta los formatos EXT2, EXT3, EXT4.
El manejo de los archivos en Java en la tarjeta SD se hace con la clase
File del paquete java.io.File y debido a que la tarjeta SD puede ser
removida, o estar daada o sin acceso por diferentes razones, se hace
necesario, antes de realizar alguna operacin con archivos en la tarjeta
SD, verificar si es accesible el directorio de almacenamiento externo. Para
comprobar el estado de la memoria se hace uso del mtodo esttico
Environment.getExternalStorageState().
Otro punto importante que se debe tener en cuenta, al desarrollar una
aplicacin y hacer uso del almacenamiento externo es que al realizar
operaciones con archivos en el almacenamiento externo, es que se debe
solicitar el permiso WRITE_EXTERNAL_STORAGE, en caso de
escritura, o READ_EXTERNAL_STORAGE, en caso de lectura, en el
archivo AndroidManifest.xml

117

Gua de Android Certified Professional

Para recuperar el contenido de un archivo almacenado en memoria


externa.

118

Gua de Android Certified Professional

13.4. Base de datos en SQLite


Implementacin de una base de datos SQLite en Android para el
almacenamiento y recuperacin de informacin. Creacin de consultar para
obtener la informacin.
Android tiene soporte completo para las bases de datos SQLite, la cual soporta
transacciones con propiedades atmicas, consistentes, asiladas y durables
(ACID), tambin soporta la creacin de vistas y disparadores (triggers).
Cuando se crea una base de datos de SQLite, esta se almacena en un archivo,
que incluye todas las tablas que pertenezcan a esa base de datos.
Cualquier base de datos en SQLite ser accesible por nombre por cualquier
clase en la aplicacin, pero no fuera de esta, ya que la base de datos es
nicamente local.
Cada valor almacenado en una base de datos SQLite (y manipulado por el
motor de la base de datos) puede tener uno de los siguientes tipos de
almacenamiento:

NULL. Valor nulo.


INTEGER. Nmero entero con signo.
REAL. Valor de coma flotante.
TEXT. Cadena de texto.
BLOB. Almacenamiento en masa de datos, se almacena tal y como se
recibi.

Las transacciones en SQLite por default son diferidas, lo que significa que no
se bloquea la base de datos hasta que se accede ya sea por lectura o escritura
por primera vez a la base de datos.
Para crear una base de datos en SQLite, que almacene los datos de manera
local para una aplicacin, la implementacin recomendada sera la siguiente:
Hacer
una
subclase
(herencia)
de
la
clase
android.database.sqlite.SQLiteOpenHelper (el constructor de la subclase
llamara al constructor de la clase padre (SQLiteOpenHelper) creando la base
de datos) y sobrescribir los mtodos onCreate(), en el cual se ejecutarn los
comandos SQL para crear tablas en la base de datos y onUpgrade(), en el cual
se harn las operaciones necesarias cuando se actualice la base de datos
completa (como borrar, modificar o eliminar tablas).

119

Gua de Android Certified Professional

Para escribir y leer desde la base de datos se llamara a los mtodos


getWritableDatabase() y getReadableDatabase() respectivamente, los cuales
regresan un objeto SQLiteDatabase que representa la base de datos y provee
mtodos para las operaciones de SQLite.
Para ejecutar consultas se usa el mtodo query de la clase SQLiteDatabase,
que acepta varios parmetros de consulta (select, group, etc.).
Para navegar en los resultados de las consultas (leer filas y columnas), se usa
el objeto Cursor, el cual contiene mecanismos para estas tareas, todas las
consultas devuelven un objeto Cursor que apunta a todos los resultados
devueltos por la consulta.

120

Gua de Android Certified Professional

14.

Geolocalizacin y mapas

Proceso de creacin de un proyecto Android el cual incorpora el API de Google


Maps para visualizar mapas en la aplicacin y mostrar la localizacin del dispositivo.
El API de Google Maps para Android permite a los desarrolladores incluir mapas e
informacin de mapeo personalizado en su aplicacin. Entre las acciones que se
pueden realizar con el API se encuentran:
Aadir mapa a la aplicacin. Incrustar mapas en una actividad como un fragmento.
Los mapas permiten mostrar caractersticas importantes, tales como mapas en 3D,
mapas en vista satlite, mapas en vista terreno y mapas hbridos, dibujos 2D en
mapas, animaciones, transiciones, etc.
Personalizacin de un mapa. Un mapa permite aadir marcadores para poder
identificar puntos de inters para el usuario. Estos marcadores pueden
personalizarse para adaptarse a la interfaz de la aplicacin. Tambin se permite el
trazo de polilneas y polgonos para el sealamiento de regiones.
Control de vista. Modificacin de las propiedades de zoom y orientacin para poder
visualizar elementos panormicos en 360 grados.
Los pasos bsicos que se deben seguir para poder incluir mapas en una aplicacin
son; solicitar una llave pblica de la API de Google Maps para Android y configurar
la aplicacin para incorporar mapas.
Obtener llave pblica de la API de Google Maps.
Dirigirse a la consola de Google Maps para crear la llave pblica.
https://console.developers.google.com
Seleccionar la opcin Crear proyecto.

121

Gua de Android Certified Professional

Dar un nombre al proyecto para crear un identificador de aplicacin.

Una vez creado el proyecto, ir a la seccin de APIs y autenticacin y seleccionar la


opcin APIs. Buscar la opcin APIs de Google Maps y habilitar Google Maps
Android API.

122

Gua de Android Certified Professional

Regresar al men de la aplicacin e ir a la seccin de Credenciales. Aqu se debe


seleccionar la opcin Crear clave nueva.

Al dar clic en el botn se mostrar un dialogo preguntando la plataforma para la


clave, en este caso debe seleccionar Clave de Android.

123

Gua de Android Certified Professional

Para obtener la llave se deben ingresar en el recuadro de texto una clave SHA1 y
el nombre del paquete de la aplicacin que mostrara el mapa, separados por un
punto y coma ( ; ). Ms informacin de cmo obtener la clave SHA1.

Como resultado se obtendr una clave de API que servir para aadir a la aplicacin
Android.

Configurar la aplicacin para mostrar mapas.


Es necesario incorporar previamente a un proyecto que mostrar mapas los
Servicios de Google Play (Google Play Services), esto con la finalidad de poder
visualizar los mapas en la aplicacin. Para aadir estos servicios, se debe abrir el
archivo build.gradle (modulo proyecto) y aadir como dependencias del proyecto
los servicios de Google Play.

Aadir permisos a la aplicacin en el archivo AndroidManifest.xml, estos permisos


permitan el acceso a algunas caractersticas importantes del sistema Android que
124

Gua de Android Certified Professional

los mapas requieren, adems se deben definir permisos para acceder y a los
servidores de Google Maps.

Aadir a la seccin application un elemento meta-data para poder incluir la llave


pblica de API de Google Maps.

Agregar un mapa al archivo de diseo de la aplicacin (layout). Para esto se agrega


un
fragmento
con
nombre
su
propiedad
nombre
"com.google.android.gms.maps.SupportMapFragment".

125

Gua de Android Certified Professional

En la implementacin, la actividad debe heredar de FragmentActivity para poder


mostrar el mapa. Este fragmento debe venir del paquete v4.app.FragmentActivity.

Corroborar que el dispositivo que ejecuta la aplicacin tiene los Servicios de Google
Play instalados y activos.

Crear un nuevo fragmento y aadir a este el objeto Mapa a mostrar en la interfaz.


Una vez agregado el mapa, configurar algunos elementos como el tipo de mapa y
herramientas de accesibilidad.

14.1.

Geolocalizacin

Uso de LocationManager de Android para la obtencin, con ayuda de un


proveedor, de la ubicacin (latitud y longitud) del dispositivo. Mostrar la ubicacin
en un mapa.
La plataforma Android dispone de un completo sistema de posicionamiento que
combina varias tecnologas:
126

Gua de Android Certified Professional

Sistema de localizacin global basado en GPS. Este sistema solo


funciona si disponemos de visibilidad directa de los satlites.

Sistema de localizacin basado en la informacin recibida de las torres


de telefona celular y de puntos de acceso Wi-Fi. Funciona en el interior
de los edificios.

La implementacin es sencilla, para un uso bsico. Como primer paso se debe


corroborar que se encuentren los permisos necesarios en el archivo
AndroidManifest.xml

La clase LocationManager ofrece acceso al servicio de localizacin Android.


Este servicio permite acceder a proveedores de localizacin, para registrar
oyentes (listener) de actualizacin de ubicacin y alertas de proximidad entre
otras cosas.
La clase LocationProvider es la superclase de los diferentes proveedores de
localizacin que suministran la informacin sobre la ubicacin actual del
dispositivo. Esta informacin es almacenada en la clase de Location.
Algo importante a tomar en cuenta al trabajar con geolocalizacin es que un
dispositivo Android podra tener varios LocationProvider disponibles y se puede
definir cul de esos proveedores utilizar en determinadas situaciones.
El objeto de tipo listener que estar pendiente de los cambios relacionados con
el sistema de ubicacin ser el LocationListener.

127

Gua de Android Certified Professional

128

Gua de Android Certified Professional

14.2.

Criteria

Uso de Criteria para determinar de manera ms precisa la ubicacin de un


dispositivo.
Android dispone de una clase llamada Criteria en la cual se indican los criterios
de la aplicacin para la seleccin de un proveedor de ubicacin. Los proveedores
pueden ordenarse de acuerdo a exactitud, uso de energa, capacidad de
informar altitud, velocidad, o el costo monetario.

129

Gua de Android Certified Professional

15.

Profundizando en la interfaz de usuario

Personalizacin de una vista (View) para dibujar en la pantalla elementos como


circulo, rectngulos, colores, etc. Incorporacin de eventos a las vistas dibujadas.
El framework de Android tiene un paquete grande de clases Views para interactuar
con el usuario y mostrar varios tipos de datos. Si se desea crear Views propias estas
deberan cumplir ciertos elementos:

Cumplir con las normas de Android.


Proporcionar atributos capaces de aplicar estilos que funcionen con layouts
XML. Mandar eventos de accesibilidad.
Ser compatibles con mltiples plataformas Android.

Para realizar la implementacin de una View propia, esta puede extender de la clase
android.view.View directamente o extender de algunas de las existentes subclases
de View como Button o TextView, luego estas nuevas clases pueden ser agregadas
al layout XML, junto con otras nuevas vistas u otras ya definidas por Android.
Los componentes Button, TextView, ImageView, etc todas ellas extienden o
heredan de la clase View. Es posible crear una vista personalizada y agregarla como
si se estuviera agregando un Button o alguna de los componentes ya mencionados.
Una vista ocupa un rea rectangular de la pantalla y es responsable del dibujado y
del manejo de eventos como onKeyDown(), onKeyUp(), OnTouchEvent() etc...
Para
el
dibujado
interno
de
la
vista,
se
usa
el
mtodo
onDraw(android.graphics.Canvas), el sistema llama a este mtodo cada vez que
necesite volver a dibujar el contenido. Recibe como argumento un objeto de la clase
Canvas, la cual permite realizar operaciones de dibujo que se ejecutan en
secuencia, los elementos que se dibujan primero pueden ser tapados por los
elementos que se dibujan despus.
Para dibujar algo en pantalla se requieren cuatro componentes bsicos:

Un objeto mapa de bits (Bitmap) para contener los pxeles.

Un objeto Canvas (lienzo) que alberga las llamadas de dibujado en el Bitmap.

Una primitiva de dibujado (Rect, Path, text, etc.).

Un objeto Paint (pintura) que describe los colores y estilos para el dibujo.

Respecto al dibujado en el Bitmap, el objeto Canvas permite hacer algunas


operaciones un poco avanzadas, entre ellas, la posibilidad de usar mltiples Canvas
130

Gua de Android Certified Professional

que se pueden ir guardando en una pila privada de Canvas y restaurar cada una de
ellas:
Mtodos save() y restore(): el mtodo save() guarda el estado del canvas en una
pila privada para poder aplicar traslaciones (mtodo canvas.translate(x,y)) o
rotaciones (mtodo canvas.rotate(grados)) en el Canvas y dibujar algo y luego
restaurar el estado original del Canvas con el mtodo restore( ). El mtodo save( ),
puede recibir como parmetro ciertas banderas que modifican la forma en cmo se
guarda el Canvas, Algunas de ellas, son:

ALL_SAVE_FLAG: restaura todo cuando se llama al mtodo restore( ).

FULL_COLOR_LAYER_SAVE_FLAG: la capa actual del Canvas necesita


color de 8-bits.

HAS_ALPHA_LAYER_SAVE_FLAG: la capa actual necesita transparencia


por pixel.

Para dibujar una primitiva en una vista personalizada.

131

Gua de Android Certified Professional

15.1.

Fragmentos

Descripcin y uso de fragmentos (fragments) para la visualizacin de una


actividad de tipo maestro detalle. Incorporacin de diferentes archivos layout
para ser utilizados en una vista con fragmentos.
Un fragmento representa una porcin de interfaz de usuario en una Activity. Se
pueden combinar varios fragmentos en una sola Activity para construir una
interfaz de usuario de varios paneles y reutilizar un fragmento en mltiples
Activity. Un fragmento tiene su propio ciclo de vida aunque, obviamente, se ve
afectado por el ciclo de vida de la Activity que lo contiene, un fragmento recibe
sus propios eventos de entrada y se pueden agregar o quitar mientras la Activity
se est ejecutando.
Para crear un fragmento, se extiende la clase Fragment y sobrescribe los
mtodos de ciclo de vida necesarios para insertar la lgica de la aplicacin, de
forma similar a como se hara con la clase Activity. Una diferencia a la hora de
crear un Fragment es que debes usar el mtodo callback onCreateView() para
definir la interfaz de usuario:

Este fragmento, lo podemos reutilizar, por ejemplo en el diseno XML Layout de


la Activity principal:

132

Gua de Android Certified Professional

133

Gua de Android Certified Professional

16.

Consumo de servicios web

16.1.

SOAP

Definicin y consumo de un servicio web basado en la tecnologa SOAP para la


obtencin de informacin en formato XML, la cual ser mostrada en la interfaz
de una actividad.
SOAP es uno de los protocolos para comunicacin de datos ms usados, se
encuentra auspiciado por la W3C, existiendo multitud de servicios web
implementados bajo esta tecnologa.
Para poder consumir servicios web basados en la tecnologa SOAP desde
Android puede hacerse uso de la biblioteca ksoap2-android, el fork de la famosa
kSOAP2 library adaptado para su uso en Android. La biblioteca puede ser
descargada de la pgina oficial. https://code.google.com/p/ksoap2-android/.
Una vez descargada la biblioteca y credo el proyecto en Android Studio debe ser
incorporada a las dependencias de la aplicacin.

Dentro del cdigo Java se deben definir las variables referentes al servicio web
SOAP

134

Gua de Android Certified Professional

El protocolo SOAP se basa en cinco pasos bsicos:


1. Definir la peticin (request).
2. Configurar un sobre (envelope) que define que hay en el mensaje y cmo
procesarlo.
3. Definir el canal de transporte.
4. Hacer la llamada.
5. Recoger los datos.

Debido a que se esta realizando una solicitud de conexin directa en la


aplicacin se debe agregar el permiso de Internet al archivo AndroidManfest.xml

135

Gua de Android Certified Professional

16.2.

REST

Definicin y consumo de un servicio web basado en la arquitectura REST para


la obtencin de informacin en formato JSON, la cual ser mostrada en la
interfaz de una actividad.
El termino REST se refiere a una arquitectura en lugar de a un protocolo en
concreto como es el caso de SOAP. A diferencia de SOAP, se utiliza
directamente el protocolo HTTP. Los diferentes servicios WEB son invocados
mediante una URL.
Una de las ventajas de REST es su simplicidad, adems de tener una gran
sencillez en el desarrollo de clientes, los cuales solo deben ser capaces de
realizar interacciones HTTP y codificar informacin en XML o JSON.
Para consumir un servicio web REST se puede hacer uso de la clase
HttpURLConnection, la cual se encuentra dentro del paquete java.net.

16.3.

JSON

Descripcin del formato de intercambio de informacin JSON. Obtencin y


tratamiento dentro de una aplicacin para su posterior visualizacin.
JSON (Javascript Object Notation) se trata de un formato de intercambio de
datos entre clientes y servidores, basado en la sintaxis de Javascript para la
136

Gua de Android Certified Professional

representacin de estructuras en forma organizada y de alto nivel, con el fin de


tener una definicin mucho ms amigable y legible.

Su notacin de datos se asimila a la creacin de objetos en Javascript, pero su


funcionamiento no depende de este. JSON es un formato en texto plano
independiente de todo lenguaje de programacin, el cual soporta el intercambio
de datos en gran variedad de lenguajes de programacin como PHP, Python,
C++, C#, Java y Ruby.
Similar a la estructuracin de datos primitivos y complejos en los lenguajes de
programacin, JSON establece varios tipos de datos: cadenas, nmeros,
booleanos, arreglos, objetos y valores nulos. El propsito es crear objetos que
contengan varios atributos compuestos como pares clave-valor. Donde la clave
es un nombre que identifique el uso del valor que lo acompaa.

137

Gua de Android Certified Professional

17.

Multitasking

17.1.

Loaders

En esta seccin se describe la forma de implementar los Loaders de Android


para la obtencin de informacin de manera asncrona.
Los Loaders, incluyendo sus clases derivadas, son usados para proveer carga
asncrona de informacin para una Activity o fragmento fuera del hilo principal,
monitorean la fuente de los datos y entregan nuevos resultados cuando el
contenido cambia y cuando esto sucede se reconectan automticamente al
ltimo Loader de Cursor para obtener la nueva informacin.
Una consulta a un proveedor de contenido, que proporciona informacin desde
una base de datos de SQLite, regresa un objeto Cursor. El Cursor representa el
resultado de una consulta y bsicamente apunta a una fila del resultado de la
consulta. De esta forma, Android puede manejar los resultados de la consulta
eficientemente, ya que no tiene que cargar todos los datos en memoria.
Android provee una implementacin por default de un Loader para lidiar con
conexiones a bases de datos SQLite, esta implementacin es la clase
CursorLoader. La interfaz LoaderManager.LoaderCallbacks tiene tres mtodos
que responden al administrador de Loaders (LoaderManager), estos mtodos
son:
onCreateLoader : Crea un nuevo Loader

138

Gua de Android Certified Professional

onLoadFinished : Se llama cuando el Loader creado termina la carga.

onLoaderReset : Se llama cuando el Loader creado se est reiniciando, lo que


hace a la informacin, no disponible.

Para ms informacin sobre Loaders, visitar la pgina para desarrolladores de


Android. http://developer.android.com/guide/components/loaders.html

17.2.

AsyncTask

Uso de la clase AsyncTask para la ejecucin de tareas bloqueantes. Definicin


de los mtodos de la clase AsyncTask y su correcta implementacin.
Cuando una aplicacin se inicia en Android, es iniciado tambin un nuevo
proceso de Linux con un solo hilo de ejecucin llamado hilo principal (main
thread o UI thread) que es el que interacta con los componentes del conjunto
de herramientas de la interfaz de usuario de Android (Android UI toolkit). De
forma predeterminada, todos los componentes de la misma aplicacin se
ejecutan en el mismo proceso e hilo, sin embargo, es posible implementar en la
aplicacin que diferentes componentes se ejecutan en procesos separados y
crear hilos adicionales para cualquier proceso.
Cuando la aplicacin tiene una intensa carga de trabajo para permitir la
interaccin con el usuario, este hilo principal puede producir un rendimiento bajo,
llegando incluso a bloquear la interfaz del usuario, por lo que el hilo no puede
responder a eventos y en un caso grave, si est bloqueado por ms de cinco
segundos se presentara un dialogo al usuario preguntando si desea cerrar la
aplicacin ya que sta ha dejado de responder.
139

Gua de Android Certified Professional

Hay dos reglas simples en el modelo de hilo nico de Android (single-thread)


1. No bloquear el hilo principal (main thread o UI thread).
2. No acceder a la Android UI toolkit desde fuera del hilo principal.
Para evitar el bloqueo del hilo principal al realizar tareas bloqueantes y que no
son instantneas, como cargar datos de la red, estas deben realizarse en hilos
separados. Llamados hilos en segundo plano (Background o worker threads).
Android proporciona la clase AsyncTask, la cual simplifica la ejecucin de tareas
del hilo en segundo plano (Background o worker thread) que necesitan
interactuar con la interfaz de usuario de forma asncrona. Esta clase permite
realizar operaciones bloqueantes en un hilo en segundo plano y posteriormente
publicar los resultados en el hilo principal. Para hacer uso de AsyncTask se
deben tomar en cuenta los siguientes puntos:
Hacer una subclase de AsyncTask e implementar el mtodo doInBackground(),
que se ejecuta en grupo de hilos en segundo plano. Este es el nico mtodo
obligatorio de implementar.

140

Gua de Android Certified Professional

Para actualizar la interfaz de usuario, se debe implementar el mtodo


onPostExecute(), al cual es entregado el resultado del mtodo doInBackground()
y ejecuta este resultado en el hilo principal, de esta forma se actualiza de manera
segura la interfaz de usuario.

141

Gua de Android Certified Professional

Ejecutar la tarea llamando al mtodo execute() desde el hilo principal. Usando la


clase AsyncTask.

Se puede saber el estado de un AsyncTask en cualquier momento de su ciclo


de vida llamando al mtodo getStatus( ), el cual regresa el estado actual de la
tarea, definido por alguna de las tres constantes:
AsyncTask.Status.FINISHED: Indica que la tarea que se estaba realizando en el
mtodo onPostExecute() ya termin.
AsyncTask.Status.PENDING: Indica que la tarea an no se ha ejecutado.
AsyncTask.Status.RUNNING: Indica que la tarea se est ejecutando.

142

Gua de Android Certified Professional

18.

Integracin con redes sociales

18.1.

Facebook

Procedimiento a seguir para la integracin de la red social Facebook en un


proyecto Android. Implementacin para la obtencin de los datos de un perfil de
usuario y la publicacin de un estado.
Facebook posee un SDK oficial para Android que ayuda en gran medida en la
integracin de Facebook a aplicaciones en desarrollo.
Para poder integrar Facebook a un proyecto en Android debe descargarse el
SDK de Facebook desde la pgina de desarrolladores.
https://developers.facebook.com/docs/android

Registro de la aplicacin.
Uno de los requisitos es registrar la aplicacin que se vinculara con Facebook
en su pgina de desarrolladores, esto con la finalidad de obtener un Id de
aplicacin para la configuracin de la aplicacin. Iniciando dando clic en el botn
Add a new app.
143

Gua de Android Certified Professional

https://developers.facebook.com/apps/

Se introduce el nombre de la aplicacin.

Se muestra una pequea gua para poder implementar la aplicacin y una serie
de datos que se deben proporcionar como el nombre del paquete de la aplicacin
y el nombre de la actividad principal.

144

Gua de Android Certified Professional

Otro de los datos que solicita la aplicacin para poder ser registrada es un Key
Hashes, esta clave se puede obtener mediante el comando
keytool -exportcert -alias androiddebugkey [ubicacion_de_keystore] | openssl
sha1 -binary | openssl base64
Para poder realizar pruebas con la aplicacin se puede hacerse uso del keystore
proporcionado por el SDK de Android.

145

Gua de Android Certified Professional

Una vez finalizado el asistente de creacin de la nueva aplicacin se debe


proporcionar un correo electrnico para poder pasar a modo live la aplicacin y
poder utilizarla. Para esto dar clic en el botn Skip quick start ubicado en la parte
superior de la pantalla.

Una vez dentro de las configuraciones de la aplicacin ir a la seccin de Settings


y llenar el campo Contact e-mail. Con este paso ya se puede pasar la aplicacin
a modo live en la seccin Status and Review.

146

Gua de Android Certified Professional

Uno de los datos que se deben tomar en cuenta para su posterior uso es el App
ID, este elemento se debe proporcionar a la aplicacin en Android y se encuentra
dentro de la seccin Dashboard.

Configurar la aplicacin en Android Studio.


Una vez descargado el SDK de Facebook y para incorporarlo en una aplicacin
Android. Ir al men File dentro de Android Studio y seleccionar la opcin Import
Module dentro de la seccin New. Ir hasta la ruta donde se encuentra el SDK de
Facebook e importarlo al proyecto. Se recomienda solo importar el SDK de
Facebook ya que tambin se permite incluir otros elementos.

Dentro del archivo AndroidManifest.xml deben ser agregados los permisos de


acceso a Internet y acceso a escrituro en memoria externa.
147

Gua de Android Certified Professional

Tambin se deben incluir dos elementos meta-data para incluir el App ID de


Facebook y el nombre de la aplicacin, los cuales deben coincidir con los
registrados en la pgina de desarrolladores. Otros de los elementos que se
deben agregar al Manifest es un proveedor de contenido de Facebook.

La interfaz de la aplicacin puede incluir elementos View de Facebook como el


objeto com.facebook.login.widget.LoginButton para poder iniciar sesin o el
com.facebook.login.widget.ProfilePictureView para mostrar le foto del perfil de
usuario.

148

Gua de Android Certified Professional

Dentro de la clase Java se deben tomar en cuenta los siguientes puntos.


Definir y crear una propiedad FacebookCallback que permita obtener
informacin cuando la aplicacin realice acciones como realizar una publicacin.
Esta propiedad debe sobrescribir sus tres mtodos base; onCancel( ), onError,
onSuccess( ).

149

Gua de Android Certified Professional

Definir y crear un objeto callbackManager dentro del mtodo onCreate( ) de la


aplicacin, este objeto permitir realizar operaciones como inicio de sesin y
obtener informacin sobre las operaciones solicitadas a Facebook.

Crear un objeto SharedDialog para que el usuario pueda iniciar sesin dentro de
la aplicacin. Este SharedDialog pertenece al SDK de Facebook y solicita como
parmetros los objetos FacebookCallback y CallbackManager mencionados
anteriormente.
150

Gua de Android Certified Professional

Para verificar que el usuario ha concedido los permisos a la aplicacin.

Si se desea actualizar la interfaz de usuario mostrando la foto de perfil del


usuario y un saludo personalizado

Y para poder realizar una publicacin.

151

Gua de Android Certified Professional

18.2.

Twitter

Procedimiento a seguir para la integracin de la red social Twitter en un proyecto


Android. Implementacin para la obtencin de los datos de un perfil de usuario
y la publicacin de un tweet.
Twitter posee una API REST mediante la cual se puede interactuar con l,
tambin pone ofrece un listado de bibliotecas para diversos lenguajes para poder
utilizar el api de una manera sencilla, a la fecha, Julio 2015, el api se encuentra
en la versin 1.1.
Twitter utiliza OAuth para proveer acceso al api a las aplicaciones externas, este
mecanismo de autenticacin nos permite interactuar sin la necesidad de
comprometer los datos del usuario como el usuario y clave.
Para este curso se har uso de la biblioteca twitter4j la cual permite la
compatibilidad con OAuth. La biblioteca de Twitter4j se puede obtener en la
pgina http://twitter4j.org/en/index.html y se recomienda utilizar la versin ms
reciente.
Registro de la aplicacin.
Antes de empezar a codificar la aplicacin es requerido registrar la aplicacin en
la pgina de desarrolladores de Twitter para que se pueda interactuar con ella.
https://apps.twitter.com
Si es la primera vez que se ingresa a la pgina se deben aceptar los trminos y
condiciones de Twitter y proporcionar un nmero telefnico para validar la
cuenta. Una vez dentro dar clic en el botn Create New App.

152

Gua de Android Certified Professional

Se deben proporcionar algunos datos para poder registrar la aplicacin, como


nombre, descripcin, website y una URL de retorno (callback URL). Todos los
datos son obligatorios con excepcin del callback URL.

Una vez registrada la aplicacin se pueden obtener el Consumer Key y


Consumer Secret, estos datos sern necesarios para configurar la aplicacin en
Android. La informacin se encuentra en la seccin de Keys and Access Tokens.

En la pestaa "Permissions" de la misma pgina, en la seccin "Access" se


deben modificar los permisos dependiendo de las acciones a realizar. Para
poder leer y publicar twitts se debe seleccionar el permiso "Read and Write" y
posteriormente guardamos los cambios.

153

Gua de Android Certified Professional

Configurando la aplicacin en Android Studio.


Antes de pasar a codificar la aplicacin se debe incluir la biblioteca al proyecto.

Modificar el archivo AndroidManifest.xml para aadir el permiso de Internet.


Tambin se debe agregar un Intent-Filter a la actividad que se vinculara con
Twitter para poder responder a ciertos mensajes.

154

Gua de Android Certified Professional

Definir como constantes el Cosumer Key, Consumer Secret y Callback URL para
poder utilizarlos en la aplicacin.

En el cdigo, se debe establecer la manera de almacenar los tokens de


respuesta cuando el usuario accede correctamente a su cuenta.

155

Gua de Android Certified Professional

Para obtener la autorizacin de Twitter.

La publicacin de un Tweet.
156

Gua de Android Certified Professional

157

Gua de Android Certified Professional

19.

Conectividad

19.1.

Conexin Http

En este capitulo se ejemplifica el uso de HttpURLConnection para la conexin a


Internet y la obtencin de informacin para su posterior visualizacin en una
aplicacin.
Actualmente la mayora aplicaciones requieren solicitar en algn momento de
servicio a algn servidor que provea la informacin solicitada por el usuario, ya
sea una pgina web, algn archivo multimedia o cualquier otro recurso. Para
poder realizar estas peticiones, el protocolo ms utilizado en Internet es el
HyperText Transfer Protocol, mas conocido por sus siglas HTTP.
Una de las formas de implementar la comunicacin cliente-servidor en Android
es mediante la clase HttpURLConnection, la cual permite que con pocas lneas
de cdigo se pueda realizar una conexin cliente http totalmente configurable.

HttpURLConnection es la clase base para el acceso a la red por el protocolo


HTTP, incluida en el paquete java.net.
Para poder utilizar la clase HttpURLConnection en una aplicacin en Android y
realizar una conexin a Internet se debe agregar el permiso de acceso a Internet
al archivo AndroidManifest.xml.

En la clase Java, se hace uso de la clase HttpURLConnection.

158

Gua de Android Certified Professional

19.2.

Wifi

Ejemplo y conceptos relacionados con la administracin y acceso a la red a


travs de Wi-Fi en un dispositivo. Permisos especiales para el acceso a la
administracin y uso del dispositivo Wi-Fi.
Para la administracin de red en Android, el paquete android.net proporciona
clases para la conectividad e informacin, entre las ms importantes se
encuentran:

ConnectivityManager: Responde a consultas sobre el estado de


conectividad de la red.

Proxy: Para el acceso a la configuracin por default del proxy.

NetworkInfo: Describe el estado de la interfaz de red.

TrafficStats: Provee estadsticas del trfico de la red.

Android.net tambin proporciona el paquete wifi que provee clases para


gestionar la funcionalidad del dispositivo Wi-Fi, haciendo posible a las
aplicaciones comunicarse con la pila de bajo nivel Wireless (inalambrica) para
obtener acceso a la red Wi-Fi.
Para hacer uso de estas clases, dependiendo de las funciones de la aplicacin,
se deben solicitar algunos de los siguientes permisos en el archivo
AndroidManifest.xml:

159

Gua de Android Certified Professional

Debido a que algunos dispositivos pueden no contar con la funcionalidad de WiFi, se debe solicitar la caracterstica hardware Wi-Fi a la aplicacin.

19.3.

Bluetooth

En esta seccin se describen los elementos a tomar en cuenta para el uso de la


red Bluetooth. Implementacin de una conexin cliente servidor para el
intercambio de informacin entre dispositivos vinculados por Bluetooth.
La plataforma Android incluye soporte para la pila de red Bluetooth, que permite
a un dispositivo intercambiar datos con otros dispositivos a travs de Bluetooth.
Usando la API de Bluetooth, se puede hacer, entre otras cosas, lo siguiente:

Escanear en busca de otros dispositivos Bluetooth.


Consultar el adaptador local Bluetooth para los dispositivos pares.
Transferir datos.
Conectarse a otros dispositivos a travs del descubrimiento de servicios.

Lo anterior usando algunas de las clases que el paquete android.bluetooth


provee, entre ellas:

BluetoothAdapter: Representa el adaptador Bluetooth del dispositivo


local. Es el punto de entrada para todas las operaciones con Bluetooth,
usndola se pueden descubrir otros dispositivo Bluetooth, consultar la
lista de dispositivo pares, instanciar una clase BluetoothDevice usando
una direccin MAC conocida y crear un BluetoothServerSocket para
esperar comunicaciones de otros dispositivos.

160

Gua de Android Certified Professional

BluetoothDevice: Representa el dispositivo Bluetooth remoto. Se usa para


solicitar una conexin con un dispositivo remoto a travs de un
BluetoothSocket o para consultar informacin sobre el dispositivo como
el nombre, direccin MAC, etc...

BluetoothServerSocket: Un socket Bluetooth que esta esperando


conexiones (similar al ServerSocket TCP)

BluetoothSocket: Un socket Bluetooth conectado o en conexin (similar


al Socket TCP).

Para usar las funciones de Bluetooth en la aplicacin, se necesita declarar al


menos uno de los dos permisos de Bluetooth existente:

BLUETOOTH: Se debe solicitar el permiso BLUETOOTH para realizar


cualquier comunicacin con Bluetooth, como solicitar una conexin, aceptar
una conexin y transferir datos. En el archivo AndroidManifest.xml:

BLUETOOTH_ADMIN: Se debe solicitar el permiso BLUETOOTH_ADMIN


para iniciar la deteccin de dispositivos o manipular las configuraciones de
Bluetooth.

Una vez con los permisos en el archivo AndroidManifest.xml, es posible realizar


algunas operaciones como obtener el objeto BluetoothAdapter que representa al
adaptador Bluetooth y si es que existe y no est habilitado, se intenta habilitar:

Para iniciar el descubrimiento de nuevos dispositivos.

161

Gua de Android Certified Professional

Para crear una conexin con un Bluetooth servidor.

Para aceptar la solicitud de una conexin por parte de un servidor.

162

Gua de Android Certified Professional

163

Gua de Android Certified Professional

20.

Realidad aumentada

Exploracin del SDK de Wikitude como herramienta para la incorporacin de


realidad aumentada a una aplicacin en Android. Creacin de los recursos
necesarios para el reconocimiento de imgenes y visualizacin de realidad
aumentada.
Realidad Aumentada trata de la incorporacin de datos en un entorno real por medio
de otras tcnicas utilizadas como la de Reconocimiento de Imgenes.
Wikitude es una SDK gratuita para proyecto no comerciales (si se desea
comercializar se debe pagar) que permite la creacin de aplicaciones de Realidad
Aumentada con Android y otras plataformas. La SDK de Wikitude soporta otras
tecnologas como geolocalizacin y Reconocimiento de Imgenes.
Obtener el archivo .wtc
Un archivo con extensin .wtc, es el archivo que contiene datos para que la
biblioteca wikitudesdk.jar pueda reconocer una imagen. Este archivo se obtiene en
la pgina de Wikitude. http://developer.wikitude.com/tools/target-manager
Una vez iniciada la sesin se debe crear un nuevo proyecto.

Dar clic en el proyecto creado y agregar la o las imgenes necesarias en formato


JPEG o PNG sin transparencias y con colores slidos.

164

Gua de Android Certified Professional

Una vez incorporada la imagen, dar clic en el botn Generate Target Collection.

Por ingresar al almacn de targets y descargar el archivo .wtc para versin del SDK
correspondiente.

165

Gua de Android Certified Professional

Antes de continuar, se deben definir algunos trminos relacionados con el


reconocimiento de imgenes con Wikitude:
Target: es una imagen objetivo de la cual se extraen datos que utiliza el rastreador
o Tracker para reconocer una imagen.
Tracker: El rastreador analiza la imagen de la cmara en vivo y detecta el Target
almacenado.
La implementacin de lo anterior, ser en un archivo JavaScript que estar incluido
en un archivo HTML que se cargara a una vista llamada ArchitectView en Android.
Para incluir el archivo .wtc al proyecto en Android se puede tomar como base alguna
de las carpetas de ejemplo que vienen incluidas en el SDK de Wikitude. Esta carpeta
se aadir a la carpeta assets del proyecto.

Incorporar Wikitude al proyecto Android.


Para poder utiliar Wikitude en un proyecto Android, se debe descargar el SDK desde
la pgina oficial http://www.wikitude.com/download e incorporar el archivo .jar a la
aplicacin.

166

Gua de Android Certified Professional

Una vez incorporado el SDK de Wikitude, se deben aadir al archivo


AndroidManifest.xml los permisos requeridos por la aplicacin.

Y los requerimientos de hardware que deber tener el dispositivo.

La actividad que implemente Wikitude deber tener una configuracin para los
cambios de orientacin y tamao en la pantalla.
167

Gua de Android Certified Professional

La idea bsica es llamar a un objeto architectView dentro del proyecto y este le


notificar sobre el ciclo de vida de todos los eventos que puedan ocurrir; el
architectView crea una especie de lente mgico o una superficie en la cmara en
donde maneja los eventos; para incluir el architectView en el proyecto se debe
agregar una etiqueta architectView dentro de un FrameLayout en el archivo layout.

Dentro de la clase Java, se debe iniciar el ArchitectView

Posteriormente, dentro del mtodo onPostCreate( ), se deber llamar al archivo


HTML de la carpeta assets, este a su vez llama a los dems archivo incluido el .js
que permite cargar el mundo de Wikitude.

168

Gua de Android Certified Professional

Es importante indicar, que todos los eventos del ciclo de vida de la Activity, sern
tambin ejecutados por el objeto architectView, por lo que hay que comunicarle al
architectView cada vez que la actividad llame a un callback del ciclo de vida.

169

Gua de Android Certified Professional

170

Gua de Android Certified Professional

21.

Tpicos avanzados

21.1.

Servicios

Profundizacin en el concepto y uso de los servicios en una aplicacin.


Definicin de tipos de servicios y diferencia entre ellos.
Como se mencion en captulos anteriores, un servicio se trata de uno de los
componentes de una aplicacin en Android, el cual puede realizar
operaciones prolongadas que se ejecutarn en segundo plano y que no
proporcionan una interfaz de usuario definida. Otro componente de la
aplicacin puede iniciar un servicio y este tiene la responsabilidad de
continuar funcionando en segundo plano, incluso si el usuario cambia a otra
aplicacin.
Adicionalmente, un componente puede unirse a un servicio para interactuar
con l e incluso realizar comunicacin entre procesos (IPC). Por ejemplo, un
servicio puede manejar las transacciones de red, reproducir msica, realizar
operaciones de E/S en archivos o interactuar con un proveedor de contenido,
todo desde segundo plano.
Para crear un servicio, se debe crear una subclase de Service (o una de sus
subclases existentes). Es necesario reemplazar algunos de los mtodos de
devolucin de llamada que se encargan de los aspectos clave del ciclo de
vida del servicio y proporcionar un mecanismo para que los componentes se
unan al servicio, si es necesario. Los mtodos de devolucin de llamada ms
importantes que debe anular son:
onStartCommand ( ). El sistema llama a este mtodo cuando otro
componente, como una actividad, pide que se inicie el servicio, llamando al
mtodo StartService( ). Una vez que este mtodo se ejecuta, se inicia el
servicio y puede ejecutarse en segundo plano de forma indefinida.
onBind( ). El sistema llama a este mtodo cuando otro componente quiere
enlazarse con el servicio que se ejecuta, esto llamando al mtodo
bindService( ). En la implementacin de este mtodo, se debe proporcionar
una interfaz que los clientes puedan utilizar para comunicarse con el servicio,
devolviendo un objeto IBinder. Este mtodo es obligatorio de sobrescribir en
la subclase, pero si no se desea realizar una vinculacin, puede regresar null.
onCreate( ). El sistema llama a este mtodo cuando se crea por primera vez
el servicio, en este mtodo se realizan procedimientos de configuracin de
una sola vez (antes de que se llama a cualquiera otro mtodo como
onStartCommand () o onBind ()). Si el servicio ya est en ejecucin, este
mtodo no es llamado por el Android.
171

Gua de Android Certified Professional

OnDestroy( ). El sistema llama a este mtodo cuando el servicio ya no es


utilizado y debe ser destruido. Un servicio debe implementar este mtodo
para limpiar cualquier recurso como hilos, detectores registrados, receptores,
etc. Esta es la ltima llamada que recibe un servicio. Cabe mencionar que si
un componente inicia un servicio llamando al mtodo StartService( ) (que se
traduce en una llamada a onStartCommand( ) dentro del servicio), el servicio
sigue funcionando hasta que se detenga el mismo con el mtodo stopSelf( ),
o bien hasta que otro componente lo detiene llamando al mtodo stopService
().
Como las actividades y otros componentes, todos los servicios deben ser
definidos en el archivo AndroidManifest.xml. Esta declaracin se hace a
travs de la etiqueta <service> y solicita como atributo el nombre del servicio
a definir.

21.1.1. Servicio iniciado


Concepto e implementacin de los servicios iniciados.
Un servicio es iniciado cuando un componente de la aplicacin (por
ejemplo, una actividad) inicia el servicio llamando al mtodo StartService
( ). Una vez iniciado, un servicio puede ejecutarse en segundo plano de
forma indefinida, incluso si el componente que lo comenz es destruido.
Por lo general, un servicio iniciado realiza una sola operacin y no
devuelve un resultado al componente que lo llamo. Por ejemplo, puede
descargar o cargar un archivo en la red. Cuando se realiza la operacin,
el servicio debera pararse.

172

Gua de Android Certified Professional

Posteriormente para iniciar y detener el servicio desde algn componente.

Para implementar un servicio iniciado en la clase Java.

173

Gua de Android Certified Professional

21.1.2. Servicio vinculado


Concepto e implementacin de los servicios vinculados.
Un servicio es "vinculado" cuando un componente de aplicacin se une a
l llamando al mtodo bindService( ). Un servicio vinculado ofrece una
interfaz de tipo cliente-servidor que permite a los componentes que
interactan con el servicio iniciar una comunicacin, enviar solicitudes,
obtener resultados, e incluso pueden hacerlo a travs de procesos (IPC).
Un servicio de vinculado slo se ejecutar mientras el componente que
los llamo se encuentre vinculado a l. Tambin se tiene la opcin de que
mltiples componentes de la aplicacin pueden vincularse con el servicio
al mismo tiempo.
Para definir un servicio vinculado en Java.
174

Gua de Android Certified Professional

Su posterior creacin y vinculacin por parte del componente.

175

Gua de Android Certified Professional

176

Gua de Android Certified Professional

21.2. Content Provider


Creacin de un Content Provider para el intercambio de informacin entre
aplicaciones. La informacin es almacenada en una base de datos SQLite.
Los proveedores de contenido permiten gestionar el acceso a un conjunto
estructurado de datos. Son los componentes que se encargan de encapsular
los datos, y proporcionan mecanismos para la definicin de seguridad de los
mismos. Los proveedores de contenidos son la interfaz estndar que conecta
los datos en un solo proceso con cdigo que se ejecuta en otro proceso.
Cuando se desee acceder a los datos de un proveedor de contenido, se
utiliza el objeto ContentResolver en conjunto al contexto de la aplicacin para
comunicarse con el proveedor como cliente. El objeto ContentResolver
comunica el objeto proveedor, una instancia de una clase que implementa
ContentProvider. El objeto proveedor recibe las solicitudes de datos de los
clientes, realiza la accin solicitada, y devuelve los resultados.
Para implementar un proveedor de contenidos en Java.

177

Gua de Android Certified Professional

El proveedor debe ser registrado en el archivo AndroidManifest.xml

Si el cliente desea obtener informacin de un proveedor de contenido.

178

Gua de Android Certified Professional

22.

Publicacin de una aplicacin

22.1. Preparacin de la aplicacin


Proceso previo a la firma y construccin del archivo requerido para la
publicacin de una aplicacin en la tienda de Google.
Este proceso consiste en verificar algunos puntos importantes como:

Remover cualquier llamada a alguno de los mtodos de la clase Log.


Establecer los valores correctos de android:versionCode=""
android:versionName="" en el archivo build.gradle
Establecer el valor apropiado de android:minSdkVersion=""
Proveer a la aplicacin de un icono identificable.
Comprobar que la aplicacin funciona correctamente.

22.2. Firma y creacin del archivo APK


Descripcin del proceso de firma y construccin del archivo APK, requerido
para la publicacin de una aplicacin en Google Play.
Para poder publicar la aplicacin en la Play Store de Google, previamente
debe ser generado el archivo compilado ejecutable con la extensin APK,
este archivo tiene la caracterstica principal de ser firmado digitalmente.
Una vez que se considera que la aplicacin ya no est en proceso de
depuracin, se debe indicar al proyecto que pasa de la fase de depuracin
(debug) a la fase de lanzamiento (release). Si no se realiza este cambio, en
el momento de intentar publicar la aplicacin se obtendr un mensaje
informando sobre el problema.

179

Gua de Android Certified Professional

Para asegurar que el archivo a publicar sea la ltima compilacin del proyecto,
es recomendable realizar una reconstruccin completa del mismo, esto desde el
men Build > Rebuild Project, de Android Studio.

Dentro del mismo men Build se encuentra la opcin Generate Signed APK.
Esta opcin permite crear el archivo compilado y firmado con extensin .apk que
es utilizado para publicar la aplicacin.
El primer cuadro de dilogo que se muestra permite seleccionar el modulo del
proyecto el cual ser empaquetado, por defecto solo muestra el modulo app de
la aplicacin.
Posteriormente el asistente solicita la configuracin de la firma digital para la
aplicacin. Este tipo de firmas se almacenan en un archivo que hace las
funciones de almacn de contraseas (Key Store). Si ya se cuenta con un
almacn de contraseas puede utilizarse para firmar la aplicacin, de lo contrario
se deber generar uno dando clic en el botn Create New.
180

Gua de Android Certified Professional

Los datos que se deben tomar en cuenta al momento de crear un nuevo almacn
de claves son:

Ruta donde se guardara el almacn.

Contrasea del almacn de claves.

Un alias para la llave.

Una contrasea para la clave.

La validacin de la clave, se recomienda utilizar siempre el valor de 25


aos.

Datos del certificado.

Una vez creado o seleccionado el almacn de claves se procede a la firma de la


aplicacin y la generacin del archivo .apk

181

Gua de Android Certified Professional

Si todo se ha realizado correctamente, se podr encontrar el archivo APK en la


carpeta del mdulo del proyecto. Este ser el archivo que se debe utilizar en el
proceso de publicacin en Play Store de Google.

22.3. Publicacin en Google Play


Creacin de la ficha de Google Play para la publicacin de una aplicacin en
la tienda de Google. Descripcin de los principales puntos de la ficha de
publicacin.
Una vez generado el archivo apk de la aplicacin y siguiendo con el proceso
de publicacin el primer paso a tener en cuenta es el registro de una cuenta
(Publisher Account)en el sitio de Google Play Developers Console.
https://play.google.com/apps/publish/
Durante el proceso de registro se solicitaran algunos datos bsicos del
desarrollador como nombre, correo, direccin, telfono, etc. Es importante
mencionar que deben ser ledos y aceptar el acuerdo de distribucin para
desarrolladores que aplique en la regin local, adems se deben tomar en
cuenta las polticas del programa de desarrolladores y el derecho de
exportacin de US (Developer Program Policies and US export law).
Otros de los aspectos a tomar en cuenta es que Google solicita realizar un
pago nico de $25 dlares, usando Google Wallet o alguna tarjeta de
dbito/crdito dentro de las 48 horas siguientes al registro. Esto con la finalidad
de poder verificar que la cuenta es creada por un desarrollador.
182

Gua de Android Certified Professional

Para realizar la correcta publicacin de aplicaciones, Google Play ofrece una


pgina con detallada informacin de los pasos a seguir y los elementos a
tomar en cuenta al momento de subir una aplicacin a la tienda de Google.
https://support.google.com/googleplay/androiddeveloper/answer/113469?hl=es&ref_topic=2365624
Un punto importante es proveer de imgenes o iconos identificables a la
aplicacin desarrollada, de esta manera se realizara una correcta promocin
de la aplicacin en Google Play. Para mayor informacin sobre la creacin
de imgenes e iconos se encuentra disponible la pgina.
https://support.google.com/googleplay/android-developer/answer/1078870
183

Gua de Android Certified Professional

Los pasos a seguir para poder subir una aplicacin a Google Play pueden
ser resumidos a:
Despus de crear la cuenta, dar clic en el botn aadir nueva aplicacin.

Posteriormente solicitara que se le d un nombre a la aplicacin. En este


mismo paso se puede subir el archivo .apk generado en Android Studio o bien
seguir con la preparacin de la ficha de publicacin.

184

Gua de Android Certified Professional

Si se ha omitido el paso de subir APK, el asistente de publicacin solicitara


subir el archivo firmado como primer paso.

185

Gua de Android Certified Professional

Una vez subido el archivo se puede avanzar a la seccin de Ficha de Play


Store en la cual se solicitara informacin importante para la publicacin de la
aplicacin, como el ttulo y la descripcin.

Como se mencion anteriormente, proporcionar imgenes adecuadas a la


aplicacin es un paso importante al realizar la publicacin de la misma. El
asistente de publicacin solicita la incorporacin de capturas de pantallas
promocionales de la aplicacin, con el fin de mostrar al usuario algunas de las
funcionalidades de la misma.

186

Gua de Android Certified Professional

Para determinar la clasificacin de contenido de la aplicacin se debe llenar un


cuestionario que proporciona informacin sobre la aplicacin.

187

Gua de Android Certified Professional

Para determinar si la aplicacin ser gratuita o tendr un costo se tiene la


seccin de precio y distribucin, en la cual se podr elegir el costo de la
aplicacin y los pases en los cuales podr distribuirse.

188

Gua de Android Certified Professional

Guardar todos los cambios dando clic en el botn Guardar.

189

Gua de Android Certified Professional

Como ltimo paso, dar clic en el botn "Ready to publish" -> "Publish this app".
Es importante mencionar que esta operacin NO se puede deshacer.

22.4. Control de versiones


Informacin de inters para el adecuado control de versiones de aplicaciones
en Android dentro de la tienda de Google Play.
190

Gua de Android Certified Professional

Algunos puntos importantes a tomar en cuenta sobre la firma de aplicaciones


y control de versiones son:

Todas las aplicaciones deben ser firmadas.

Cuando se prueba y depura una aplicacin, las herramientas de


construccin firman la aplicacin con una llave de depuracin especial
que es creada por las herramientas de construccin del SDK de Android.

Cuando se publica la aplicacin para usuarios finales en Google Play, se


debe firmar la aplicacin con la adecuada llave privada. No se pueden
publicar aplicaciones que estn firmadas con la llave de depuracin.

Cuando se publica una actualizacin para la aplicacin en Google Play se


deben seguir algunos puntos importantes, entre ellos que el nombre del
paquete debe ser el mismo, el nmero interno de versin (version code)
debe ser mas alto, y la aplicacin que se publicara (la ltima creada) debe
estar firmada con el mismo certificado (misma llave privada).

Se puede usar certificados auto firmados para firmar una aplicacin. No


se requiere una autoridad certificadora.

El sistema verifica la fecha de expiracin del certificado solo en tiempo de


instalacin. Si expira despus de la instalacin, la aplicacin seguira
funcionando.

Se pueden hacer uso de herramientas estndar (keytool y jarsigner) para


generar llaves y firmar las aplicaciones (archivos .apk). Keytool permite
generar una llave privada y un archivo keystore, este archivo al ser una
base de datos de llaves criptogrficas y certificados de confianza, puede
contener varias llaves. Las llaves privadas se pueden generar con los
algoritmos de encriptacin DSA y RSA.

Despus de firmar la aplicacin para liberacin, se recomienda usar la


herramienta zipalign para optimizar el paquete APK final.

22.5. Monetizacin de una aplicacin.


Descripcin de los diferentes tipos de monetizacin que se tienen disponibles
para poder implementar en una aplicacin y percibir ganancias.
A continuacin, se analizan cuatro mtodos utilizados para monetizar
aplicaciones:

191

Gua de Android Certified Professional

1. Aplicaciones de pago:
Esta es la opcin clsica para ganar dinero con las aplicaciones.
A los usuarios no les gusta pagar y cada da ms empresas prefieren
sustituir este opcin por otra de las disponibles para monetizar la
aplicaciones.
Para determinados segmentos puede ser la opcin ms adecuada.
2. Aplicaciones Gratis con publicidad (In-App advertising):
La aplicacin muestra publicidad de terceros. Lo ms conveniente sera
llegar a acuerdos con anunciantes especficos, pero, si no es posible,
se puede recurrir a redes de anuncios, que ofrecen menor rentabilidad
pero se asumen el trabajo de conseguir anunciantes.
Este modelo es aceptado por los usuarios pero genera menos ingresos
por aplicacin.
Es el modelo mas utilizado en el desarrollo de aplicaciones Android (el
perfil de sus usuarios esta orientado a la cultura de productos gratis y
son ms permisivos con la publicidad).

3. Aplicaciones con Suscripcin:


En este caso los usuarios pueden suscribirse a los contenidos ofertados
en la aplicacin.
Este modelo de negocio es una opcin tpica para diarios y revistas
cuyos lectores ya estn habituados a pagos peridicos.
4. Aplicaciones Freemium / In-app Purchases:
Se basan en compras de servicios adicionales dentro de la aplicacin
Esta es la categora que genera ms ingresos, es el modelo de negocio
con mayor crecimiento en todo el mundo convirtindose en el
dominante para las aplicaciones actuales.
Se ofrece la descarga de la aplicacin de forma gratuita: cualquier
usuario puede utilizar sin coste la aplicacin descargada. Por otro lado,
se ofrecen mejoras y caractersticas opcionales de la App mediante
compras in-app.
Es el modelo ms utilizado en el desarrollo de aplicaciones iPhone (sus
usuarios estn ms habituados a pagar por las aplicaciones).
22.5.1.

Ejemplo de publicidad en una aplicacin.

Proceso de creacin y configuracin de una aplicacin la cual implementa


un Banner de publicidad.

192

Gua de Android Certified Professional

AdMob es una compaa de publicidad mvil adquirida por Google en


2009 que se ha posicionado como la plataforma publicitaria ms usada y
reconocida por los programadores de aplicaciones para monetizar sus
aplicaciones y maximizar sus ingresos. Admob est disponible para
muchas plataformas mviles, incluyendo Android , iOS , webOS , Flash
Lite , Windows Phone y todos los navegadores web de un mvil estndar.

A continuacin se mostrar lo que se requiere para incluir publicidad con


AdMob a una aplicacin.

Como primer paso se debe descargar el repositorio de Google que


contiene entre otras la herramienta play-services-ads que la aplicacin
deber usar para mostrar publicidad. El Administrador de SDK es un
gestor de paquetes para Android con el que podremos descargar el
repositorio antes mencionado. Podr acceder al gestor desde el men
Tools/Android/SDK Manager

En la ventana SDK Manager seleccione Google repositorio bajo la carpeta


de Extras, a continuacin, pulse Instalar paquetes y aceptar las licencias
para descargar.
193

Gua de Android Certified Professional

Si al Instalar el paquete, el botn est desactivado quiere decir que tiene


la ltima versin.

194

Gua de Android Certified Professional

A continuacin se debe modificar el archivo build.gradle. El proyecto


cuenta con dos de ellos: uno a nivel de proyecto en la carpeta y el otro a
nivel de aplicacin, este ltimo en donde se deber agregar la referencia
al play-services-ads que se descarg en el repositorio.

Es posible que al agregar la dependencia aparezca un mensaje en la


parte superior de la ventana del gradle indicando que necesita realizar
una sincronizacin Gradle.

Si ese es el caso, haga clic en Sincronizar ahora ya que as se


actualizarn las bibliotecas de su proyecto para incluir la dependencia que
se acaba de agregar.

Una vez que ya agregamos a nuestro proyecto los servicios se deber


modificar el archivo AndroidManifest de la aplicacin para incluir los
195

Gua de Android Certified Professional

permisos, nmero de versin, y definicin de las actividades que el Mobile


Ads SDK requiere
Hay tres cambios que se necesitarn hacer:

Aadir dos permisos:

INTERNET: para acceder a Internet y realizar las solicitudes de anuncios.


ACCESS_NETWORK_STATE (opcional): para comprobar si una
conexin a Internet est disponible antes de hacer una solicitud de
anuncio.

Aadir una etiqueta metadatos que hace referencia a la versin


Google play services que la aplicacin utilizar.

Aadir un <actividad> con configChanges. Que ser la actividad


utilizada por el SDK cuando se haga clic en los banners de la publicidad

196

Gua de Android Certified Professional

Hasta este momento solo se le ha dado a la aplicacin la capacidad de


utilizar Mobile Ads sin embargo an no se mostrarn los banners
publicitarios.
Lo siguiente que se debe hacer es crear un bloque de anuncios para
generar un Ad Unit ID. El Ad Unit ID es un identificador nico de los
lugares dentro de la aplicacin en la que se mostrarn los anuncios, es
decir si se tuviera una aplicacin con dos actividades, en la que cada uno
contiene un banner publicitario cada uno deber tener su propio Ad Unit
ID.
Para generar el Ad Unit Id se deber realizar los siguientes pasos:

Iniciar sesin en su cuenta de AdMob en https://apps.admob.com.

Dar clic en la pestaa Monetizacin.

197

Gua de Android Certified Professional

Crear nuevo bloque de anuncios.

Seleccione su aplicacin.

Seleccionar el formato de anuncio haciendo clic en Banner o


Intersticial y proporcione la informacin correspondiente
Banner:

198

Gua de Android Certified Professional

Intersticial:

199

Gua de Android Certified Professional

Haga clic en Guardar. Ver el ID de este bloque de anuncios.

Haga clic en Finalizar para volver a la pestaa Monetizacin o haga


clic en Enviar un correo electrnico con las instrucciones para recibir las
instrucciones por correo electrnico.

200

Gua de Android Certified Professional

Una vez que ya se tenga el AdUnit ID a la aplicacin se debe agregar en


el archivo de recursos strings.xml que se encuentra en la ruta res/values
/strings.xml el ID de bloque de anuncios (Ad Unit ID).

Nota: Se deben utilizar los anuncios de prueba en el desarrollo y las


pruebas de su aplicacin de lo contrario podra causar que su cuenta sea
suspendida. Se recomienda ver la documentacin para obtener
informacin sobre cmo conseguir anuncios de prueba con su propio
bloque de anuncios de identificaciones.
Para poder visualizar la publicidad en la aplicacin se tendr que
modificar el diseo de la actividad donde se desea agregar el banner de
publicidad. Por ejemplo / app / src / main / res / layout / activity_main.xml
201

Gua de Android Certified Professional

Se aadir al XML

Un espacio de nombres adicional que se utiliza para los anuncios:

Un nuevo elemento para su AdView . En donde deber configurar las


propiedades layout_width y layout_height, el adSize a BANNER y el
adUnitId con la referencia al recurso string declarado en el paso anterior
@string/banner_ad_unit_id .

202

Gua de Android Certified Professional

El ltimo paso consiste en la implementacin del Ad en la clase de la


Activity donde se cargar el banner de publicidad Por ejemplo
MainActivity.java
Para ello se deber:

Importar las clases AdRequest y AdView .

203

Gua de Android Certified Professional

Agregar en el cdigo que se encuentra el AdView en el diseo, crear


un AdRequest y cargue un anuncio en el AdView .

Finalmente se ver en la activity de la aplicacin un banner con publicidad

204

Gua de Android Certified Professional

205

También podría gustarte