Anda di halaman 1dari 57

Programacin de Dispositivos

Mviles con ANDROID


M.Sc.C.S. Hernn H. Aranda Gmez

hernan.aranda.gomez@gmail.com
www.hernan-aranda-gomez.com

I. Toolkit de desarrollo Android


Entorno de desarrollo

integrado (IDE) Eclipse.


Kit de desarrollo de software
en Android (SDK).
Plug-in para Eclipse del Toolkit
de desarrollo Android (ADT).
Dispositivos virtuales Android
(AVD).

SDK ANDROID
Development Tools
http://developer.android.com/intl/es/sdk/i
(ADT) Bundle
ndex.html

II. Introduccin
Qu es Android?
Un

sistema operativo de cdigo abierto


basado en Linux que corre en millones de
dispositivos mviles y est soportado y
regulado por la OHA (Open Handset Alliance).

Una plataforma de desarrollo de aplicaciones

de cdigo abierto.

Historia

La historia de Android comenz en 2005, ao en que Google decidi


comprar una pequea empresa de California que tena ese mismo
nombre. Google quera ampliar su negocio y deseaba desarrollar una
plataforma mvil con la que crecer. La estrategia de la compaa se bas
en destinar recursos a la recin adquirida Android, que se convertira en
un pilar fundamental para lo que Google es hoy en da.

La apuesta de Google por Android cont desde el principio con figuras


clave como la de Andy Rubin, que ahora ocupa el puesto de
vicepresidente de ingeniera de Google, que permitieron que el proyecto
se desarrollase por las lneas correctas. Por ejemplo, se tom la decisin
de apostar por Linux como base para el nuevo sistema, lo que permita
hacer de Android un sistema abierto. Esa decisin ha sido clave para el
xito del SO y ha marcado parte de su desarrollo.

Otro factor clave para el xito de Android fue la creacin del grupo Open
Handset Alliance, un consorcio de empresas que buscaba el desarrollo de
estndares mviles. Open Handset Alliance fue clave para el desarrollo de
Android y empresas como LG, Samsung, Qualcomm y Motorola apoyaron
la iniciativa desde el principio. Fruto del trabajo de Google y del apoyo de
empresas fabricantes tan importantes como estas, el sistema creci y se
consolid. Los trabajos para la programacin de Android llevaron varios
aos, hasta que en 2008 Google lo present oficialmente.

En concreto, en septiembre de 2008 la

compaa present el SDK de Android,


de forma que los desarrolladores
pudieron comenzar a trabajar con l. El
lanzamiento oficial de la primer
terminal con el sistema operativo
Android 1.0 fue el HTC Dream, que
Despus
de comercializ
cinco aos, nadie
negar el xito de Android,
tambin se
como puede
T-Mobile
que
G1. ha conseguido un dominio absoluto en el mercado de los
smartphones, con una presencia cada vez ms pronunciada en
el sector de los tablets. Segn las ltimas cifras oficiales
confirmadas por Google, ya hay ms de 500 millones de
terminales Android activados en todo el mundo. Adems, el
crecimiento parece que no se detendr, o eso esperan en
Google.
El presidente ejecutivo de la compaa, Eric Schmidt, ha

asegurado que esperan que en un ao se llegue a los 1.000


millones de dispositivos activados con Android, lo que marcara
un nuevo hit para el sistema y para la industria. Ms all de los

Android 1.0 (September 23, 2008).


Primera versin de Android que destac la
plena integracin de los servicios de Google,
el navegador Web compatible con HTML y
XHTML (que adems ofreca la funcin de
zoom integrado y permita ver mltiples
pginas en diferentes ventanas). La guinda
del pastel y el elemento que a la larga ha
fraguado el xito del sistema se presentaba
Cupcake
2009).
por primera1.5
vez (Febrero
el Android 9,
Market.
Nos trajo una gestin de la cmara y
GPS del dispositivo ms rpidos,
teclado virtual y subida directa de
vdeos a Youtube. Donut 1.6 introdujo
la bsqueda por voz, indicador grfico
de batera y la integracin de las
funciones de la cmara con la galera
de imgenes. Con la versin Eclair
2.0 llegaron mejoras sustanciales,
entre las que destacan la gestin de
mltiples cuentas de
correo y
sincronizacin
de
contactos

Froyo 2.2 (Mayo 20, 2010). Quedar como la


primera en incorporar la funcin de compartir
internet (convirtiendo nuestro mvil en un Hotspot
Wi-Fi). En el centro del SO ahora corre un compilador
Just-in-time (JIT), que optimiza la ejecucin de
cdigo, resultando en un incremento de la velocidad
2.3 (Diciembre
de ejecucin, que ahoraGingerbread
es de dos a cinco
veces ms 6, 2010). Nos
trajo mejoras generales en velocidad y
rpida.
optimizacin global del sistema, adems de la
compatibilidad para el estndar del futuro en
medios de pago, el NFC (Near field
Honeycomb
3.0 (February 22, 2011). La
communication).
versin de Google para los dispositivos mviles
de
gran
formato
que
estaba
diseada
especficamente para mejorar la experiencia de
usuario y plantear batalla al iPad de Apple.
Ice Cream Sandwich 4.0 (Octubre 19, 2011).
Unifica el sistema de Google para tablets y
smartphones. Se present el 19 de octubre con la
pretensin de seguir liderando este sector y viene,
cmo no, cargado de mejoras y novedades. Entre ellas
destacan el desbloqueo de terminal por reconocimiento
facial, la plataforma Beam para servicios NFC y Wi-Fi
Direct, un protocolo que permite que varios dispositivos
se conecten a la vez sin necesidad de pasar por un

Jelly Bean 4.2 (Octubre 29, 2012). Ms


rpido, simple y permite mltiples cuentas de
usuario.

Permite activar el display


inalmbrico, donde puedes
compartir pelculas, videos y
cualquir cosa que est en tu
pantalla en una HDTV.

Arquitectu
ra de
Android

Kernel de Linux
El ncleo del sistema operativo Android es un kernel Linux versin

2.6, similar al que puede incluir cualquier distribucin de Linux,


como Ubuntu, solo que adaptado a las caractersticas del hardware
en el que se ejecutar Android (normalmente, un smartphone).
Proporciona una capa de abstraccin para los elementos hardware a

los que tienen que acceder las aplicaciones. Esto permite que se
pueda acceder a esos componentes sin necesidad de conocer el
modelo o caractersticas precisas de los que estn instalados en
cada telfono. De esta forma, si una aplicacin necesita, por
ejemplo, la brjula, podr utilizar la que incluya el telfono, sea cual
sea. Para cada elemento hardware del telfono existe un controlador
(driver) dentro del kernel que permite utilizarlo desde el software.
Adems

de proporcionar controladores hardware, el kernel se


encarga de gestionar los diferentes recursos del telfono (energa,
memoria, ) y del sistema operativo en s: procesos, elementos de
comunicacin (networking), etc.

Bibliotecas
La capa que se sita justo sobre el kernel la componen las bibliotecas nativas de Android
(tambin mal llamadaslibreras, por el trmino inglslibraries). Estas bibliotecas estn
escritas en C o C++ y compiladas para la arquitectura hardware especfica del telfono,
tarea que normalmente realiza el fabricante, que tambin se encarga de instalarlas en el
terminal antes de ponerlo a la venta. Su cometido es proporcionar funcionalidad a las
aplicaciones, para tareas que se repiten con frecuencia, evitando tener que codificarlas
cada vez y garantizando que se llevan a cabo de la forma ms eficiente (en teora, al
menos).

Gestor de superficies (Surface Manager): se encarga de componer las imgenes


que se muestran en la pantalla a partir de capas grficas 2D y 3D. Cada vez que la
aplicacin pretendedibujaralgo en la pantalla, la biblioteca no lo hace directamente
sobre ella, sino que realiza los cambios en imgenes (mapas de bits) que almacena en
memoria y que despus combina para formar la imagen final que se enva a pantalla.

SGL (Scalable Graphics Library): desarrollada por Skia (empresa adquirida por
Google en 2005) y utilizada tanto en Android como en Chrome (navegador web de
Google), se encarga derepresentarelementos en dos dimensiones. Es el motor
grfico 2D de Android.

OpenGL | ES (OpenGL for Embedded Systems): motor grfico 3D basado en las


APIs (Application Program Interface) de OpenGL ES 1.0, 1.1 (desde la versin 1.6 de
Android) y 2.0 (desde la versin 2.2 de Android). Utiliza aceleracin hardware o un
motor software altamente optimizado cuando no la hay.

Bibliotecas multimedia: que permiten visualizar, reproducir e incluso grabar


numerosos formatos de imagen, vdeo y audio como JPG, GIF, PNG, MPEG4, AVC
(H.264), MP3, o AAC.

WebKit: motor web utilizado por el navegador (tanto como aplicacin independiente
como embebido en otras aplicaciones). Es el mismo motor que utilizan Google

Entorno de ejecucin

El entorno de ejecucin de Android, aunque se apoya en las bibliotecas


enumeradas anteriormente, no se considera una capa en s mismo, dado que
tambin est formado por bibliotecas. En concreto, las bibliotecas esenciales de
Android, que incluyen la mayora de la funcionalidad de las bibliotecas
habituales de Java as como otras especficas de Android.

El componente principal del entorno de ejecucin de Android es la mquina


virtual Dalvik, componente que ejecuta todas y cada una de las aplicaciones no
nativas de Android. Las aplicaciones se codifican normalmente en Java y son
compiladas, pero no para generar un ejecutable binario compatible con la
arquitectura hardware especfica del dispositivo Android. En lugar de eso, se
compilan en un formato especfico para la mquina virtual Dalvik, que es la que
las ejecuta. Esto permite compilar una nica vez las aplicaciones y distribuirlas
ya compiladas teniendo la total garanta de que podrn ejecutarse en cualquier
dispositivo Android que disponga de la versin mnima del sistema operativo que
requiera cada aplicacin.

Aunque las aplicaciones se escriben en Java, Dalvik no es realmente una


mquina virtual Java. Es decir, no es compatible con el bytecode Java
(instrucciones ejecutables independientes de la arquitectura hardware) que
ejecutan las mquinas virtuales Java normales. Java se usa nicamente como
lenguaje de programacin, pero los ejecutables que se generan con el SDK de
Android no son ejecutables Java convencionales y, por lo tanto, no se pueden
ejecutar en mquinas virtuales Java convencionales. Durante el proceso de
compilacin de los programas Java (normalmente archivos .java) s que se
genera, de forma intermedia, el bytecode habitual (archivos .class). Pero esos
archivos son convertidos al formato especfico de Dalvik en el proceso final

Marco de aplicacin
La siguiente capa la forman todas las clases y servicios que utilizan directamente
las aplicaciones para realizar sus funciones y que, obviamente, se apoyan en las
bibliotecas y en el entorno de ejecucin que ya hemos detallado. La mayora de los
componentes de esta capa son bibliotecas Java que acceden a los recursos a travs
de la mquina virtual Dalvik. Entre las ms importantes se encuentran las
siguientes:

Administrador de actividades (Activity Manager): se encarga de controlar


el ciclo de vida de las actividades y la propia pila de actividades. Sin entrar en
muchos detalles ahora, lasactividades se pueden definir como lasventanasque
se muestran, una sobre otra, en la pantalla del dispositivo Android (usando un
concepto de ventana similar al de los sistemas operativos grficos de PC,
aunque el funcionamiento en Android sea muy diferente).

Administrador de ventanas (Windows Manager): se encarga de organizar


lo que se muestra en pantalla, creando superficies que pueden ser
rellenadaspor las actividades.

Proveedor de contenidos (Content Provider): permite encapsular un


conjunto de datos que va a ser compartido entre aplicaciones creando una capa
de abstraccin que hace accesible dichos datos sin perder el control sobre cmo
se accede a la informacin. Por ejemplo, uno de los proveedores de contenido
existentes permite a las aplicaciones acceder a los contactos almacenados en el
telfono. Esta biblioteca nos permite crear tambin nuestros propios
proveedores para permitir que otras aplicaciones accedan a informacin que
gestiona la nuestra.

Administrador de notificaciones (Notification Manager): proporciona


servicios para notificar al usuario cuando algo requiera su atencin.
Normalmente las notificaciones se realizan mostrando alerta en la barra de
estado, pero esta biblioteca tambin permite emitir sonidos, activar el vibrador o
hacer pardear los LEDs del telfono (si los tiene).

Administrador de paquetes (Package Manager): las aplicaciones Android


se distribuyen en paquetes (archivos .apk) que contienen tanto los archivos .dex
como todos los recursos y archivos adicionales que necesite la aplicacin, para
facilitar su descarga e instalacin. Esta biblioteca permite obtener informacin
sobre los paquetes actualmente instalados en el dispositivo Android, adems de
gestionar la instalacin de nuevos paquetes.

Administrador de telefona (Telephony Manager): proporciona acceso a la


pila hardware de telefona del dispositivo Android, si la tiene. Permite realizar
llamadas o enviar y recibir SMS/MMS, aunque no permite reemplazar o eliminar
la actividad que se muestra cuando una llamada est en curso (por motivos de
seguridad).

Administrador de recursos (Resource Manager): proporciona acceso a


todos los elementos propios de una aplicacin que se incluyen directamente en
el cdigo: cadenas de texto traducidas a diferentes idiomas, imgenes, sonidos
e incluso disposiciones de las vistas dentro de una actividad (layouts). Permite
gestionar esos elementos fuera del cdigo de la aplicacin y proporcionar
diferentes versiones en funcin del idioma del dispositivo o la resolucin de
pantalla que tenga.

Administrador de ubicaciones (Location Manager): permite determinar la


posicin geogrfica del dispositivo Android (usando el GPS o las redes
disponibles) y trabajar con mapas.

Administrador de sensores (Sensor Manager): permite gestionar todos los

Aplicaciones
La capa superior de esta pila software la forman, como no podra ser de

otra forma, las aplicaciones. En esta capa se incluyen todas las aplicaciones
del dispositivo, tanto las que tienen interfaz de usuario como las que no,
tanto las nativas (programadas en C o C++) como las administradas
(programadas en Java), tanto las que vienen de serie con el dispositivo
como las instaladas por el usuario.
Aqu

est tambin la aplicacin principal del sistema:Inicio(Home),


tambin llamada a veces lanzador (launcher), porque es la que permite
ejecutar otras aplicaciones proporcionando la lista de aplicaciones
instaladas y mostrando diferentes escritorios donde se pueden colocar
accesos directos a aplicaciones o incluso pequeas aplicaciones incrustadas
owidgets, que son tambin aplicaciones de esta capa.

Lo principal a tener en cuenta de esta arquitectura es que todas las

aplicaciones, ya sean las nativas de Android, las que proporciona Google,


las que incluye de serie el fabricante del telfono o las que instala despus
el usuario utilizan el mismo marco de aplicacin para acceder a los
servicios que proporciona el sistema operativo. Esto implica dos cosas: que
podemos crear aplicaciones que usen los mismos recursos que usan las
aplicaciones nativas (nada est reservado o inaccesible) y que podemos

III. Activities e Intents


Creacin de un proyecto.
Ciclo de vida de una Activity.
Guardado y recuperacin del estado e

informacin de una Activity.


Activities mltiples.
Ejecucin de una Activity desde un evento.
Ejecucin de una Activity para devolver un
resultado.
Paso de datos entre Activities.
AndroidManifest.xml.

Activity
Una activity es una ventana que contiene la interface de

usuario de nuestra aplicacion. Una aplicacin puede tener


cero o ms activities.
El objetivo principal de una activity es interactuar con el
usuario. Desde el momento que una activity aparece en la
pantalla hasta el momento que se oculta, pasa por varias
etapas, conocidas como el ciclo de vida de una activity.
Entender el ciclo de vida de una activity es vital para
asegurar que tu aplicacin funcione correctamente.
EJERCICIO 1.
Realizar el Activity de la figura.

Ciclo de vida de una Activity:


onCreate() Llamado cuando la
activity es creada pero no es
todava visible.
onStart() Llamado cuando la
activity empieza a ser visible a el
usuario pero no tiene el foco.
onResume() Llamado cuando
la activity es visible, tiene el foco
y comienza a interactuar con el
usurio.
onPause() Llamado cuando la
activity actual va a ser pausada
para que otra pase a ser visible.
onStop() Llamado cuando la
activity ya no es visible para el
usuario.
onRestart() Llamado cuando la
activity que haba sido detenida,
comienza a ser visible de nuevo.

Es importante saber que cuando se presiona

el botn BACK, la activity es destruida.


Hay
2
mtodos
ms:
onSaveInstanceState()
y
onRestoreInstanceState().
onSaveInstanceState()
es
llamado
cuando el usuario cambia la orientacin de
la pantalla o cuando la activity termina su
ejecucin por peticin del S.O. al necesitar
liberar recursos. Aqu debemos programar
las lneas que guardarn el estado de
nuestro GUI, los estados de los checkboxes,
el campo donde se qued el foco del
usuario, el texto introducido en los EditText
(campos de texto) que no han sigo
guardados todava, etc., es decir, todo lo
necesario para que el GUI presente la
misma informacin cuando la actitity
regrese a interactuar con el usuario
nuevamente.
onRestoreInstaceState() es llamado para
restaurar la GUI tal como estaba antes de
ser
llamado
el
mtodo
onSaveInstanceState().

EJERCICIO 2.
Modificar el programa del ejercicio 1 y
sobreescribir los mtodos del ciclo de vida
de un Activity para mostrar en el LogCat sus
mensajes en tiempo real, como se muestra
en la figura inferior.

Guardado y recuperacin del estado de una Activity


Para guardar el estado (los datos) de una activity o para pasar

informacin entre activities, utilizamos al objeto Bundle.


Los Bundles trabajan como mapeos llave-valor (key-value), ms o
menos como un Hash para almacenar informacin de estado.
Cuando rotamos la pantalla o cuando el S.O. necesita liberar memoria,
antes
de
ser
destruida
la
activity,
el
mtodo
onSaveInstanceState(Bundle outState) es invocado. Si queremos
guardar su estado, necesitamos sobreescribir este mtodo para
almacenar los datos en el Bundle, con una llave que identifique a cada
dato, as como al dato mismo (valor).
Despus, cuando otra instancia de la activity original es creada, el
mtodo onCreate(Bundle savedInstanceState) es llamado. Si
queremos recuperar el estado de la instancia anterior, necesitamos
programarle el cdigo que mapear los datos (valores) a travs de sus
llaves, para recuperarlos y mostrarlos en los componentes del GUI.
Tambin
podemos
hacer
los
mismo
en
el
mtodo
onRestoreInstanceState(Bundle savedInstanceState).
NOTA: Cuando la instancia de la activity es creada por primera vez, el
objeto Bundle es null; en caso contrario, el Bundle llevar el estado de
la instancia anterior.

EJERCICIO 3.
Modificar el programa
del ejercicio 2 para
que se conserven el
nombre del usuario y
el mensaje de
bienvenida, al crearse
una nueva instancia
de la activity.

Haga pruebas
presionando el botn
BACK y regresando a la
aplicacin, tambin
rotando la pantalla de
vertical a horizontal y
visceversa.

Intents para Activities mltiples


Una aplicacin con GUI est compuesta por lo menos de

una activity.
Los intents son mecanismos de paso de mensajes en el
S.O. para ejecutar activities dentro de la misma aplicacin
o entre aplicaciones. Existen dos maneras:
Implcitamente: solicitando que se ejecute una accin nativa

sobre cierta informacin en forma de URI (Uniform Resource


Identifier). En este caso el S.O. busca la aplicacin por default
necesaria para mostrar la activity.
Uri uri = Uri.parse("http://www.hernan-aranda.com");
Intent browse = new Intent(Intent.ACTION_VIEW, uri);
startActivity(browse);
Explcitamente: especificando qu clase ejecutar.

Intent ayuda = new Intent(this, Help.class);


ayuda.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity(ayuda);

Ejecucin de
una Activity
desde un
evento.
EJERCICIO 4.
Modificar el programa
del ejercicio 3 para que
el usuario introduzca una
direccin WWW y al dar
clic en el botn, se abra
la pgina solicitada. El
browser se disparar con
la accin nativa de
Intent.ACTION_VIEW

Paso de datos entre Activities


Una activity puede pasarle datos a otra activity a travs

del mtodo putExtra() del objeto Intent y recibirlos con


el mtodo getExtras().
Intent ayuda = new Intent(this, Help.class);
ayuda.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
ayuda.putExtra(KEY_NOMBRE", nombre.getText().toString());
startActivity(ayuda);
EJERCICIO 5.
Modificar el programa del
ejercicio 4 para que el usuario
introduzca su nombre en la 1ra
Activity y al dar clic en el botn
se ejecute la 2da Activity
utilizando el dato pasado con el
nombre del usuario.

String nombre =
getIntent().getExtras().getString("KEY_NOMBRE");

Ejecucin de una Activity para


devolver un resultado
Una activity que devuelve un resultado es aquella que

dispara el evento onActivityResult(), el cual debemos


sobreescribir para implementar el cdigo de manejo que
tomar ese resultado.
Por ejemplo, supongamos que queremos ejecutar desde una

activity propia cuando el usuario de clic al botn Record voice,


el reconocedor de voz por default del S.O. que convierte a
texto, y queremos que la segunda actividad nos devuelva todas
los textos posibles que fueron reconocidos.
Lo primero lo hacemos con el siguiente cdigo desde el evento
de clic:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
"Say a word or phrase\nand it will show as text");
startActivityForResult(intent, KEY_RECOGNIZER);

Lo

segundo lo hacemos sobreescribiendo


onActivityResult() de la siguiente manera:

el

mtodo

protected void onActivityResult(int requestCode, int resultCode, Intent data)


{
if (requestCode == KEY_RECOGNIZER && resultCode == RESULT_OK) {
ArrayList<String> result = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
textos_resultantes.setText(result.toString());
}
super.onActivityResult(requestCode, resultCode, data);
}
Debemos tener declarada una variable final entera en nuestra clase principal,
como identificador del Intent->Activity a ejecutar, para poder obtener el
resultado cuando regrese el control a la activity principal:
public static final int KEY_RECOGNIZER = 1001;

EJERCICIO
6.
Hacer el
programa del
ejemplo
anterior .

AndroidManifest.xml
Cada

aplicacin
Android
debe
tener
su
archivo
AndroidManifest.xml en su directorio raz.
Este archivo presenta la informacin esencial de la aplicacin
para el sistema Android antes de ser ejecutada, que contiene lo
siguiente:
Nombre del paquete Java para la aplicacin. Este nombre sirve

como un identificador nico de la aplicacin.


Describe los componentes de la aplicacin (activities, services,
broadcast receivers y content providers). Se nombran las clases que
los implementan y se publican sus capacidades. As el sistema puede
conocer los componentes que hay y bajo qu condiciones se iniciarn.
Declara los permisos que la aplicacin debe tener para poder
acceder a determinadas partes protegidas de la API o para interactuar
con otras aplicaciones.
Declara el nivel mnimo de la API Android que requiere la
aplicacin.
Lista las bibliotecas con las que la aplicacin debe estar enlazada.

IV. Views
Arquitectura GUI: el modelo, la

vista y el controlador.
Layouts.
Componentes grficos.
Eventos.
Mens.
Inflado de vistas.

Arquitectura GUI: el modelo, la vista y el


controlador
En

Android
utilizamos
el
patrn
de
arquitectura
llamadoModelo Vista Controlador(MVC)cuya principal
bondad consiste en separar los datos de una aplicacin, la
interfaz de usuario y la lgica de negocios en tres componentes
distintos que se relacionarn para al final tener como resultado
nuestra aplicacin.

Modelo.Son las representaciones que construiremos basadas en la

informacin con la que operar nuestra aplicacin. En Java, el


modelo viene siendo anlogo a losbeansque tienen la particularidad
de ser reutilizables y nos ayudan a cumplir con el proverbio de
oroDont Repeat Yourself (DRY)haciendo a nuestras
aplicaciones escalables. En esta parte del modelo tambin juega la
decisin de qu modelo para almacenar informacin utilizar. Base
de datos? Web services? El modelo que elijamos depende
obviamente de las necesidades de informacin de nuestra aplicacin.
Vista.No es ms que la interfaz con la que va a interactuar el
usuario. En Android, las interfaces las construimos en XML. Podemos
hacer una analoga a lo que hacemos en el desarrollo web con los
CSS. Construimos nuestro esqueleto en XML que equivale al HTML de
un sitio. Posteriormente, con ayuda de estilos, que tambin los
escribimos en XML, podemos empezar a darle formato de colores,
posiciones, formato, etc. a nuestro esqueleto. Esto equivale a los
CSS.
Controlador.Son todas las clases que nos ayudarn a darle vida a
esas interfaces bonitas que ya construimos y nos permitirn
desplegar y consumir informacin de y para el usuario. Estos
controladores se programan en lenguaje Java y son el core de la
aplicacin.

Layouts y componentes grficos


A la hora de disear interfaces para dispositivos mviles,

hay que tener en cuenta que el espacio de la pantalla es


muy limitado, por lo que es fundamental seleccionar el
tipo de Layout (o distribucin) que vamos a utilizar en el
diseo.
Layout Lineal

(LinearLayout).
Es el ms simple que
podemos utilizar.
Como su nombre
indica, los elementos
se irn colocando uno
detrs de otro, pero si
que podemos indicar
si la colocacin lineal
se har de forma
vertical u horizontal.

Layout de Tabla

(TableLayout).
Es un modelo de
organizacin basado en
una organizacin con
tablas. El diseo lo
organizaremos en filas
(elemento TableRow) y
dentro de cada fila,
pondremos los
elementos.

Layout Relativo
(RelativeLayout).
Este es el layout
ms flexibles de
todos. Los
elementos se
colocan relativos a
otro elemento o a
otro layout.

Layout Absoluto (AbsoluteLayout).

Es una capa donde se utilizan coordenadas X e Y para


indicarle donde colocar los elementos dentro del diseo.
En cada elemento del cdigo se le indicar el valor de X
y de Y.

Layout de Marco

(FrameLayout).
Este layout consiste
en un marco que
ocupa toda la
pantalla, y donde
los controles se
dispondrn a partir
de la esquina
superior izquierda,
por lo que es
probable que haya
elementos que se
queden ocultos
detrs de otros.

Componentes grficos android.widget.


Este paquete contiene los elementos UI para
mostrar en las interfaces de las activities de
nuestras aplicaciones.

EJERCICIO 7.
Utilizando un layout de
tipo tabla, elaborar la
vista XML de la
aplicacin Calculadora
de Propinas que se
muestra en la figura de
la derecha.
NOTA: La aplicacin no
tendr funcionalidad
todava. El controlador
ser programado en el
siguiente ejercicio.

Eventos
Para darle funcionalidad a nuestros componentes grficos dentro de la

activity es necesario programar la captura de los eventos que se


disparan de la interaccin del usuario con la interfaz de usuario (GUI).
Para capturar los eventos debemos registrar sus listeners y
sobreescribir los mtodos que queramos implementar. Los siguientes
son los ms comunes:

View.OnClickListener. Llamado cuando el usuario toca un componente, o


coloca el foco sobre el componente con las teclas de navegacin y
presiona enter.
View.OnLongClickListener.
Llamado cuando el usuario toca un
componente y lo deja presionado por aprox. un segundo, o coloca el foco
sobre componente con las teclas de navegacin y presiona y deja oprimido
enter por aprox. un segundo.
View.OnFocusChangeListener. Llamado cuando el usuario navega hacia o
desde un componente a otro.
View.OnKeyListener. Llamado cuando el foco se encuentra sobre un
componente y el usuario oprime o suelta una tecla del dispositivo.
View.OnTouchListener.
Llamado cuando el usuario toca o suelta la
pantalla, mueve el dedo o realiza algn gesture como doble tap o fling,
dentro de los lmites del componente.

Hay dos maneras de registrar listeners para los eventos. Ejemplo: si queremos

registrar un OnClickListener para un botn, podemos hacer lo siguiente:


1.

Crear una implementacin annima de la interface a utilizar y pasar su


instancia al correspondiente setter del componente grfico que disparar el
evento (Esta implementacin es la que habamos utilizado en los ejercicios
anteriores).

2.

Implementar el listener como parte de la activity.

EJERCICIO 8.
Implementar los listeners
necesarios para dar
funcionalidad al ejercicio 7.

b)

c)
d)

e)
f)

conversin entre nmeros binarios, octales,


decimales y hexadecimales.
Los nmeros se desplegarn en componentes
TextView y su entrada se limitar a la
pulsacin de botones solamente (El usuario
no podr introducir los nmeros por medio del
teclado de Android, investigue como
desactivar el teclado para una aplicacin).
Los tipos de nmero (su base) a convertir y
los del resultado podrn seleccionarse por
medio de botones de radio.
Cuando seleccione el tipo de nmero (base)
que desea convertir, deber inhabilitar los
botones que no necesite. Por ejemplo, si
selecciona nmeros binarios, deber
inhabilitar los botones de los nmeros del 3 al
F; si selecciona nmeros octales, deber
inhabilitar los del 9 al F; y si selecciona los
nmeros decimales, los del A al F.
Deber agregar un botn para limpiar los
nmeros de los TextViews cuando desee
comenzar otra conversin.
Utilizar el objeto Bundle para guardar y
recuperar los datos cuando la actividad sea
destruida por atencin del SO y despus sea
instanciada nuevamente. Los datos que se
guardarn son: el nmero a convertir, el
nmero resultante, el tipo de nmero (base)

Mens
En Android existen tres tipos de mens que podemos utilizar

dentro de nuestras aplicaciones:


Men de opciones: Es la coleccin primaria

de opciones que aparecen en una actividad


cuando el usuario oprime el botn MENU del
dispositivo. En versiones ms actuales como
Android 3.0 y superiores, es posible
proporcionar accesos rpidos para seleccionar
opciones
de
un
men
colocndolos
directamente en la Action Bar mediante lo
que se conoce como action items.
Men contextual: Es un men de opciones

flotante en forma de lista que aparece cuando


el usuario utiliza el gesto de long press, es
decir, tocar la pantalla y mantener la
pulsacin por determinado tiempo.
Men popup:
Es un men de opciones
flotante alternativo al men contextual,
recomendado para Android 3.0 y superior.

Para

agregar un men de opciones a una activity,


necesitamos
sobreescribir
su
mtodo
onCreateOptionsMenu(). Antes de Android 3.0 el este
mtodo es llamado la primera vez que el men es
desplegado. Desde la versin 3.0 es llamado junto con la
creacin del Action Bar, cada vez que la activity es
mostrada.

Para poblar el men podemos hacerlo de 2 formar:


1.

2.

A travs de puro cdigo, invocando al mtodo add() de


la referencia al objeto de tipo Menu que recibe el
mtodo onCreateOptionsMenu().
A travs de la manera ms recomendada: Inflando un
archivo XML de tipo men, donde deben estar
especificados: su texto, cono, shortcuts, etc.

Para

manejar las selecciones de los tems del men,


debemos
sobreescribir
el
mtodo
onOptionsItemSelected().

EJERCICIO 10.
Modificar el ejercicio 9, eliminando
el botn Limpiar y agregando un
men con 2 opciones:
1. Limpiar.
2. Copiar a portapapeles.

Cuando queremos desplegar un mens contextuales, es decir,

por componente grfico (view) en lugar de por toda la activity,


necesitamos
sobreescribir
el
mtodo
onCreateContextMenu() y agregar al final del mtodo
onCreate(),
la
funcin
registerForContexMenu(view),
pasndole de parmetro la referencia del componente grfico
que escuchar el long-press del usuario cuando est sobre l.
Para poblar el men contextual, tambin lo podemos hacer de

2 formas:
1. A travs de puro cdigo, invocando al mtodo add() de la
referencia al objeto de tipo Menu que recibe el mtodo
onCreateContextMenu().
2. A travs de la manera ms recomendada: Inflando un
archivo XML de tipo men, donde deben estar
especificados: su texto, cono, shortcuts, etc.
Para manejar las selecciones de los tems del men contextual,

debemos sobreescribir el mtodo onContextItemSelected().

EJERCICIO 11.
Modificar el ejercicio
10, para utilizar las
mismas opciones en
un men contextual
cuando el usuario
haga long-press en el
nmero a convertir.

Inflado de Views
El inflado de views es utilizado para instanciar archivos XML

layout dentro de otros views durante la ejecucin de una activity,


de tal manera que se puedan visualizar los cambios en el GUI
durante la interaccin del usuario.
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.mi_view, null);

Para acceder a los componentes dentro de la nueva view inflada

para editarlos o agregarles un listener de eventos, invocamos al


mtodo findViewById() como se muestra en el siguiente ejemplo:
Button boton = (Button) view.findViewById(R.id.mi_boton);
boton.setText(Texto);
boton.setOnClickListener(miListener);

Para agregar la view inflada a un layout u otra view, invocamos al

mtodo addView como en el ejemplo siguiente:


layoutPrincipal.add(view) ;

EJERCICIO 12.
Utilizando Inflado de Vistas,
realizar una aplicacin que
calcule el promedio de N
calificaciones introducidas
por el usuario.
Conforme el usuario
ingresa el nmero de
calificaciones, de manera
dinmica se debern
mostrar las vistas para
capturar las mismas.
El promedio deber ser
calculado de la misma
manera de forma
automtica.

V. Ingredientes extras de una aplicacin


Services.
Broadcast Receivers.
Lanzar un Service cuando el botn de la
cmara es pulsado.
Alerts.
Toast para un breve mensaje en la pantalla.

Alert Dialog Box para mostrar

mensajes personalizados.

Services
A diferencia de las Activities que despliegan interfaces grficas,

los Services se ejecutan de forma invisible (background) sin


interaccin del usuario.
Un

Service puede se ejecutado o detenido por cualquier


componente. Mientras est ejecutndose, cualquier componente
puede ser ligado al Service. Un Service tambin puede detenerse
por s solo.

Escenarios ejemplo de Services:

Una activity le permite al usuario seleccionar una cancin,


para arrancar un service que la reproducir en el background.
Durante la reproduccin, una nueva activity es creada y ligada
al service cambiar de cancin o parar la que est en curso.
Una activity comienza un service para subir fotos a un sitio
web. Entonces, una nueva activity en creada y ligada al
servicio para determinar qu archivo de imagen est siendo
subida actualmente, el porcentaje subido y la imagen en la
pantalla.

EJERCICIO 13.
Analizar la aplicacin SimpleService, que permite
ejecutar y detener un Service que funciona
como Alarma, reproduciendo un mp3 al
cumplirse la fecha y hora .

Broadcast Receivers
Un Broadcast Receiver es un receptor de eventos generados

por el S.O. Android. Lo utilizamos cuando queremos que nuestra


aplicacin escuche eventos determinados del sistema, como
son:

ACTION_CAMERA_BUTTON: Cuando se presiona el botn de


la cmara.
ACTION_BATTERY_LOW. Cuando la batera del dispositivo
est baja.
ACTION_MEDIA_REMOVED. Cuando la tarjeta SD es
removida.
ACTION_TIME_CHANGED. Cuando cambia la hora del
sistema.
ACTION_PACKAGE_ADDED. Cuando es instalado una nueva
aplicacin en el sistema.
ACTION_NEW_OUTGOING_CALL. Cuando una llamada va a
ser realizada.

EJERCICIO 14.
Analizar la aplicacin SimpleBroadcastReceiver,
que ejecuta un Service que despliega un
mensaje en la pantalla cuando el usuario pulsa
el botn de la cmara.

Mensajes de Alerta
Una Alert proporciona un mensaje al usuario, fuera

del GUI principal de la aplicacin mvil.


El mensaje puede presentarse en una ventana
sobrepuesta a la principal como en el caso de los
Toasts y AlertDialog, o en la barra de notificaciones
de la parte superior del sistema.
Toast: despliegan una simple lnea de texto.
AlertDialog:

pueden incluir varias lneas de


texto, imgenes y hasta 3 botones de accin.

Barra de Notificaciones: muestra mensajes pendientes de


leer para que el usuario las cheque a su conveniencia a la
hora que desee.
EJERCICIO 15.

Analizar la
aplicacin
ShowNotificati
on, que coloca
un mensaje en
la barra de
notificaciones
del sistema.

Anda mungkin juga menyukai