You are on page 1of 160

DESARROLLO DE

APLICACIONES
MVILES I
DESARROLLO DE APLICACIONES MVILES I 2

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 3

ndice
Presentacin 05
Red de contenidos 07
UNIDAD 1. ANDROID: INTRODUCCIN A LA PLATAFORMA 09
1.1 Plataforma Android 09
1.1.1 Introduccin a Android, versiones 11
1.1.2 Caractersticas y Arquitectura Android. 13
1.1.3 Mquina virtual Dalvik Virtual Machine y ART 15
1.1.4 Open Handset Alliance 17
1.1.5 Creacin de emuladores 17

1.2 IDE Android Studio 18


1.2.1 Android Studio caractersticas y funciones. 19
1.2.2 Creando la primera aplicacin Hola Mundo. 23
1.2.3 Controles bsicos Button, EditText, TextView 25
1.2.4 Depuracin de cdigo en Android. 29
Resumen de la unidad 31

UNIDAD 2. ANDROID: COMPONENTES 32


2.1 Fundamentos de aplicaciones Android 34
2.1.1 Arquitectura de la plataforma Android. 35
2.1.2 Estructura de un proyecto Android. 35
2.1.3 Que es un Gradle 43

2.2 Componente de una pantalla: Views y ViewGroups 44


2.2.1 Componente de una pantalla: Views y ViewGroups 44
2.2.2 Distribucin de los ViewGroups: LinearLayout, AbsoluteLayout,
TableLayout, Relative Layout, FrameLayout y ScrollView. 45
2.2.3 Widgets 51
2.2.4 Controles bsicos Android 51

2.3 Componente Activity e Intent: definicin y caractersticas 56


2.3.1 Activity 56
2.3.2 Ciclo de vida de la clase activity 58
2.3.3 Introduccin a los Intent . 60
2.3.4 Funcionalidad y uso de Intents 61
2.3.5 Resolviendo problemas de pantalla. 63

2.4 Orientacin del dispositivo 66


2.4.1 Adaptacin de la interface de usuario a la orientacin del dispositivo 67
2.4.2 Manejar cambios en la orientacin del dispositivo. 68

2.5 Dilogos y notificaciones 69


2.5.1 Notificaciones Toast 70
2.5.2 Notificaciones en la barra de estado. 71
2.5.3 Dilogos personalizados basados en clases. 73

UNIDAD 3. PERSISTENCIA DE DATOS EN ANDROID 84


3.1 Acceso a recursos y archivos 85
3.1.1 Tipos de recursos en Android 86
3.1.2 Almacenamiento privado y compartido. 88
3.1.3 Grabar y cargar datos de Preferencias de Usuario. 89
3.1.4 File, FileOutputStream, OutputStreamWriter, PrintWriter 91
3.1.5 Environment uso de mtodos bsicos para acceso a recursos. 94

3.2 Persistencia de Datos usando SQLite


3.2.1 Introduccin a adaptadores de datos 94

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 4

3.2.2 Introduccin a SQLite 96


3.2.3 Gestin de bases de datos con SQLite. Uso del componente
SQLiteOpenHelper. 98
3.2.4 La clase ContentValues 99
3.2.5 Mantenimiento de datos Insert, Update, Delete rawQuery 100

3.3 Aplicando el Modelo Vista controlador con SQLite


3.3.1 Clases de acceso a datos basados en el modelo vista controlador. 102

UNIDAD 4. NETWORKING EN ANDROID


4.1 Consumiendo servicios web
4.1.1 SOAP (Simple Object Access Protocol) Mensajes SOAP, Estructura 104
4.1.2 Uso del protocolo HTTP para consumir web services. 106
4.1.3 Obtencin de data de archivos XML. 108
4.1.4 Clases de acceso a web services 115
4.1.5 Thead Manejando hilos 117

UNIDAD 5. Servicios basados en localizacin


5.1 Manejo de fragments
5.1.1 Qu es Fragment? 129
5.1.2 Creating a Fragment, administrar Fragments,Flagment class 132
5.1.3 Eventos fragment, Aaplicacin fragment
131

5.1 Servicios basados en localizacin


5.1.1 Utilizar Google Maps en la aplicacin. 137
5.1.2 Obtencin de la localizacin (coordenadas) del dispositivo. 138
5.1.3 Google Maps 139
5.1.4 Activar las API de Google Maps. 140

UNIDAD 6. SERVICIOS
6.1 Creando y administrando Servicios
6.1.1 Qu es un servicio, 145
6.1.2 Intent Service, Bound Service. 147
6.1.3 Configurar el archivo de manifiesto. 148
6.1.4 Iniciar/Configurar servicios 149

UNIDAD 7. MULTIMEDIA Y PUBLICACIN


7.1 Audio, Video y Uso de Dispositivos visuales
7.1.1 Componente Media Player. Definicin, caractersticas y aplicaciones. 151
7.1.2 Visualizacin de videos usando la vista Video. 152
7.1.3 Grficos 2D y Aplicaciones Multimedia. 154
7.1.4 Grabacin de audio y video: Uso de Intents para grabar video. 155

7.1 Publicacin en Google Play


7.1.1 Google Play 156
7.1.2 Generacin de APK firmado con el certificado digital. 157
7.1.3 Publicacin de la aplicacin. 158

Bibliografa del curso 159

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 5

Presentacin
El Taller de Desarrollo de Aplicaciones Mviles I es un curso que pertenece a la
lnea de programacin y desarrollo de aplicaciones siendo un curso de especialidad
slo en la carrera de Computacin e Informtica. Permite al alumno iniciarse en la
programacin de dispositivos mviles bajo el entorno Android Studio que ha sido
optimizado para dispositivos mviles con sistema operativo Android.

El manual para el curso ha sido diseado bajo la modalidad de unidades de


aprendizaje, las que se desarrollan durante semanas determinadas. En cada una de
ellas, hallar los logros, que debe alcanzar al final de la unidad; el tema tratado, el cual
ser ampliamente desarrollado; y los contenidos, que debe desarrollar, y ejercicios
necesarios para poner en prctica los conceptos desarrollados en clase. Por ltimo,
encontrar las actividades que deber desarrollar en cada sesin, que le permitirn
reforzar lo aprendido en la clase.

El curso es prctico y consiste en un taller de programacin. En la primera parte del


curso, se revisan las caractersticas del sistema operativo Android as como las
funcionalidades bsicas con el fin de familiarizar al participante con la forma de trabajo
y la arquitectura de aplicaciones bajo el sistema operativo Android y la relacin que
existe con las aplicaciones y/o servicios de google (Google Apps). Luego, se
desarrollan aplicaciones que permitan el manejo del dispositivo mvil para ingresar,
procesar y presentar informacin haciendo uso de las clases que proporciona la
plataforma de desarrollo Android, luego se desarrollara persistencia de datos locales
como almacenamiento en disco, bases de datos sqlite y en la nube va web services,
soap, rest. Se concluye con la publicacin de aplicaciones haciendo uso de los
servicios de google va google play.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 6

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 7

Red de contenidos

DESARROLLO DE APLICACIONES MVILES I

Unidad 1 Unidad 2 Unidad 3 Unidad 4 Unidad 5 Unidad 6 Unidad 7

Android: Android: Networking en Servicios basados Multimedia y


Introduccin a Componentes Android en localizacin publicacin
la plataforma

Persistencia
de datos en Servicios
Android

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 8

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 9

UNIDAD

1
Introduccin a la plataforma
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno elabora aplicaciones haciendo uso del entorno de
desarrollo Android Studio.

TEMARIO

1.3 Plataforma Android


1.3.1 Introduccin a Android, versiones
1.3.2 Caractersticas y Arquitectura Android.
1.3.3 Mquina virtual Dalvik Virtual Machine y ART
1.3.4 Open Handset Alliance
1.3.5 Creacin de emuladores

1.4 IDE Android Studio


1.4.1 Android Studio caractersticas y funciones.
1.4.2 Creando la primera aplicacin Hola Mundo.
1.4.3 Controles bsicos Button, EditText, TextView
1.4.4 Depuracin de cdigo en Android.

ACTIVIDADES PROPUESTAS

Los alumnos identifican la arquitectura del sistema operativo android.


Los alumnos hacen uso del IDE principal de desarrollo Android Studio.
Los alumnos crean la primera aplicacin en Android y reconocen la diferencia
entre un activity, layout y las vistas bsicas.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 10

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 11

1.1. INTRODUCCIN A LA PLATAFORMA


1.1.1. Plataforma Android

Android es un sistema operativo mvil basado en el kernel 2.6 de Linux Android fue
desarrollado para dispositivos mviles, tabletas,
relojes, televisores automviles, actualmente es uno
de los sistemas operativos ms utilizados en el
planeta. Inicialmente fue desarrollado por Andy Rubin
figura 1, quien funda la compaa Android inc en
estados unidos en Palo Alto, posterior a ello google
adquiere completamente la compaa en el ao 2005
posterior a ello se crea en grupo de empresas
asociadas que patrocina Android como plataforma
libre para dispositivos mviles y otros.

La decisin de estudia el desarrollo de aplicaciones


para esta plataforma es que tiene el mayor potencial
del mercado ya que no solo est orientado a
dispositivos mviles sino a una aplica gama de
dispositivos con el soporte de google a continuacin
se presenta una imagen de los dispositivos Figura 1: Andy Rubin
que soportan Android figura 2. Fuente: http://es.wikipedia.org/wiki/Andy_Rubin

Figura 2: Dispositivos que soportan Android


Fuente: http://www.android.com/

Android est basado en capas que permiten administrar las funciones bsicas de
cualquier equipo mvil, en primer lugar tiene aplicaciones estndares como
administrador de contactos, administrador de aplicaciones administrador de drivers,
administrador de mensajes, administrador de archivos, lbum de fotos, administrador
de llamadas configuracin todo controlado desde tu cuenta de Gmail google; para
cualquier instalacin de aplicacin se debe realizar por medio de google play. Debajo
de ello se encuentran las libreras nativas para acceso a bases de datos,
administracin de recursos, drivers de audio, administrador de sistema, webkit
navegador web nativo, etc. Por el lado de la mquina virtual se encuentra Virtual
Dalvik y Art que es una de las mejoras que fueron creadas en octubre del ao 2014,
despus de ello se tiene el kernel del sistema operativo tal como se puede apreciar en
el grfico que se presenta a continuacin.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 12

Figura 3: Dispositivos que soportan Android


Fuente.- Tomado de http://source.android.com/source/index.html

Qu es una Aplicacin Android?


Una aplicacin desarrollada en Android es un programa que posee una o varias
funciones especficas que lo hacen til para un motivo. Son equivalentes a cualquier
programa hecho para PC con la diferencia que tiene funcionalidades desarrolladas
para el celular. Uno de los limitantes es el tamao de pantalla y teclado aunque las
ltimas versiones de sistemas operativos tienen soporte para conectar teclado USB.

Por otro lado cualquier aplicacin se debe instalar por medio de Google Play, sin
embargo se puede instalar una aplicacin configurando instalar aplicaciones de
fuentes no seguras. Por otro lado la plataforma Android tiene una gran cantidad de
aplicaciones con ms de 700 mil aplicaciones que se pueden descargar, muchas de
ellas gratuitas.

Figura 4: Programas posibles para instalar en el celular


Fuente.- Tomado de http://www.androidexperto.com

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 13

1.1.2 Caractersticas y Arquitectura Android


Una aplicacin desarrollada en Android es un programa que posee una o varias
funciones especficas que lo hacen til para un motivo. Son equivalentes a cualquier
programa.

El sistema operativo Android, al igual que los propios telfonos mviles, ha


evolucionado rpidamente, acumulando una gran cantidad de versiones, desde la 1.0
para el QWERTY HTC G1, hasta la 4.0 que acaba de salir al mercado.

Entre las principales caractersticas tenemos:

framework de aplicacin que habilita la reutilizacin y reemplazo de


componentes

mquina virtual dalvik optimizada para mviles

navegador integrado basado en webkit

grficos optimizados por una librera grfica 2d propia; grficos 3d basados en


la especificacin opengl es 1.0

sqlite para almacenamiento de datos estructurados


soporte para gran variedad de archivos multimedia (mpeg4, h.264, mp3, aac,
amr, jpg, png, gif)
Telefona gsm
Bluetooth, edge, 3g y wifi (4g, wimax,)
Cmara, gps, comps, acelermetro
Entorno de desarrollo completo incluyendo emulador, herramientas de
depuracin, profiling de memoria y rendimiento y plugin para el ide eclipse

Competidores comunes

Apple
o iPhone OS
RIM
o Blackberry
Microsoft
o Windows Mobile 6.5 Phone 7 Series
Symbian Foundation
o Symbian OS
Palm
o WebOS

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 14

Cupcake: Android Versin 1.5


Caractersticas: Widgets, teclado QWERTY virtual, copy & paste, captura de vdeos y
poder subirlos a YouTube directamente.

Donut: Android Versin 1.6


Caractersticas: Aade a la anterior la mejora de la interfaz de la cmara, bsqueda
por voz, y navegacin en Google Maps.

Eclair: Android Versin 2.0/2.1


Caractersticas: Mejoras en Google Maps, salvapantallas animado, incluye zoom
digital para la cmara, y un nuevo navegador de internet.

Froyo: Android Versin 2.2


Caractersticas: Incluye hostpot Wifi, mejora de la memoria, ms veloz, Microsoft
Exchange y video-llamada.

Ginger Bread: Android Versin 2.3


Caractersticas: Mejoras del consumo de batera, el soporte de vdeo online y el
teclado virtual, e incluye soporte para pagos mediante NFC2

Honey Comb: Android Versin 3.0/3.4


Caractersticas: Mejoras para tablets, soporte Flash y Divx, integra Dolphin, multitarea
pudiendo cambiar de aplicacin dejando las dems en espera en una columna,
widgets y homepage personalizable.

Ice Cream Sandwich: Android Version 4.0


Caractersticas: Multiplataforma (tablets, telfonos mviles y notebooks), barras de
estado, pantalla principal con soporte para 3D, widgets redimensionables, soporte
USB para teclados, reconocimiento facial y controles para PS3.

Android - 4.4 KitKat

Android - 5.0 Lollipop


Introduce la nueva plataforma en base de diseo, el nuevo concepto de Diseo
Material (Material Design) y es la primera versin que integra Android Runtime (ART)
de manera predeterminada.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 15

1.1.3 Mquina virtual Dalvik Virtual Machine y ART

Dalvik Virtual Machine


Dalvik es la mquina virtual que utiliza la plataforma para dispositivos mviles Android.
Dalvik ha sido diseada por Dan Bornstein con contribuciones de otros ingenieros
de Google.

La Mquina Virtual Dalvik (DVM) permite ejecutar aplicaciones programadas


en Java. La DVM no afirma ser una mquina virtual de java (JVM) debido a que le
ocasionara problemas de licenciamiento, sin embargo cumple ese propsito. La
mayora de los programas escritos en Java 5 pueden correr sobre la DVM.

DVM sacrifica la portabilidad que caracteriza a Java para poder crear aplicaciones con
un mejor rendimiento y menor consumo de energa, estas dos caractersticas son
extremadamente importantes en dispositivos mviles, debido a que la capacidad de
las bateras en estos dispositivos es limitada.

DVM est optimizada para requerir poca memoria y est diseada para permitir
ejecutar varias instancias de la mquina virtual simultneamente, delegando en
el sistema operativo subyacente el soporte de aislamiento de procesos, gestin de
memoria e hilos.

Figura 7: Arquitectura de android


Fuente.- Tomado de http://santiagosolisvidal.blogspot.com/2012/08/arquitectura-de-android.html

A menudo Dalvik es nombrada como una mquina virtual Java, pero esto no es
estrictamente correcto, ya que el bytecode con el que opera no es Java bytecode. Sin

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 16

embargo, la herramienta dx incluida en el SDK de Android permite transformar los


archivos Class de Java compilados por un compilador Java al formato de archivos
Dex.

El nombre de Dalvik fue elegido por Bornstein en honor a Dalvk, un pueblo


de Eyjafjrur, Islandia, donde vivieron antepasados suyos.

Fuente: http://es.wikipedia.org/wiki/Dalvik

Android Runtime (ART)

Esta mquina virtual permite que las aplicaciones se compilen en cdigo nativo, lo cual
ayuda a que las aplicaciones se carguen ms rpido y que traiga el soporte de
procesadores de 64 bits. Google dice que con ART se estima que el desempeo
mejore cuatro veces.

Android Lollipop te permite configurar rpidamente tu nuevo dispositivo. Usando


NFC, podrs migrar tus cuentas con slo unir tu nuevo dispositivo con el viejo.
En el Nexus 6 y Nexus 9, el comando de voz de "OK Google" funciona hasta
cuando la pantalla est apagada.
Permitir restablecer la configuracin de fbrica y borrar todos los datos de
manera remota, especialmente diseado para esas ocasiones en las que
perdemos los telfonos o nos lo roban.
Los nuevos dispositivos vienen con la encriptacin automtica activa para
proteger tu informacin en el caso de que te roben o pierdas el dispositivo.
Menor latencia en la entrada de sonido permite que la msica y los apps de
comunicaciones ofrezcan una mejor experiencia con mayor fluidez.
Soporte de accesorios de sonido a travs de USB.
Funciones de fotografa profesional, incluyendo la captura completa de cuadros a
cerca de 30 cuadros por segundo, soporte de formatos Bayer RAW y YUV, control
del sensor, lente y flash individualmente por cada cuadro, y la captura de
metadata como modelos de ruido e informacin ptica.
Protocolo ms eficiente en el consumo de energa para buscar dispositivos de
Bluetooth LE y los contadores (beacons).
Soporte para 15 nuevos idiomas para incrementar el soporte a ms de 68
idiomas.

Fuente: http://www.cnet.com/es/analisis/google-android-5-0-lollipop/

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 17

1.1.4 Open Handset Alliance

Es una alianza de empresas de manera comercial para patrocinar el desarrollo de


Android hay 84 compaas que patrocinan el producto en beneficio de continuar
mejorando la plataforma Android. Algunos de sus miembros son Google, HTC, Dell,
Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG, T-Mobile, Nvidia y Wind
River Systems.

Figura 4: Lista de empresas open HandSet Alliance


Fuente.- Tomado de http://2.bp.blogspot.com/

1.1.5 Creacin de emuladores


Para iniciar en el desarrollo de aplicaciones mviles con Android es necesario tener un
emulador. Un emulador es una aplicacin que simula ser un equipo fsico para ello
debemos hacer uso del administrador de mquinas virtuales. Para ello se debe hacer
clic en el administrador de mquinas virtuales

En la pantalla se debe elegir una de los dispositivos y posterior a ello se debe


descargar los drivers y/o libreras que sean necesarios.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 18

Para ms detalles debes continuar con el material de la practica dirigida N 1

Tema 2: IDE Android Studio

Android Studio, es el IDE (Entorno de desarrollo integrado) que utilizaremos para crear
nuestras aplicaciones es un ide mejorado al que se tenia de eclipse, esta basado en
IntelliJ IDEA de JetBrains para facilitar la generacin de cdigo para los
desarrolladores de android esta disponible para plataforma windows, MAC O/S y linux.

Para descargar el ide android studio puedes ingresar al siguiente link:


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

Lo ms resaltante de androidstudio es la ayuda integrada

Figura 9: Intelligent code editor

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 19

Fuente.- Tomado de http://developer.android.com/sdk/index.html

1.2.1 Android Studio caractersticas y funciones.

Sistema de construccin de cdigo basado en JetBrains flexible.


Construir variantes y generacin de archivos apk mltiple.
Plantillas de cdigo para ayudarle a construir caractersticas de la aplicacin
comunes.
editor de diseo Rich con soporte para arrastrar y soltar de edicin tema.
Herramientas de pelusa para atrapar el rendimiento, facilidad de uso,
compatibilidad de versiones, y otros problemas.
Capacidades ProGuard y aplicacin de firma.
El soporte integrado para la plataforma de nube Google, por lo que es fcil de
integrar Google Cloud Mensajera y App Engine.
Soporte para construccin basada en Gradle.
Consola de desarrollador: consejos de optimizacin, ayuda para la traduccin,
estadsticas de uso.
Renderizacin en tiempo real.
Soporte para programar aplicaciones para Android Wear.
Herramientas Lint para detectar problemas de rendimiento, usabilidad,
compatibilidad de versiones, y otros problemas.
Refactorizacin especifica de Android y arreglos rpidos.
Plantillas para crear diseos comunes de Android y otros componentes.

El entorno de desarrollo est preparado para crear cualquier tipo de aplicacin en


Android, entre ellos podemos tener para televisor, telfonos, reloj, google glass y/o
Google Claud. Como podemos apreciar en el siguiente grfico:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 20

Figura 5: Soporte a aplicaciones por android studio

1.2.2 Creando la primera aplicacin Hola Mundo.

Ingresar a Android Studio y luego dar clic en el men File/New Proyect

Application Name: Semana 01 Controles


Company Domain: SolucionesMoviles
Proyect Location: C:\AppsMoviles_5toCiclo

Dar click en Next


Seleccionar el API y el dispositivo donde se ejecutar de la aplicacin:
Seleccionar la plantilla para las pantallas inicialmente vamos a seleccionar un diseo en blanco.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 21

Dar click en next

En la siguiente pantalla se debe considerar la siguiente informacin:


Activity Name: Nombre de clase que se relaciona a la pantalla (layout)
Layout Name: Nombre de diseo de pantalla
Title: ttulo de la pantalla el que aparece cuando se ejecuta la aplicacin
Men Resource Name: el nombre de archivo xml de men asociado al layout.

Dar click en finalizar para completar el asistente.


El proyecto que se crea

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 22

Donde
A: Archivos del proyecto
B: Diseo de pantalla en XML
C: Vistas de Text (XML) y Design (Diseo).

Visa de diseo de pantalla


En esta vista se puede apreciar el desarrollo de la aplicacin en Android donde cada rectngulo
es una seccin de apoyo de diseo de la aplicacin.

Dnde:
A: Cuadro de controles
B: Diseo de pantalla (Layout)
C: Vista esquema de controles
D: Vista propiedades de controles.

Hasta aqu nos quedamos con el ejercicio de crear la primera aplicacin en Android
Studio (Semana 01 Controles), a continuacin vamos a revisar los principales

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 23

controles y sus propiedades para completar el desarrollo de nuestra primera


aplicacin.

1.2.3 Controles bsicos Burton, Edites, TextView

Los controles ms bsicos que tenemos en Android son sin duda Burton, Edites y
textview los cuales nos permitirn crear una aplicacin bsica como por ejemplo un
login o un mantenimiento de datos. En esta primera parte vamos a revisar en forma
preliminar los controles bsicos que muestran lo siguiente:

Figura 6: Controles Android


Fuente.- Tomado de http://developer.android.com/guide/topics/ui/controls.html

TextView.- es un control etiqueta que permite mostrar textos de solo lectura en


la pantalla.
Para ms detalles de los atributos y/o mtodos puedes visitar la pgina oficial
de Android ingresando a:
http://developer.android.com/reference/android/widget/TextView.html

Definir el control por cdigo XML

Edites.- es un control que permite ingresar datos est sujeto a aplicarle estilos
(Patrones) para mejorar el uso del mismo.

Para ms detalles de los atributos y/o mtodos puedes visitar la pgina oficial
de Android ingresando a:
http://developer.android.com/reference/android/widget/EditText.html

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 24

Definir el control por cdigo XML

Burton.- Botones de accin permite involucrar eventos comunes como click


con el fin de que el usuario pueda realizar una tarea.

Definir el control por cdigo XML

Para ms detalles de los atributos y/o mtodos puedes visitar la pgina oficial
de Android ingresando a:
http://developer.android.com/reference/android/widget/Button.html

Diseo de pantalla login


Para continuar con el ejercicio desarrollado anteriormente realizar los siguiente

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 25

Agregar los siguientes controles

1
1
2
2
2

Se debe agregar en el siguiente orden


1. Primero borrar todos los controles
existentes
2. Agregar el layout LinnerLayout
(Vertical)
3. Agregar 1 large text
4. Agregar un Plain TextView (Plain
TextView)
5. Agregar el control EditText (Plain
Text)
6. Hacer el mismo procedimiento para
los dos controles
7. Posterior a ellos agregar los controles
Botones de comando.

Para cambiar las propiedades dar doble


click en el control.

Donde Text es el texto a mostrarse e id es


el nombre del control que se utilizara en
el cdigo.

Finalmente el diseo de los controles quedar como se muestra:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 26

En la vista texto (cdigo XML) quedar como se muestra:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
Android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<LinearLayout

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 27

Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_alignParentTop="true"
Android:layout_alignParentStart="true">

<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textAppearance="?android:attr/textAppearanceLarge"
Android:text="Control de acceso"
android:id="@+id/textView" />

<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Usuario"
android:id="@+id/textView2" />

<EditText
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:ems="10"
android:id="@+id/edtusuario" />

<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Contrasea"
android:id="@+id/textView3" />

<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 28

android:id="@+id/edtcontrasenia" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Aceptar"
android:id="@+id/BtnAceptar" />

<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancelar"
android:id="@+id/btnCancelar" />

</LinearLayout>
</RelativeLayout>

Finalmente al ejecutar la aplicacin se muestra lo siguiente:

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 29

1.4.5 Depuracin de cdigo en Android.

La depuracin es una facilidad del IDE de Android Studio con el objetivo de hacer
seguimiento al cdigo fuente y verificar algn error no esperado, limpiar el programa,
etc. Segn Wikipedia la definicin de depuracin de programas es el proceso de
identificar y corregir errores de programacin. En ingls se le conoce como debugging,
es que se asemeja a la eliminacin de bichos (bugs), manera en que se conoce
informalmente a los errores de programacin. Se dice que el trmino bug proviene de
la poca de los ordenadores de vlvula termoinica, en los cuales los problemas se
generaban por los insectos que eran atrados por las luces y estropeaban el equipo.

Ejecutar en modo depuracin:

Agregar punto de interrupcin para comenzar a ejecutar paso a paso

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 30

Men con todas las opciones de depuracin.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 31

Resumen
1. El sistema operativo Android est basado en el ncleo del sistema operativo
Android 2.6 y su creador es Andy Ruby.

2. Android es uno de los mejores sistemas operativos para dispositivos mviles por
excelencia.

3. Las caractersticas del dispositivo mvil son basados en estndares abiertos.

4. La Open Handset Alliance es una estrategia comercial de apoyo mutuo para


mejorar la plataforma de estndares abiertos del sistema operativo mvil Android.

5. Android Studio es la herramienta ms sofisticada para crear aplicaciones basadas


en Android.

6. La depuracin busca ubicar errores en el cdigo de nuestra aplicacin y es una


facilidad del IDE con el fin de corregir errores de cdigo o limpiar el programa.

Puede revisar los siguientes enlaces para ampliar los conceptos vistos en esta unidad:

o Recursos y documentacin de la librera Android:


https://developer.android.com/index.html

o Introduccin a la plataforma Android:


http://www.ibm.com/developerworks/ssa/library/os-android-
devel/#resources

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 32

UNIDAD

2
ANDROID: COMPONENTES
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno elabora aplicaciones que integran Activities,
componentes visuales, Intents y recursos externos pertenecientes a la plataforma
Android.

TEMARIO

2.1 Fundamentos de aplicaciones Android


2.1.1 Arquitectura de la plataforma Android.
2.1.2 Estructura de un proyecto Android. Archivos bsicos, recursos, iconos.
2.1.3 Ciclo de vida de un Activity.
2.1.4 Componente Activity: definicin y caractersticas.
2.1.5 Uso de recursos, acceso a String.XML.
2.1.6 Configuracin del archivo de manifiesto.

2.2 Componente de una pantalla: Views y ViewGroups


2.2.1 Componente de una pantalla: Views y ViewGroups.
2.2.2 Distribucin de los ViewGroups: LinearLayout, AbsoluteLayout,
TableLayout, Relative Layout, FrameLayout y ScrollView.
2.2.3 Controles ImageView, ImageButton, Spinner, Checkbox, ProgressBar.

2.3 Componente Intent: definicin y caractersticas


2.3.1 Uso de Intents para gestionar Actividades.
2.3.2 Resolviendo colisin de Intent Filter.
2.3.3 Invocacin a otras aplicaciones usando Intents.
2.3.4 Uso del PendingIntent y notificaciones.

2.4 Orientacin del dispositivo


2.4.1 Adaptacin de la interface de usuario a la orientacin del dispositivo.
2.4.2 Manejar cambios en la orientacin del dispositivo.
2.4.3 Diseo de interface de usuario con Views avanzados: ListView.

2.5 Dilogos y notificaciones


2.5.1 Dialog Window y Progress Dialog.
2.5.2 Dilogos personalizados basados en clases.
2.5.3 Toast, formatos, uso de estilos.
2.5.4 Mens, fuentes.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 33

ACTIVIDADES PROPUESTAS

Los alumnos identifican la arquitectura de las aplicaciones en Android.


Los alumnos identifican y usan los distintos diseos de pantalla.
Los alumnos identifican los principales controles a utilizar para desarrollar una
aplicacin bsica.
Los alumnos identifica y manejan el ciclo de vida de las activitys.
Los alumnos identifican y hacen uso de los controles bsicos.
Los alumnos programan los eventos de botones de comando en una aplicacin
Android.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 34

2.1. FUNDAMENTOS DE APLICACIONES ANDROID


Cuando creamos una aplicacin para Android la estructura del proyecto es muy similar
a cualquier proyecto creado en la plataforma java, ya que el lenguaje es Java, para los
que conocen C#.Net, java, VB.net ser muy sencillo familiarizarse con la plataforma
para ello primero vamos analizar la estructura de un proyecto en Android Studio.

2.1.1. Plataforma Android


La plataforma Android es la ms utilizada en la actualidad, por ello es muy importante
estar de acorde con los avances de la tecnologa, el ao que paso se consider uno
de los aos en el que la plataforma Android se consagro en el mercado como uno de
los sistemas operativos ms revolucionarios del mercado por ello en esta seccin
vamos a hacer un comparativo con los competidores ms cercanos como son iPhone
de Apple y Windows pone de Microsoft. El siguiente grafico presenta

Figura 9: Lista de plataformas moviles en competencia segn Garnert


Fuente.- Tomado de http://www.androidcurso.com/index.php/

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 35

Por otro lado es importante dentro de la comparacin revisar la cuota de


mercado de cada una de las plataformas en el ao 2014. Podemos destacar la
desaparicin de la plataforma Symbian de Nokia, el declive continuo de
BlackBerry, el estancamiento de la plataforma de Windows, que parece que no
despega, y el afianzamiento de la cuota de mercado de Apple en torno al 20%.
Finalmente, cabe sealar el espectacular ascenso de la plataforma Android,
que en cinco aos ha alcanzado una cuota de mercado en torno al 85%

Figura 10: cuota de mercado de las plataformas movile segn Garnert


Fuente.- Tomado de http://www.androidcurso.com/index.php/

2.1.2. Estructura de un proyecto en Android

Cuando creamos un proyecto en Android Studio se presenta tal como se muestra en la


figura 11, en la parte izquierda, podemos observar todos los elementos creados
inicialmente para el nuevo proyecto Android,
sin embargo por defecto lo vemos
agrupados en idea, app, gradle. Para
entender mejor la estructura del proyecto
vamos a cambiar momentneamente la
forma en la que Android Studio nos la
muestra. Para ello, pulsaremos sobre la lista
desplegable situada en la parte superior
izquierda, y cambiaremos la vista de

Figura 11: Estructura de un proyecto en android

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 36

proyecto a Project.

Figura 12: Vista proyecto

Al cambiar la vista, los mismos archivos se presentan de otra manera como se


observa en la siguiente figura:

En los siguientes contenidos se describir


los elementos principales de esta estructura.

Lo primero que debemos distinguir son los


conceptos de proyecto y mdulo. La entidad
proyecto es nica, y engloba a todos los
dems elementos. Dentro de un proyecto
podemos incluir varios mdulos, que pueden
representar aplicaciones distintas, versiones
diferentes de una misma aplicacin, o
distintos componentes de un sistema
(aplicacin mvil, aplicacin servidor, libreras). En la mayora de los casos,
trabajaremos con un proyecto que contendr un slo mdulo correspondiente a
nuestra aplicacin principal. Por ejemplo en este caso que estamos creando tenemos
el proyecto AppsMoviles_5toCiclo que contiene al mdulo app que contendr todo
el software de la aplicacin de ejemplo.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 37

Figura 14: Vista proyecto/Modulo

A continuacin describiremos los contenidos principales de nuestro mdulo principal.

Carpeta /app/src/main/java
Esta carpeta contendr todo el cdigo fuente de la aplicacin, clases auxiliares, etc.
Inicialmente, Android Studio crear por nosotros el cdigo bsico de la pantalla
(actividad o activity) principal de la aplicacin, que recordemos que en nuestro caso
era MainActivity, y siempre bajo la estructura del paquete java definido durante la
creacin del proyecto.

Figura 15: Vista proyecto/Clases

Carpeta /app/src/main/res/
Contiene todos los ficheros de recursos necesarios para el proyecto: imgenes,
layouts, cadenas de texto, etc. Los diferentes tipos de recursos se pueden distribuir
entre las siguientes subcarpetas:

No todas estas carpetas tienen por qu aparecer en cada proyecto Android, tan slo
las que se necesiten. Iremos viendo durante el curso qu tipo de elementos se pueden
incluir en cada una de ellas y cmo se utilizan.

Como ejemplo, para un proyecto nuevo Android como el que hemos creado,
tendremos por defecto los siguientes recursos para la aplicacin:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 38

Carpeta Descripcin
Contiene las imgenes [y otros elementos grficos] usados en por la
aplicacin. Para poder definir 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)
/res/drawable/ /drawable-ldpi (densidad baja)
/drawable-mdpi (densidad media)
/drawable-hdpi (densidad alta)
/drawable-xhdpi (densidad muy alta)
/drawable-xxhdpi (densidad muy muy alta :)
Contiene los ficheros de definicin XML de las diferentes pantallas de la
interfaz grfica. Para definir distintos layouts dependiendo de la orientacin
/res/layout/ del dispositivo se puede dividir tambin en subcarpetas:
/layout (vertical)
/layout-land (horizontal)
/res/anim/
Contienen la definicin de las animaciones utilizadas por la aplicacin.
/res/animator/
/res/color/ Contiene ficheros XML de definicin de colores segn estado.
/res/menu/ Contiene la definicin XML de los mens de la aplicacin.
/res/xml/ Contiene otros ficheros XML de datos utilizados por la aplicacin.
Contiene recursos adicionales, normalmente en formato distinto a XML,
/res/raw/
que no se incluyan en el resto de carpetas de recursos.
Contiene otros ficheros XML de recursos de la aplicacin, como por
/res/values/ ejemplo cadenas de texto (strings.xml), estilos (styles.xml), colores
(colors.xml), arrays de valores (arrays.xml), tamaos (dimens.xml), etc.

Figura 16: Vista proyecto/Recursos

Como se puede observar, existen algunas carpetas en cuyo nombre se incluye un


sufijo adicional, como por ejemplo values-w820dp. Estos, y otros sufijos, se emplean
para definir recursos independientes para determinados dispositivos segn sus
caractersticas. De esta forma, por ejemplo, los recursos incluidos en la carpeta

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 39

values-w820dp se aplicaran slo a pantallas con ms de 820dp de ancho, o los


incluidos en una carpeta llamada values-v11 se aplicaran tan slo a dispositivos
cuya versin de Android sea la 3.0 (API 11) o superior. Al igual que los sufijos -w y
v existen otros muchos. Para referirse a otras caractersticas del terminal, puede
consultarse la lista completa en la siguiente url:
http://developer.android.com/guide/topics/resources/providing-resources.html

Otro de los recursos creados por defecto cabe destacar los layouts, en nuestro caso
slo tendremos por ahora el llamado activity_main.xml, que contiene la definicin de
la interfaz grfica de la pantalla principal de la aplicacin. Si hacemos doble clic sobre
este fichero Android Studio nos mostrar esta interfaz en su editor grfico, y como
podremos comprobar, en principio contiene los controles que agregamos en el primer
ejercicio:

Figura 17: Vista Previa de la aplicacin

Pulsando sobre las pestaas inferiores Design y Text podremos alternar entre el
editor grfico (tipo arrastrar-y-soltar), mostrado en la imagen anterior, y el editor
XML que se muestra en la imagen siguiente:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 40

Figura 18: Vista cdigo fuente

Durante el curso utilizaremos ambos casos, el ms efectivo es va cdigo XML, ya que


a veces el diseador puede tener complicaciones o demorar dependiendo de la
complejidad del diseo de pantalla.

Fichero /app/src/main/AndroidManifest.xml

Contiene la definicin en XML de muchos de los aspectos principales de la aplicacin,


como por ejemplo su identificacin (nombre, cono, etc.), sus componentes (pantallas,
servicios, etc.), o los permisos necesarios para su ejecucin. Veremos ms adelante
ms detalles de este fichero. En el caso de nuestra aplicacin creada se tiene el
siguiente cdigo en el archivo manifiesto.

Figura 19: Vista cdigo XML archivo manifiesto

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 41

Fichero /app/build.gradle
Contiene informacin necesaria para la compilacin del proyecto, por ejemplo la
versin del SDK de Android utilizada para compilar, la mnima versin de Android que
soportar la aplicacin, referencias a las libreras externas utilizadas, etc. Ms
adelante veremos tambin ms detalles de este fichero.

En un proyecto pueden existir varios ficheros build.gradle, para definir determinados


parmetros a distintos niveles. Por ejemplo, en nuestro proyecto podemos ver que
existe un fichero build.gradle a nivel de proyecto, y otro a nivel de mdulo dentro de la
carpeta /app. El primero de ellos definir parmetros globales a todos los mdulos del
proyecto, y el segundo slo tendr efecto para el mdulo correspondiente.

Carpeta /app/libs
Puede contener las libreras Java externas (ficheros .jar) que utilice nuestra aplicacin.
Normalmente haremos referencia a dichas libreras en el fichero build.gradle descrito
en el punto anterior, de forma que entren en el proceso de compilacin de nuestra
aplicacin. Veremos algn ejemplo ms adelante.

Carpeta /app/build/
Contiene una serie de elementos de cdigo generados automticamente al compilar el
proyecto. Cada vez que compilamos nuestro proyecto, la maquinaria de compilacin
de Android genera por nosotros una serie de ficheros fuente Java dirigidos, entre otras
muchas cosas, al control de los recursos de la aplicacin.Importante: dado que estos
ficheros se generan automticamente tras cada compilacin del proyecto es
importante que no se modifiquen manualmente bajo ninguna circunstancia.

Figura 20: Vista depuracin

A destacar sobre todo el fichero que aparece desplegado en la imagen anterior,


llamado R.java, donde se define la clase R. Esta clase R contendr en todo momento
una serie de constantes con los identificadores (ID) de todos los recursos de la
aplicacin incluidos en la carpeta /app/src/main/res/, de forma que podamos acceder
fcilmente a estos recursos desde nuestro cdigo a travs de dicho dato. As, por

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 42

ejemplo, la constante R.layout.activity_main contendr el ID del layout


activity_main.xml contenido en la carpeta /app/src/main/res/layout/.

Vista Android
El siguiente grfico presenta un proyecto creado en Android Studio en la vista Android

Figura 21: Vista Android


Donde
A: Archivo de manifiesto archivo xml de configuracin de aplicaciones.

B: Activity, Clase que se asocia con el diseo


de pantalla (layout)

C: Clase de prueba que permite hacer


pruebas unitarias.

D: Imgenes (iconos) de diferentes tamaos


que se utilizar para cuando la aplicacin se
ejecute en un celular, Tablet, televisor etc. se
cambia de imagen segn el tamao de la
pantalla.

E: layout, Pantalla (s) que se tiene en el


proyecto, todos los diseos de pantalla estn
basado en XML.

F: Archivo xml con el cual se configura el


men para el diseo de pantalla principal.

G: Archivo de recursos que almacena cadenas


de arreglo, como puede ser el caso de pases,
estado civil, sexo, etc.
String.XMl almacena las variables o valores de
las propiedades de los controles que se
utilizan para disear la aplicacin.

H: Archivos de estilos, permite disear estilos


que pueden ser utilizados de manera muy
similar a una hoja de estilos en una pgina web. Figura 22: Vista Archivos de proyecto

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 43

Qu es un Gradle?

Con el lanzamiento de Android Studio, tambin apareci un nuevo concepto llamado


Gradle que da Excelentes mejoras para hacer que el desarrollo de una aplicacin en
Android sea ms rpido. Gradle es un sistema de construccin avanzado, as como un
set de herramientas de construccin avanzada que permite la creacin de una lgica
de construccin personalizada a travs de plugins.

Estas son algunas de sus caractersticas que hicieron elegir Gradle al equipo de
Android:

Buena estampacin de la API permitiendo integracin con el IDE.


Lenguaje especfico del Dominio (DSL) para describir y manipular la lgica de
construccin.
Muy flexible. Permite utilizar mejores prcticas pero no fuerza su propia manera
de hacer las cosas.
Incorpora gestor de dependencias a travs de Maven y/o Ivy.
Los Plugins pueden exponer su propio DSL y su propia API para crear archivos
para su uso.
Construye archivos basados en Groovy y permite la mezcla de elementos
declarativos a travs de la DSL y la utilizacin de cdigo para manipular los
elementos de la DSL para proporcionar lgica personalizada.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 44

2.6 Componente de una pantalla: Views y ViewGroups

Componente de una pantalla: Views y ViewGroups


La interfaz de usuario se define en un archivo XML que se almacena en la carpeta
res/layout, cada una de las pantallas, se crea por cdigo XML y estndares XML.
Tambin es posible disear una pantalla usando cdigo Java, sin embargo puede
resultar complejo y poco eficiente, por ello el IDE Android Studio facilita el diseo de
pantallas, cada uno representando a un "subclase" especfica de view. Se pueden
crear pantallas de la misma manera que se disean pginas HTML.

Cada archivo describe un layout (una pantalla) y cada layout a su vez puede contener
otros elementos (vistas o controles). Para gestionar la interfaz de usuario, Android
introduce los siguientes trminos:

View
Una view es un objeto cuya clase es android.view.View. Es una estructura de datos
cuyas propiedades contienen los datos de la capa, la informacin especfica del rea
rectangular de la pantalla y permite establecer el layout. Una view tiene: layout,
drawing, focus change, scrolling, etc.

La clase view es til como clase base para los widgets, que son unas subclases ya
implementadas que dibujan los elementos en la pantalla. Los widgets contienen sus
propias medidas, pero puedes usarlas para construir tu interfaz ms rpidamente. La
lista de widgets que puedes utilizar incluye Text, EditText, InputMethod,
MovementMethod, Button, RadioButton, CheckBox, y ScrollView.

Viewgroups
Un viewgroup es un objeto de la clase android.view.Viewgroup, como su propio
nombre indica, un viewgroup es un objeto especial de view cuya funcin es contener y
controlar la lista de views y de otros viewgroups. Los viewgroups te permiten aadir
estructuras a la interfaz y acumular complejos elementos en la pantalla que son
diseccionados por una sola entidad.

La clase viewgroup es til como base de la clase layouts, que son subclases
implementadas que proveen los tipos ms comunes de los layouts de pantalla. Los
layouts proporcionan una manera de construir una estructura para una lista de views.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 45

rbol estructurado de la interfaz UI


En la plataforma Android t defines una Activity del UI usando un rbol de nodos view
y viewgroups, como vemos en la imagen de abajo. El rbol puede ser tan simple o
complejo como necesites hacerlo, y se puede desarrollar usando los widgets y layouts
que Android proporciona o creando tus propios views.

Figura 23: Jerarqua visual de Android


Fuente: http://www.gitsinformatica.com/android.html

Los views y viewgroups deben estar contenidos en los layouts, los cuales contienen
otros elementos presentes en una vista. Dentro de cada layout podemos poner todos
los elementos necesarios, incluidos otros layouts. As conseguiremos estructurar la
pantalla de la manera deseada. Existen una gran variedad de layouts, en funcin de su
posicionamiento en la pantalla y se describen a continuacin algunos de ellos:

Distribucin de los ViewGroups


Los layouts son elementos no visuales destinados a controlar la distribucin, posicin y
dimensiones de los controles que se insertan en su interior. Estos componentes
extienden a la clase base ViewGroup, como muchos otros componentes
contenedores, es decir, capaces de contener a otros controles. En el post anterior
conocimos la existencia de un tipo concreto de layout, LinearLayout, aunque Android
nos proporciona algunos otros.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 46

FrameLayout

ste es el ms simple de todos los layouts de Android. Un FrameLayout coloca todos


sus controles hijos alineados con su esquina superior izquierda, de forma que cada
control quedar oculto por el control siguiente (a menos que ste ltimo tenga
transparencia). Por ello, suele utilizarse para mostrar un nico control en su interior, a
modo de contenedor (placeholder) sencillo para un slo elemento sustituible, por
ejemplo una imagen.

Los componentes incluidos en un FrameLayout podrn establecer sus propiedades


Android: layout_width y android:layout_height, que podrn tomar los valores
fill_parent (para que el control hijo tome la dimensin de su layout contenedor) o
wrap_content (para que el control hijo tome la dimensin de su contenido).

Ejemplo:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText android:id="@+id/TxtNombre"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>

LinearLayout
El siguiente layout Android en cuanto a nivel de complejidad es el LinearLayout. Este
layout apila unos tras otros todos sus elementos hijos de forma horizontal o vertical
segn se establezca su propiedad Android: orientation. Al igual que en un
FrameLayout, los elementos contenidos en un LinearLayout pueden establecer sus
propiedades Android: layout_width y android:layout_height para determinar sus
dimensiones dentro del layout. Pero en el caso de un LinearLayout, tendremos otro
parmetro con el que jugar, la propiedad android:layout_weight.

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/Android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<EditText android:id="@+id/TxtNombre"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<Button android:id="@+id/BtnAceptar"
android:layout_width="wrap_content"
android:layout_height="fill_parent" />
</LinearLayout>

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 47

Esta propiedad nos va a permitir dar a los elementos contenidos en el layout unas
dimensiones proporcionales entre ellas. Esto es ms difcil de explicar que de
comprender con un ejemplo. Si incluimos en un LinearLayout vertical dos cuadros de
texto (EditText) y a uno de ellos le establecemos un layout_weight=1 y al otro un
layout_weight=2 conseguiremos como efecto que toda la superficie del layout quede
ocupada por los dos cuadros de texto y que adems el segundo sea el doble (relacin
entre sus propiedades weight) de alto que el primero.

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<EditText android:id="@+id/TxtDato1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
<EditText android:id="@+id/TxtDato2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="2" />
</LinearLayout>

A pesar de la simplicidad aparente de este layout resulta ser lo suficiente verstil como
para sernos de utilidad en muchas ocasiones.

TableLayout
Un TableLayout permite distribuir sus elementos hijos de forma tabular, definiendo las
filas y columnas necesarias, y la posicin de cada componente dentro de la tabla.
La estructura de la tabla se define de forma similar a como se hace en HTML, es decir,
indicando las filas que compondrn la tabla (objetos TableRow), y dentro de cada fila
las columnas necesarias, con la salvedad de que no existe ningn objeto especial para
definir una columna (algo as como un TableColumn) sino que directamente
insertaremos los controles necesarios dentro del TableRow y cada componente
insertado (que puede ser un control sencillo o incluso otro ViewGroup) corresponder
a una columna de la tabla. De esta forma, el nmero final de filas de la tabla se
corresponder con el nmero de elementos TableRowinsertados, y el nmero total de
columnas quedar determinado por el nmero de componentes de la fila que ms
componentes contenga.
Por norma general, el ancho de cada columna se corresponder con el ancho del
mayor componente de dicha columna, pero existen una serie de propiedades que nos
ayudarn a modificar este comportamiento:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 48

android:stretchColumns. Indicar las columnas que pueden expandir para


absorber el espacio libre dejado por las dems columnas a la derecha de la
pantalla.
android:shrinkColumns. Indicar las columnas que se pueden contraer para
dejar espacio al resto de columnas que se puedan salir por la derecha de la
pantalla.
android:collapseColumns. Indicar las columnas de la tabla que se quieren
ocultar completamente.

Todas estas propiedades del TableLayout pueden recibir una lista de ndices de
columnas separados por comas (ejemplo: android:stretchColumns=1,2,3) o un
asterisco para indicar que debe aplicar a todas las columnas (ejemplo:
android:stretchColumns=*).

Otra caracterstica importante es la posibilidad de que una celda determinada pueda


ocupar el espacio de varias columnas de la tabla (anlogo al atributo colspan de
HTML). Esto se indicar mediante la propiedad android:layout_span del componente
concreto que deber tomar dicho espacio.
Veamos un ejemplo con varios de estos elementos:

<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1" >
<TableRow>
<TextView android:text="Celda 1.1" />
<TextView android:text="Celda 1.2" />
</TableRow>
<TableRow>
<TextView android:text="Celda 2.1" />
<TextView android:text="Celda 2.2" />
</TableRow>
<TableRow>
<TextView android:text="Celda 3"
android:layout_span="2" />
</TableRow>
</TableLayout>

RelativeLayout
El ltimo tipo de layout que vamos a ver es el RelativeLayout. Este layout permite
especificar la posicin de cada elemento de forma relativa a su elemento padre o a
cualquier otro elemento incluido en el propio layout. De esta forma, al incluir un nuevo

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 49

elemento X podremos indicar por ejemplo que debe colocarse debajo del elemento Y,
y alineado a la derecha del layout padre. Veamos esto en el ejemplo siguiente:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<EditText android:id="@+id/TxtNombre"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button android:id="@+id/BtnAceptar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/TxtNombre"
android:layout_alignParentRight="true" />
</RelativeLayout>

En el ejemplo, el botn Btn Aceptar se colocar debajo del cuadro de texto TxtNombre
(android:layout_below=@id/TxtNombre) y alineado a la derecha del layout padre
(android:layout_alignParentRight=true), adems de dejar un margen a su izquierda
de 10 pixeles (android:layout_marginLeft=10px).
Al igual que estas tres propiedades, en un RelativeLayout tendremos un sinfn de
propiedades para colocar cada control justo donde queramos. Veamos las principales
[creo que sus propios nombres explican perfectamente la funcin de cada una]:
Posicin relativa a otro control:

android:layout_above.
android:layout_below.
android:layout_toLeftOf.
android:layout_toRightOf.
android:layout_alignLeft.
android:layout_alignRight.
android:layout_alignTop.
android:layout_alignBottom.
android:layout_alignBaseline.
Posicin relativa al layout padre:
android:layout_alignParentLeft.
android:layout_alignParentRight.
android:layout_alignParentTop.
android:layout_alignParentBottom.
android:layout_centerHorizontal.
android:layout_centerVertical.
android:layout_centerInParent.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 50

Opciones de margen (tambin disponibles para el resto de layouts):


android:layout_margin.
android:layout_marginBottom.
android:layout_marginTop.
android:layout_marginLeft.
android:layout_marginRight.
Opciones de espaciado o padding (tambin disponibles para el resto de
layouts):
android:padding.
android:paddingBottom.
android:paddingTop.
android:paddingLeft.
android:paddingRight.

Otros elementos comunes que extienden a ViewGroup, como por ejemplo las vistas de
tipo lista (ListView), de tipo grid (GridView), y en pestaas (TabHost/TabWidget).

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 51

Widgets
Un widget es el conjunto de componentes visuales que permite crear las aplicaciones
en Android. Entre dichos componentes tenemos Button, TextView, EditText y el
package donde se importa todos los controles, que es android.widget.

Figura 24: componentes widget en los celulares


Fuente: http://bitelia.com/2014/01/widgets-android

Botones (Button)

El SDK de Android nos proporciona tres tipos de botones: el Clsico (Button), el de


tipo on/off (ToggleButton), y el que puede contener una imagen (ImageButton). En la
imagen siguiente vemos el aspecto por defecto de estos tres controles:

Figura 25: Vista cuadro de herramientas Widgets

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 52

Propiedades

android:id
Esto ya lo vimos en el tema anterior, esta propiedad es el ID del control, con el que
podremos identificarlo de forma nica ms tarde en nuestro cdigo. Vemos que el
identificador lo escribimos precedido de @+id/. Esto tendr como efecto que al
compilarse el proyecto se genere automticamente una nueva constante en la clase R
para dicho control.

android:text.
Texto del control. En Android, el texto de un control se puede especificar directamente,
o bien utilizar alguna de las cadenas de texto definidas en los recursos del proyecto
(fichero strings.xml), en cuyo caso indicaremos su identificador precedido del prefijo
@string/.

android:layout_height y android:layout_width
Dimensiones del control con respecto al layout que lo contiene. Esta propiedad tomar
normalmente los valores wrap_content para indicar que las dimensiones del control
se ajustarn al contenido del mismo, o bien fill_parent para indicar que el ancho o el
alto del control se ajustarn al ancho o alto del layout contenedor respectivamente.

Unidades de medida para esta propiedad


px. Pxeles, corresponde a pxeles reales en la pantalla.
en.
Cm - basado en el tamao fsico de la pantalla.
mm. Milmetros - en funcin del tamao fsico de la pantalla.
pt. Puntos - 1/72 de una pulgada en funcin del tamao fsico de la pantalla.
sp. Escala de pxeles independientes - esto es como la unidad de DP, pero tambin es
escalado por la preferencia del usuario tamao de la fuente. Se recomienda utilizar
esta unidad al especificar tamaos de fuente, por lo que se ajusta tanto para la
densidad de pantalla y preferencias del usuario.

android:layout_margin
Este parmetro indica el espacio entre el control (en este caso botn) y su padre en
este caso el Layout.

android:padding

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 53

Este parmetro indica el espacio entre Texto o Imgenes que pongamos dentro del
control (en este caso el botn) y el propio control.

android:gravity
Esta es la gravedad del control, la verdad es que es una forma original de poner la
alineacin, si entre las comillas de este parmetro pulsamos la famosa combinacin de
teclas Control+Espacio, eclipse nos dar todos los parmetros que podemos usar
aqu, si ponemos solo "center" se centrara su contenido tanto vertical como horizontal.

android:drawable
Con este parmetro pondremos una imagen al botn, que no es lo mismo que el
ImageButton, que todo el botn es en s una imagen, con esto ponemos una especie
de icono dentro del botn, por ejemplo si queremos poner el tpico Play, Stop las
flechas de avance o retroceso... existen variantes de este parmetro para poner la
imagen a la derecha o izquierda, arriba o abajo.

android:Text
Con este parmetro definimos el texto del botn, podemos usar un recurso R usando
"@String/texto o directamente un texto entre comillas.

android:TextSize
Indicamos un tamao, si no ponemos esto, se selecciona un tamao por defecto
standard, si te parece grande o pequeo ve probando usando la unidad dp que vimos
en el tema anterior.

android:backgroud
Con este parmetro definimos el color de fondo del Botn.

android:OnClick
Esta es una propiedad que nos ayuda con el Listener, al final de la leccin hablo de
esto, que es la parte Java del Botn, esto nos facilita la vida, lo malo es que solo se
puede utilizar a partir de la API 6 de Android, no creo que vayas a hacer un proyecto
con esta API yo uso esta opcin, es menos lioso.

Ejemplo de definicin de botn de comando

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 54

Ejemplo de botn con estilo

Evento del botn de comando

EditText
EditText (caja de edicin de texto) es un cuadro de texto para ingresar datos en
Android este control tiene patrones definidos para permitir el ingreso de informacin
correcta segn el tipo de ingreso definido.

android:hint. Con este parmetro pondremos un texto por defecto mientras el campo
este vaco, es decir, l lo que ve el usuario antes de que el escriba nada.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 55

android:inputType. Con este parmetro indicamos el tipo de teclado que quieres que
aparezca cuando pulsas sobre el campo, si por ejemplo solo vamos a introducir
nmeros, se puede indicar que aparezca un teclado numrico. Como siempre cuando
te coloques entre las comillas pulsa Control+Espacio para ver las opciones que
puedes poner para este parmetro.

Control Usuario EditText

Ejemplo de acceso a las propiedades por cdigo

Componente Activity e Intent: definicin y caractersticas

Actitivity (Actividad)

Un Activity (actividad) es una clase que permite manejar los eventos de cualquier
aplicacin desarrollada en Android, est diseada para controlar toda la funcionalidad
de cualquier aplicacin, Podemos decir que todas las pantallas de una aplicacin son
una activity. Ms adelante vamos a ver que existen algunas variaciones, por ejemplo,
que si una aplicacin tiene cinco pantallas, tiene 5 Actividades o activities.
Las activities estn conformadas por dos partes: la parte lgica y la parte grfica. La
parte lgica es una archivo .java que es la clase que se crea para poder manipular,
interactuar y colocar el cdigo de esa actividad. Toda actividad debe tener asociado
una pantalla La parte grfica es un XML que tiene todos los elementos que estamos
viendo de una pantalla declarados con etiquetas parecidas a las del HTML, es decir,

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 56

que el diseo de una aplicacin en Android se hace similar a una pgina web; XML es
un primo de HTML.
Resumiendo, una actividad est conformada por la parte lgica (un archivo Java) y la
parte grfica (un archivo XML). Profundizando ms en el tema, ya sabemos que
tenemos un archivo .java, esto quiere decir que tenemos una clase principal, al ser una
actividad extiende de la clase Activity (por eso el nombre) que nos proporciona Android
para crear actividades con sus mtodos asignados.

Un ejemplo de nuestro activity "MaActivity.java" podemos apreciar el cdigo:

Primero veremos que existen dos secciones de cdigo:


El primero es el paquete de nuestra aplicacin
Y posterior a ello las importaciones

La actividad de se extiende desde la clase base Activity

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 57

El mtodo onCreate es el mtodo que se ejecuta primero al iniciar cualquier activity en


este caso este mtodo es similar el mtodo main y se enlaza con el layout (diseo de
pantalla) mediante el Cdigo setContenView( R.layout.activity_Main);
Para enlazar controle se debe agregar cdigo despus de esta lnea.

Que es la que hace el trabajo de enlazar la parte lgica con la parte grfica. El archivo
XML que va a mostrarse cuando se mande a llamar la clase "MainActivity" es el
archivo XML llamado "activity_main".
Para cerrar la explicacin: si yo creo una actividad nueva y la llamo
"VentanaPrinicipal", debo hacer que herede de activity si quiero que funcione como
actividad y para decirle que el archivo XML que va a mostrar sea el
"ventanaprincipal.xml" o "pepito.xml". La lnea que dice "SetContentView" debe llevar
dentro algo parecido a esto: "setContentView"(R.layout.ventanaprincipal).
Ms adelante vamos a ver como agregar una actividad nueva, ya que adems de esto
necesitamos hacer otras cosas en el proyecto. Espero por ahora que quede claro el
trmino de Activity que vamos a estar utilizando.

Ciclo de vida de la clase Activity


La base de una aplicacin en Android son las Activity-s, en el sistema se ejecutan
como "tareas activity". Cuando es iniciada una nueva Activity se pone al inicio de la
pila de ejecucin y se convierte en la Activity en ejecucin. La Activity que estuviera
ejecutndose antes siempre estar por debajo en la pila y no volver a primer plano
mientras la nueva Activity exista.

En el siguiente diagrama vemos claramente cul es el ciclo de vida de este tipo de


clases.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 58

Figura 26: ciclo de vida del activity


Fuente.- Tomado de http://www.android-app-market.com/

Es muy importante tener en cuenta este diagrama ya que cuando estamos


desarrollando una aplicacin Android, todas las aplicaciones cumplen con este ciclo de
vida y dependiendo de la aplicacin debemos manejar estos ciclos de vida para
gestin nuestra aplicacin y los recursos que maneja. Por ejemplo cuando una
aplicacin cambia de orientacin de vertical a horizontal se inicia con el mtodo
onResume. A continuacin de describe cada uno de los eventos del ciclo de vida de
un activity

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 59

Evento Descripcin y/o funcionalidad Abortable Siguiente


Se ejecuta cuando se crea la Activity por
primera vez. Aqu es donde se deberan crear
onCreate() No onStart()
views, enlazar datos a listas, en definitiva el
proceso de inicializacin de nuestra aplicacin.
Se ejecuta despus de que la aplicacin se haya
onRestart() detenido, justo despus de que sea iniciada de No onStart()
nuevo.

Se ejecuta justo antes de que la aplicacin


aparezca visible para el usuario. Si la aplicacin
onResume()
es un proceso en background el siguiente
onStart() No o
estado es onStop(), si la aplicacin se ejecuta
onStop()
en foreground el siguiente mtodo es
onResume().

Se ejecuta cuando la Activity interacta con el


onResume( usuario. En ste punto la Activity est en la cima No onPause()
de la pila.
Se ejecuta cuando el sistema est a punto de
continuar una Activity anterior. Se utiliza
tpicamente para guardar datos que no se han onResume()
onPause() grabado anteriormente, parar animaciones y Si o
otras acciones que consuman CPU. Seguida por onStop()
onResume() si la actividad vuelve a primer plano
o onStop() si es invisible para el usuario.

Se ejecuta cuando la Activity deja de ser visible


al usuario, porque otra Activity ha continuado y
pasa a un lugar ms prioritario de la pila. Puede
ocurrir porque una nueva Activity ha sido onRestart()
onStop() creada, una Activity ya creada pasa a primer Si o
plano o sta est siendo destruida. El siguiente onDestroy()
mtodo ser onRestart() si la Activity vuelve a
interaccionar con el usuario o por onDestroy() si
la Activity ser destruida.

ltima llamada antes de destruir la Activity.


Puede ocurrir porque la actividad est acabando
(llamada a finish() ) , o porque el sistema
onDestroy() Si NADA
destruir la instancia para guardar espacio. Se
puede distinguir esos escenarios con el mtodo
isFinishing().

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 60

Introduccin a los Intents

Android usa los intent como mecanismo para invocar componentes, los intents son
bastante fciles de comprender. Bsicamente nos permiten llamar a aplicaciones
externas a la nuestra, lanzar eventos a los que otras aplicaciones puedan responder,
lanzar alarmas etc.

Ejemplo: Tenemos el siguiente activity creado


public class MiActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MiActivity);
}
}

El layout R.Layout.MainActivity debe estar declarado y ser un archivo de layout valido.


Una vez creado este archivo de layout, es necesario registrarlo en el AndroidManifest,
que ser algo as tal como lo vemos en la primera aplicacin que desarrollamos:

El registro de la activity se realiza de forma automtica, tal como tambin se registra


una accin que podremos usar para invocar a dicha actividad. El diseador de la
actividad puede asignar el nombre que crea conveniente a la accin. Ahora que ya
est todo listo, podemos lanzar un intent para llamar a esta actividad:

public static void LlamarActivity(Activity activity){

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 61

String actionName= "android.intent.action.MAIN";


Intent intent = new Intent(actionName);
activity.startActivity(intent);
}

La convencin que se usa para nombrar una accin suele


ser android.intent.action.MAIN
Una vez que se invoca a la actividad, sta tiene la posibilidad de recuperar el intent
que la llam. Y podemos recuperarlo del siguiente modo:

//Este cdigo se inserta en el mtodo onCreate() de la actividad.


Intent intent = this.getIntent();
if (intent == null){
Log.d("Tag", "La actividad no se ha llamado mediante un intent.")
}

Para ms detalles puedes ingresar al siguiente link: developer.android.com/guide/appendix/g-app-


intents.html

Funcionalidad y uso de Intents


Se puede encontrar una lista con las aplicaciones disponibles en Android junto con los
intents que las invocan. Por ejemplo, para el navegador web, tenemos dos
acciones, VIEW y WEB_SEARCH, que abren el navegador en una url especfica o
realizan una bsqueda.
En el caso del dialer (marcador), tenemos las acciones CALL y DIAL, que vienen
dadas por la URI tel: numero_de_telfono, la diferencia entre estas dos acciones, es
que CALL realiza la llamada al nmero de la URI, y DIAL solo lo marca, pero no realiza
la llamada.

Ejemplos de uso de Intent


Ejemplo para abrir en nevegador predeterminado en el celular.
public static void AbrirNavegador (Activity activity){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));
activity.startActivity(intent);
}

Abrir el buscador predeterminado en el celular.


public static void AbrirBuscador(Activity activity){
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.setData(Uri.parse("http://www.google.com"));

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 62

activity.startActivity(intent);
}
public static void AbrirVentanaLlamada(Activity activity){
Intent intent = new Intent(Intent.ACTION_DIAL);
activity.startActivity(intent);
}

public static RealizarLlamada call(Activity activity){


Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:555-555-555"));
activity.startActivity(intent);
}

public static void LlamargoogleMaps(Activity activity){


Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:0,0?z=4&q=restaurantes"));
activity.startActivity(intent);
}

Pasar datos entre activitys mediante Intent

Para ello se debe realizar de la siguiente manera:

Gestin de problemas de pantallas

El objetivo de soportar mltiples pantallas es crear una aplicacin que pueda funcionar
correctamente y se vea bien en cualquiera de las configuraciones de pantalla
generalizadas compatibles con Android. En las secciones anteriores de este
documento proporcionan informacin acerca de cmo Android se adapta a su
aplicacin a las configuraciones de pantalla y cmo se puede personalizar el aspecto

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 63

de su aplicacin en diferentes configuraciones de pantalla. Esta seccin proporciona


algunos consejos adicionales y una visin general de las tcnicas que ayudan a
asegurarse de que su aplicacin se escala correctamente para configuraciones de
pantalla diferentes.
Aqu est una lista rpida de cmo se puede asegurar que la aplicacin muestra
correctamente en pantallas diferentes:
1. Utilice wrap_content , fill_parent o unidades dp al especificar dimensiones en un
archivo de formato XML
2. No utilice los valores de pxeles en el cdigo
3. No utilice AbsoluteLayout (est en desuso)
4. Suministre drawables alternativos para densidades de pantalla diferentes
En las secciones siguientes se proporcionan ms detalles.

1. Use wrap_content, fill_parent, o la unidad de DP para dimensiones del diseo


Al definir el android:layout_width y Android:layout_height para vistas en un archivo de
formato XML, utilizando "wrap_content" , "fill_parent" o unidades dp se garantiza que a
la vista se le da un tamao apropiado en la pantalla del dispositivo actual.
Por ejemplo, una vista con un layout_width = "100dp" mide 100 pixeles de ancho en la
pantalla de densidad media y hasta 150 pxeles de ancho en la pantalla de alta
densidad, de modo que la vista ocupa aproximadamente el mismo espacio fsico en la
pantalla .
Del mismo modo, se debe preferir el sp (escala independiente de pxeles) para definir
tamaos de texto.

2. No utilice valores codificados de pxeles en el cdigo de aplicacin


Por cuestiones de rendimiento y mantener el cdigo ms simple, el sistema Android
utiliza pxeles como unidad estndar para expresar los valores de cota o
coordenada. Eso significa que las dimensiones de una vista se expresan siempre en el
cdigo mediante pxeles, pero siempre se basa en la densidad de pantalla actual. Por
ejemplo, si myView.getWidth() devuelve 10, la vista es 10 pxeles de ancho en la
pantalla actual, pero en un dispositivo con una pantalla de mayor densidad, el valor
devuelto puede ser 15. Si utiliza valores de los pxeles en el cdigo de aplicacin para
trabajar con mapas de bits que no estn pre-escalados para la densidad de pantalla
actual, puede que tenga que escalar los valores de los pxeles que se utilizan en el
cdigo para que coincida con la fuente de mapa de bits sin escala.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 64

Si su aplicacin manipula mapas de bits o se ocupa de los valores de pxel en tiempo


de ejecucin, consulte la siguiente seccin sobre Consideraciones adicionales de
densidad.

3. No utilice AbsoluteLayout
A diferencia de los widgets de otros diseos, AbsoluteLayout refuerza el uso de
posiciones fijas para exponer sus vistas, lo que pueden llevar fcilmente a que las
interfaces de usuario no funcionen bien en pantallas diferentes. Debido a
esto, AbsoluteLayout est desfasada y en Android 1.5 (Nivel API 3).
En su lugar, debe utilizar RelativeLayout , que utiliza posicionamiento relativo. Por
ejemplo, puede especificar que un widget de botn debe aparecer "a la derecha de" un
widget de texto.

4. Use el tamao y densidad de recursos especficos


Aunque el sistema de escalas de su diseo y recursos drawables basado en la
configuracin actual de la pantalla, es posible que desee realizar ajustes en la interfaz
de usuario en diferentes tamaos de pantalla y proporcionar drawables que estn
optimizados para diferentes densidades. Esto, en esencia reitera la informacin de
arriba en este documento.
Si necesita controlar exactamente cmo su aplicacin se ver en varias
configuraciones de pantalla, ajustar los diseos y drawables en directorios de recursos
de configuracin especficos. Por ejemplo, considere un icono que desea mostrar en
las pantallas de media y alta densidad. Slo tienes que crear tu icono en dos tamaos
diferentes (por ejemplo 100x100 de densidad media y 150x150 de alta densidad) y
poner las dos variaciones en los directorios adecuados, utilizando los calificadores
apropiados:
res/drawable-mdpi/icon.png //for medium-density screens
res/drawable-hdpi/icon.png //for high-density screens

Nota: Si un calificador de densidad no est definido en un nombre de directorio, el


sistema asume que los recursos en ese directorio estn diseados para la lnea de
base de densidad media y se escala para otras densidades, segn proceda.

Cmo probar la aplicacin en varias pantallas

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 65

Figura 17. Un conjunto de AVDS para probar pantallas de apoyo.

Antes de publicar su aplicacin, usted debe probarlo a fondo en todos los tamaos de
pantalla admitidos y densidades. El SDK de Android incluye un emulador que puede
utilizar, que replican los tamaos y densidades de configuraciones de pantalla
comunes en los que su aplicacin es probable que se ejecute. Tambin se puede
modificar el tamao predeterminado, la densidad y resolucin del emulador para
reproducir las caractersticas de cualquier pantalla especfica. El uso del emulador y
las configuraciones personalizadas adicionales le permite probar cualquier
configuracin de pantalla posible, por lo que no tiene que comprar varios dispositivos
slo para poner a prueba el soporte de su solicitud de pantalla.
Para configurar un entorno de prueba debe crear una serie de AVDS (Android Virtual
Devices), utilizando el emulador y configuraciones de pantalla que emulan los tamaos
de pantalla y densidades que desean. Para ello, puede utilizar el Administrador de
AVD para crear las AVDS y lanzarlos con una interfaz grfica.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 66

Orientacin del dispositivo

La funcionalidad de todo telfono con sistema operativo Android es que tiene la


capacidad de adaptarse tanto a la pantalla como a la orientacin que tiene el
dispositivo, vertical o horizontal, sin embargo en algunas ocasiones es necesario
mantener la orientacin como el caso de los juegos es necesario mantener la
orientacin en horizontal para aprovechar la capacidad de la pantalla.

Figura 27: configuracin de orientacin


Fuente: tomado desde http://es.wikihow.com/cambiar-la-orientaci%C3%B3n-de-la-pantalla-en-Android

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 67

La orientacin, se puede configurar dentro por medio de cdigo XML como se aprecia
en la siguiente imagen

Existe la posibilidad de evitar este comportamiento por defecto de Android frente a los
cambios dinmicos de configuracin, simplemente aadiendo en el Manifest a la
activity la opcin

android:configChanges="orientation|keyboardHidden"

Importante! Para que esta tcnica funcione si usamos para nuestra app un target
superior a Gingerbread (API 10) , solo funciona en las versiones superiores :

android:configChanges="orientation|keyboardHidden|screenSize"

Con esto estamos indicando que el cambio de configuracin lo gestionar


directamente la app, por lo que la Activity no se reinicia y se invoca el
mtodo onConfigurationChanged(Configuration newConfig) que deberemos
sobreeescribir para realizar todos los cambios que queramos al cambiarse la
orientacin del dispositivo. Obsrvese que siguiendo esta estrategia NO se cambia

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 68

automticamente el layout en el caso de que se hayan definido layout distintos, por lo


que si fuera necesario no quedara ms remedio que hacer estos cambios
programticamente.

Por medio de cdigo se puede realizar lo siguiente:

Para ms detalle ingresar al siguiente link:


http://developer.android.com/guide/topics/resources/runtime-changes.html

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 69

Dilogos Y Notificaciones

Nuestras aplicaciones siempre deben mostrar mensajes de alerta, procesamiento o


espera por algn proceso en ejecucin, por ellos debemos hacer uso de las
funcionalidades para emitir mensajes o solicitudes de confirmacin de nuestra
aplicacin.

Entre los mensajes ms comunes que tenemos tres tipos de notificaciones:


Notificaciones Toast.
Notificaciones en la barra de estado.
Ventanas de dilogo.

Notificaciones Toast

Una notificacin Toast es un mensaje emergente que se muestra superpuesto en la


pantalla. Solo ocupa el espacio necesario para mostrar la alerta, mientras tanto, la
actividad que estaba visible puede seguir usndose. Este tipo de notificaciones se
muestran durante un periodo de tiempo y desaparecen, no permiten interactuar con

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 70

ellas. Debido a que un Toast se crea mediante un servicio en segundo plano, puede
aparecer aunque la aplicacin no est visible.
A lo largo de todas las entradas sobre Android, se ha usado mucho este tipo de
notificaciones:

Sintaxis
Toast.makeText(context, text, duration).show();

Context: Para pasar el contexto, tenemos varias posibilidades, NombreActividad.this,


o getApplicationContext().

Text: cadena de texto a mostrar

Duration: es el tiempo de duracin puede asumir dos posibles valores tiempo corto o
largo, para ello podemos usar, una de las dos constantes
predefinidas, Toast.LENGTH_SHORT Toast.LENGTH_LONG en este caso, vamos a
crear un layout personalizado para mostrar el Toast:

< ?xml version="1.0" encoding="utf-8"?>


<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toastLayout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:background="#DAAA"
>

<imageview android:layout_width="48px"
android:layout_height="48px"
android:src="@drawable/ok"
android:padding="5dip"
android:id="@+id/ok"/>

<textview android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="Toast con layout personalizado"
android:textColor="#fff"
android:gravity="center_vertical|center_horizontal"/>
</linearlayout>

Se debe asignar un id al LinearLayout, que usaremos posteriormente. Tambin hemos


creado un ImageView para mostrar un icono, y un TextView para mostrar el mensaje.
El siguiente paso es inflar este layout desde el cdigo:

LayoutInflater inflater = getLayoutInflater();


View layout = inflater.inflate(

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 71

R.layout.toast_layout
,(ViewGroup) findViewById(R.id.toastLayout));

Toast toast = new Toast(getApplicationContext());


toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

Listo, al ejecutar la aplicacin tendremos un Toast como este:

Para saber ms acerca de los mensajes toast puede


visitar: http://developer.android.com/guide/topics/ui/notifiers/toasts.html

Notificaciones en la barra de estado

Este tipo de notificaciones muestran un icono en la barra de estado, cuando


desplegamos esta barra, veremos el icono acompaado de un texto descriptivo
indicando que ha pasado algo (Como que hemos recibido un nuevo mensaje, o un
correo electrnico).
Los pasos necesarios para crear este tipo de notificaciones son, usar el gestor de
notificaciones del sistema (NotificationManager) y posteriormente crear un objeto
Notification en el que configuraremos nuestra notificacin. Vamos a ver cmo hacerlo.

NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

//Agregando el icono, texto y momento para lanzar la notificacin


int icon = R.drawable.ok;

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 72

CharSequence tickerText = "Notification Bar";


long when = System.currentTimeMillis();

Notification notification = new Notification(icon, tickerText, when);

Context context = getApplicationContext();


CharSequence contentTitle = "Notificacin en barra";
CharSequence contentText = "Mensaje corto de la notificacin";

//Agregando sonido
notification.defaults |= Notification.DEFAULT_SOUND;
//Agregando vibracin
notification.defaults |= Notification.DEFAULT_VIBRATE;

Intent notificationIntent = new Intent(this, NotificacionesActivity.class);


PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

mNotificationManager.notify(HELLO_ID, notification);

El resultado es el siguiente:

Al igual que los Toast, se puede crear un layout personalizado, para ms informacin
visita:
http://developer.android.com/guide/topics/ui/notifiers/notifications.html

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 73

Dilogos
Los cuadros de dialogo personalizado permiten realizar operaciones como
confirmacin o ingresar algn dato en una ventana de dialogo existen varios tipos
entre ellos tenemos:

AlertDialog
ProgressDialog
DatePickerDialog
TimePickerDialog

Si necesitamos un Dilogo que no sea uno de los de arriba, podemos extender de la


clase Dialog, y crear el nuestro propio.
La clase Activity implementa mtodos para gestionar los dilogos, son:
onCreateDialog(int): Encargado de crear el dilogo.
onPrepareDialog(int): Llamado justo antes de mostrarlo.
showDialog(int): Para mostrarlo.
dismissDialog(int): cierra el dilogo, guardando su estado.
removeDialog(int): cierra el dialogo eliminndolo por completo.

Ejemplo de AlertDialog
Mostrar una ventana de dialogo que preguntar si queremos salir de la aplicacin
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setMessage("Salir?");
dialog.setCancelable(false);
dialog.setPositiveButton("Si", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
NotificacionesActivity.this.finish();
}
});
dialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
dialog.show();

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 74

Ejemplo es ProgressDialog
Cuadro de dialogo que nunca termina.
ProgressDialog.show(
NotificacionesActivity.this
,"ProgressDialog"
,"Ejemplo dilogo de progreso"
,true
,true);

Los dos ltimos parmetros son para que el dilogo


sea indeterminado, y para que se pueda cerrar con la
flecha de atrs del terminal.

Diseo dilogos
La clase principal que se usa para crear dilogos es la clase Dialog, pero no se
recomienda usar de manera directa dicha clase. Lo recomendable es usar una de las
siguientes subclases:
AlertDialog: Un dilogo que puede mostrar un ttulo, un mximo de tres botones, una
lista de tems o un layout personalizado.
DatePickerDialog o TimePickerDialog: Un dilogo con una interfaz predefinida que
permite al usuario seleccionar una fecha o una hora.

Estas clases definen el estilo y la estructura de tu dilogo, pero la


clase DialogFragment ser usada como contenedor del dilogo. Dicha clase

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 75

proporciona todos los controles que necesitamos para crear un dilogo y modificar su
apariencia. La clase DialogFragment fue introducida en Android 3.0 (API 11), si usas
una versin ms antigua, podrs usar la clase DialogFragment, para ver ms detalles
ingresar al siguiente link: http://developer.android.com/tools/support-library/index.html

La clase DialogFragment te asegura la correcta gestin de los eventos que puedan


ocurrir, como por ejemplo pulsar el botn Atrs o rotar la pantalla. Adems, usando
dicha clase podemos reusar el interfaz de los dilogos como componente en un
interfaz ms grande.

Ejemplo de AlertDialog (Diseo de pantalla)

El mtodo que se debe agregar en la activity (MainActivity)

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 76

Cdigo del botn de comando

Finalmente al ejecutar la aplicacin y dar click en el botn de comando

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 77

Caso: Usando DialogFragment


Agregar una clase llamada GenerarVentanaDialogo

El cdigo es el siguiente:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 78

Posterior a ello agregar un botn de comando en el layout principal

Cdigo del botn de comando Dialogo Fragment

La funcionalidad en ejecucin

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 79

MENS
Los mens en las aplicaciones son algo que encontramos frecuentemente, de hecho,
casi todos los terminales Android tienen un botn especfico para desplegarlos.
Se dispone de distintos tipo de mens:

Options Menu
El men tpico, que se despliega al pulsar la tecla men, que se divide en dos grupos:

Icon men
Muestra un men con iconos, 6 elementos como mximo.

Expanded Menu
Se usa cuando hay ms de 6 elementos, mostrando un elemento con la palabra Ms.

Context Menu: Mens contextuales desplegados al realizar una pulsacin


larga en una View.

Submens: Mens desplegados al pulsar sobre un elemento de otro men.

Options Menu
Lo ms simple y sencillo es definir los mens en XML, colocado en ./res/menu, para
este ejemplo se ha definido el siguiente men, que contiene dos elementos, un Acerca
de y un Salir:
< ?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/AcercaDe"
android:icon="@drawable/AcercaDe"
android:title="Acerca de la aplicacin">
<men xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/submenu"
android:title="Submen de Salir"/>
</menu>
</item>
<item android:id="@+id/BtnSalir"
android:title="Salir"
android:icon="@drawable/BtnSalir"/>
</men>

Detallaremos el cdigo creado lneas arriba, comenzamos declarando el men con la


etiqueta, que contendr todos sus elementos bajo la etiqueta, en este caso, tambin
tenemos un submen, que se declara igual que el men principal.

Los atributos de cada elemento son su identificador, el icono a mostrar y el ttulo.


Para poder usar este men, necesitamos inflarlo (Convertir el fichero XML en un objeto
java), para hacer esto, hay que llamar a MenuInflater.inflate(), el cdigo siguiente infla
el fichero xml anterior en el mtodo callback onCreateOptionsMenu().

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.ejemplo_menu, menu);

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 80

return true;
}

Ahora, tenemos que responder a las acciones del usuario cuando pulse algn
elemento de nuestro men, para ello vamos a sobrescribir el
mtodo onOptionsItemSelected()

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.AcercaDe:
Toast.makeText(
MenusActivity.this
,"Ejemplo Men"
,Toast.LENGTH_LONG)
.show();
return true;

case R.id.quit:
finish();
return true;

default:
return super.onOptionsItemSelected(item);
}
}

Context Menu

Los mens contextuales son similares a los mens mostrados al hacer click con el
botn derecho de un ratn en un PC, para crearlos, debemos sobrescribir el
mtodo onCreateContextMenu(), donde inflaremos el archivo xml.

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.ejemplo_menu, men);
}

Al igual que en los options men, tenemos que responder a las acciones del usuario:

@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.AcercaDe:
Toast.makeText(
MenusActivity.this
,"Ejemplo Mens App"
,Toast.LENGTH_LONG)
.show();
return true;

case R.id.Salir:
finish();
return true;

default:

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 81

return super.onOptionsItemSelected(item);
}
}

Pero este men contextual no se va a mostrar, ya que tenemos que asociarlo para que
se lance al realizar una pulsacin prolongada sobre una view, en este caso un botn:

final Button boton = (Button) findViewById(R.id.button1);


registerForContextMenu(boton);

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 82

UNIDAD

3
PERSISTENCIA DE DATOS EN
ANDROID
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno elabora aplicaciones que manejan recursos,
archivos XML, y manejan bases de datos SQLite.

TEMARIO

3.1 Acceso a recursos y archivos


3.1.1 Persistencia de datos: Files
3.1.2 Almacenamiento privado y compartido.
3.1.3 File, FileOutputStream, OutputStreamWriter, PrintWriter
3.1.4 Environment uso de mtodos bsicos para acceso a recursos.
3.1.5 Grabar y cargar datos de Preferencias de Usuario.

3.1.6 Leer XML Data usando SAX and W3C Parsers.

3.2 Persistencia de Datos usando SQLite


3.2.1 Introduccin a SQLite

3.2.2 Gestin de bases de datos con SQLite. Uso del componente


SQLiteOpenHelper.
3.2.3 Mtodos y funciones comunes, Insert, Update, Delete, RawQuery,
SQLExec

3.3 Aplicando el Modelo Vista controlador con SQLite


3.3.1 La clase ContentValues
3.3.2 Introduccin a SQLite: cursores y contenedores de valores.

3.3.3 Clases de acceso a datos basados en el modelo vista controlador.

3.3.4 Buenas prcticas de bases de datos en SQLite


3.3.5 Creando un proyecto con acceso a bases de datos

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 83

Acceso a recursos y archivos

Android al igual que otros sistemas operativos maneja un sistema de archivos basado
en el ncleo del sistema operativo base Linux 2.6, por ello para acceder a los archivos
y/o recursos del sistema operativo se debe indicar los permisos que debe tener la
aplicacin, adems de ello se debe especificar el espacio de almacenamiento que se
tendr en la aplicacin cuando se crea una mquina virtual en los dispositivos de
prueba. A continuacin se presenta un ejemplo de configuracin de espacio de
almacenamiento que se debe realizar al momento de configurar la mquina virtual.

En Android tenemos las siguientes formas de acceso a recursos y/o archivos


La memoria interna del dispositivo.
La tarjeta SD externa, si existe.
La propia aplicacin, en forma de recurso.

Memoria Interna
Android permite leer y escribir datos en ficheros de la memoria interna a travs de los
mtodos habituales para trabajar con ficheros en Java. Tambin nos permite hacer

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 84

uso del directorio de cache para tales usos, pero hay que ser precavidos ya que el
chache tendremos que manejarla nosotros y abusar mucho de este directorio puede
ralentizar nuestra aplicacin.

Memoria Externa
Casi todos los dispositivos Android soportan el uso de memoria externa ya sea en
forma de tarjeta SD o no. Hay que tener en cuenta que cualquier archivo en esta
memoria es accesible a todo el mundo, es decir, cualquier aplicacin puede leer y
escribir ah. Al contrario que la memoria interna, en la memoria externa necesitamos
solicitar permisos en el Manifest para tener acceso a ella.

Base de Datos SQLite


Android provee soporte completo para base de datos de tipo SQLite. Se trata de un
tipo de base de datos muy pequea y ligera ya que est basada en ficheros, por eso
es ampliamente utilizada en sistemas mviles. Para ayudarnos a gestionar la base de
datos Android recomienda hacer uso de la clase de ayuda que nos proporciona
SQLiteOpenHelper.
En las clases de persistencia hicimos un recorrido completo sobre cmo usar una base
de datos en Android. Desde los primeros pasos, creando las estructuras de datos y
tablas, hasta la gestin de las mismas creando una clase que herede de
SQLiteOpenHelper e implementando los mtodos para gestionar nuestra base de
datos: leyendo, guardando, actualizando y borrando registros en las tablas.
Adems de todo esto estudiamos buenas prcticas a la hora de trabajar con base de
datos y tuvimos una aproximacin a otra tcnica para gestionarlas: los ORM. Esta
tcnica realiza un mapeo de las entidades relacionales de la base de datos a objetos.

Proveedor de contenido o Content Provider

Un proveedor de contenidos permite compartir y tener acceso a informacin de otras


aplicaciones. Se accede a ellos a travs de sus Content URIs, que no son ms que
cadenas de texto al estilo de las direcciones web. Se implementan heredando de
ContentProvider pero se accede a ellos a travs de objetos ContentResolver. Su
utilizacin es similar a la de una base de datos pero no tienen por qu brindar acceso
a una base de datos. Entre los que probamos estaban el Contact Provider, Calendar
Provider y Media Provider, que nos proporcionan acceso a informacin de contactos,
calendario y multimedia respectivamente.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 85

Entre las clases ms conocidas para manejar archivos tenemos las siguientes clases:
Para almacenar informacin en archivos Android presenta varias opciones
entre ellos tenemos:
Shared Preferences Almacenar datos primitivos privadas en pares clave-valor
Internal Storage Guarde los datos privados en la memoria del dispositivo.
External Storage Guarde los datos pblicos sobre el almacenamiento externo
compartido.
SQLite Databases Guarde los datos estructurados en una base de datos
privada.
Network Connection Almacenar datos en la web con su propio servidor de
red,
Content Provider Repositorio compartido globalmente compartida por todas
las aplicaciones.

Para tener acceso a leer y escribir archivos debemos asignar los permisos en el
archivo de manifiesto como por ejemplo se presenta en el siguiente grfico:

Ejemplo de creacin de un archivo llamado prueba_int.txt en la memoria interna de


modo privado.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 86

Siempre que se genera el archivo de modo privado se almacena en la siguiente


ubicacin:
/data/data/nombre_package/files/nombre_fichero

Para el ejemplo mostrado se almacena en:


/data/data/ solucionesmoviles.archivos/files/prueba_int.txt

Shared Preferences
getPreferences( )
Desde dentro de su actividad, a las preferencias especficas de la actividad de
acceso
getSharedPreferences( )
Desde dentro de su actividad para acceder a las preferencias a nivel de
aplicacin
getDefaultSharedPreferences( )
En PreferencesManager, para obtener las preferencias compartidas que
funcionan en concierto con el marco de la preferencia general de Android

Todos los mtodos de preferencias getXXX devolver un objeto Preferencia cuyo


contenido puede ser manipulado por un editor que permite putXxx... y... getXXX
comandos para colocar los datos de entrada y salida del contenedor Preferencia

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 87

Ejemplo: Diseo de pantalla

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 88

Cdigo fuente de la aplicacin

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 89

Creando carpetas
El siguiente ejemplo muestra cmo crear una carpeta llamada miBkApp en la carpeta
de almacenamiento externo

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 90

Leer un archivo de disco

Para el siguiente ejemplo vamos a continuar con nuestro proyecto inicial creado, para
ello vamos a agregar un botn nuevo que tenga de ttulo grabar archivo y de nombre
tendr BtnGrabarArchivo

El cdigo de la aplicacin ser la siguiente:

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 91

Environment

Representa las variables del entorno, tiene propiedades comunes para toda la
aplicacin
Tiene propiedades comunes que utilizaremos para tener las rutas hacia a la carpeta de
nuestro celular, carpeta de imgenes, recursos, carpeta de SD externo o la carpeta
Root del sistema operativo entre otros.
El siguiente grafico muestra los atributos ms comunes de esta clase.

Public Mtodo/Funcin
Methods
getDataDirectory()
static File Recupera la carpeta de datos del usuario activo.
getDownloadCacheDirectory()
static File Recupera la carpeta de descargas.
getExternalStorageDirectory()
Recupera el nombre y ruta de la carpeta de la tarjeta SD
Get a top-level public external storage directory for placing files of a
static File particular type.
getExternalStorageState(File path)
Devuelve el estado actual del dispositivo de almacenamiento que
static String proporciona la ruta indicada.
getExternalStorageState()
Devuelve el estado actual del dispositivo de almacenamiento primario
static String "externa".
static isExternalStorageEmulated()
boolean Indica si el dispositivo de almacenamiento " externa" primaria es
emulado.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 92

Adaptadores de datos (Adapters)

Un adaptador es una clase especial que hace de intermediario entre un contenedor


como un listview u otro para cargar informacin en una plantilla por ejemplo un
adaptador podemos utilizarlo para poblar un listview como se puede mostrar en el
siguiente grafico donde se carga la lista de docentes registrados en una base de
datos

Ejemplo de un arrayAdapter para cargar una lista de datos en un control Spinner


(ComboBox)

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 93

Grafico que muestra la funcionalidad del spinner con datos cargados

Otro Ejemplo de un adaptador es aquel que se usa para cargar datos


personalizados en un listview haciendo uso de un layout personalizado

Esta clase adaptador es una clase que se debe cargar a nivel del Mainactivity para
poderlo utilizar para cargar el listview

Para profundizar este tema lo veremos despus de ver SQLite que se ver en el
siguiente tema.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 94

Introduccin a SQLite

SQLitees un sistema de gestin de bases de datos relacional compatible con ACID,


contenida en una relativamente pequea (~275 kiB)2 biblioteca escrita en C. SQLitees
un proyecto de dominio pblico1 creado por D. Richard Hipp. Para ms detalles
puedes ingresar a la pgina oficial de SQLite www.sqlite.org

Caractersticas principales

Base de datos relacional para sistemas embebidos


Ocupa nicamente unos 225KB
No se trata de un proceso, sino de una librera que se aade dinmicamente a
las aplicaciones que quieren utilizar SQLite
Implementa la mayor parte del estndar SQL-92, pero con restricciones
Soporte para ALTER_TABLE limitado
Las columnas no tienen tipos
Existen un pluginde Firefox para visualizar bases de datos
SQLite(recomendado)
Se utiliza internamente en Firefox y Thunderbird
Lo utilizan la mayora de las plataformas mviles (iOS, Symbian, Android,
BlackBerry OS, webOS)
Existen mltiples formas de atacar SQLite
Nosotros veremos una en la que separamos el acceso a la base de datos del
objeto Java que representa cada fila de la base de datos
No existen las claves ajenas o forneas, y en el caso de necesitarlas, debemos
forzarlas a mano
La base de datos est protegida dentro de la memoria interna del dispositivo
Mientras trabajamos con el emulador (donde tenemos acceso root), podemos
extraer (con DDMS) el archivo de la base de datos y visualizarlo

Cuando se crea un archivo de bases de datos se almacena de manera muy similar


que los archivos en disco:

"/data/data/packake/nombrebasedatos.db"

Donde la carpeta principal es la carpeta de datos.


Packake es el nombre del paquete de la aplicacin creada.

Ejemplo de crear un archivo de bases de datos

String StrRutaBaseDatos="/data/data/sise.app.BaseDatos/Contacto.db";
SQLiteDatabaseodb=SQLiteDatabase.openDatabase(StrRutaBaseDatos,
null,SQLiteDatabase.CREATE_IF_NECESSARY);

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 95

Tipos de datos

Integer
Valor entero, almacena1, 2, 3, 4, 6, o 8 bytes depende de la magnitud del campo.

Real
Valoresnmericosdecimales8-byte punto flotante.

Text
Se almacena cadena en cdigo (UTF-8, UTF-16BE or UTF-16LE).

Para ms detalles y otros tipos de datos puedes ir al portal oficional de tipos de datos:
http://www.sqlite.org/datatype3.html

Mtodos principales

Entre los mtodos principales tenemos los siguientes

execSQL
Ejecuta una sentencia SQL de creacin de datos create, drop, etc.

Ejemplo:

Otros Ejemplos:

Importante!

SQLITE usa un campo ivisiblellamadoROWID que identifica como nico registro la fila.
En el ejemplo se usa Cdigo como un campo similar

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 96

RawQuery(SentenciaSQL, ParametrosArreglo)

Esta funcin permite recuperar un cursor (tabla) con el fin de cargar los datos en un
adaptador para presentarlo en un contenedor como un listview.

Ejemplo:

Cursor c1 = db.rawQuery("select count(*) as Total from tblAMIGO",null);

Agregando parmetros a Rwquery

String mySQL= "select count(*) as Total "


+ " fromContacto"
+ " whereCodigo> ?"
+ " and Nombre= ?";

String[] args= {"1", Juan"};

Cursor c1 = db.rawQuery(mySQL, args);

Ejemplo de rwaquery:

Ejemplo Cargando Datos en una clase

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 97

La clase ContentValues

Esta clase permite almacenar variables de tipo diccionario es decir un nombre de


variable y un valor de la variable, se utiliza para pasar los datos a una base de datos y
ejecutar las sentencias de mantenimiento de datos en una base de datos de SQLite

Ejemplo: Clase especial de tipo campo valor de valores nicos controlados por ndice
til para hacer uso de insertar y/o actualizar los registros en la base de datos.

Sintaxis
ContentValues oRegistro=new ContentValues();

Metodo de SQLite insert

Ejecuta la sentencia SQL insert para agregar un nuevo registro en la base de datos

Sintaxis
Insert (table, nullColumnHack, values)
Dnde:
Table.- Nombre de tabla
nullColumnHack.- indica que campos tienen soporte a nulos
Values.- Lista de campos con valores a insertar

Ejemplo:

Metodo de SQLite update


Permite actualizar datos de una tabla, Ejecuta la sentencia SQL update para actualizar
registros de la base de datos

Sintaxis
update(table, values, whereClause, whereArgs)
Dnde:
Table.- Nombre de tabla
Values.- Lista de campos con valores a insertar

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 98

whereClause.- Parmetros para actualizar e registro en modificacin


whereArgs.- Valores par los campos de parmetros

Ejemplo:

Metodo de SQLite delete

Ejecuta la sentencia SQL delete para eliminar un registro de la base de datos

Sintaxis
delete(table, whereClause, whereArgs)
Dnde:
Table.- Nombre de tabla
whereClause.- Parmetros para actualizar e registro en modificacin
whereArgs.- Valores par los campos de parmetros
Ejemplo:

La clase Cursor

Representa un objeto tabla en la aplicacin


Sintaxis
Cursor oTabla=oDb.rawQuery("select * from Alumno", null);

Ejemplo:
Mtodos
getColumnCount().- Permite saber el nmero de columnas que tiene la(s) tablas
consultada(s).
close().- Permite cerrar el cursor que se encuentra abierto.
getColumnName(columnIndex).- permite leer el nombre de una columna a partir del
ndice
getCount().- permite leer el nmero de registros existentes en el cursor.
getDouble(columnIndex).- permite leer el valor de un campo nmero con decimales
de tipo doubl.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 99

getString(columnIndex).- permite leer el valor de un campo de tipo cadena varchar,


text nvarchar
getInt(columnIndex).- Permite leer el valor de un campo de tipo entero
getFloat(columnIndex).- Permite leer el valor de un campo de tipo nmero con
decimales float.

Modelo Vista Controlador

Para aquellos que no estn familiarizados con el MVC, ste es un patrn que divide la
aplicacin en tres niveles distintos, interfaz grfica (Vista), tratamiento de datos
(Modelo) lgica de negocio (Controlador). Esto se hace para permitir una mayor
portabilidad de una aplicacin, e incluso facilitar su mantenimiento. Por ejemplo si
deseamos modificar la interfaz de la aplicacin es decir solo pantallas slo
prestaremos atencin a la capa de la Vista, y si queremos modificar de sistema de
almacenamiento de datos slo tendremos que prestar atencin a la capa del Modelo, y
si lo que queremos es portar la aplicacin a otra plataforma lo que haremos ser
modificar la capa del Controlador, al igual que si queremos modificar el cdigo para
optimizar rendimiento.

Figura: modelo vista controlador


Fuente:http://www.proyectosimio.com/es/programacion-android-base-de-datos-i-modelo-vista-controlador/

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 100

Interfaz Grafica
(Vista(

Activity
Controlador

Aplication
Controlador

SQLite
Modelo

Paso 1: Sobrescribir la aplicacin

Debemos crear una nueva clase. Le damos al botn derecho sobre el Package que
tenemos en la estructura de nuestro proyecto, New->Class y le damos un nombre a
nuestra nueva clase que haga referencia a su funcin. Es una buena prctica crear
diferentes packages para los distintos tipos de clases que vayamos a crear, por
ejemplo un package para las Activities, otro package.modelo para las clases que
representen los datos que necesitemos manejar (por ejemplo una clase Auto), etc.

Una vez que tenemos la clase creada, le diremos que extienda de Application:

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 101

Paso 2: Modificar el archivo de manifiesto

Se debe realizar este paso para configurar que nuestra nueva clase ser la que llama
a todos los activitys a partir de ahora

Antes estaba as

Debe quedar como se muestra

Paso 3: Llamar a nuestra aplicacin


Para hacer llamadas a los mtodos que necesitemos de la clase Application que
hemos definido. Para poder hacerlo las Activities ya cuentan con un mtodo que llama
a la claseApplication, que es getApplication(), que nos va a devolver precisamente la

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 102

clase Application. Sin embargo para poder hacer uso de los mtodos que definamos
en nuestra clase vamos a tener que hacer una conversin al tipo de la clase que
nosotros hemos definido como Application, y a partir de ah podremos hacer la llamada
a los mtodos que contenga la clase. Para que quede ms claro un ejemplo sera:
((MyApplication)getApplication()).metodoDeNuestraClaseApplication();
// Llamada desde la Activity al mtodo de Application
((MyApplication)getApplication()).getNombre()

// Cdigo del mtodo en MyApplication


String getNombre(int idContacto) {
return modelo.getNombre(idContacto);
}

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 103

UNIDAD

4
NETWORKING EN ANDROID
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno elabora aplicaciones que se conectan a la web
utilizando http y consumen servicios web.

TEMARIO

4.1 Consumiendo servicios web


4.1.1 SOAP (Simple Object Access Protocol) Mensajes SOAP,
Estructura
4.1.2 Uso del protocolo HTTP para consumir web services.

4.1.3 Obtencin de data de archivos XML.

4.1.4 Crear y consumir web services.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 104

Servicios web

Los servicios web permiten integrar aplicaciones de distintas plataformas como puede
ser la plataforma Java con la plataforma .net o viceversa, estos fueron creados con el
fin de ampliar la posibilidad de distribuir informacin mediante la web. Segn la W3c lo
define como Un Servicio Web (Web Service [WS]) es una aplicacin software
identificada por un URI (Uniform Resource Identifier), cuyas interfaces se pueden
definir, describir y descubrir mediante documentos XML. Los Servicios Web hacen
posible la interaccin entre "agentes software (aplicaciones) utilizando mensajes XML
intercambiados mediante protocolos de Internet.

Un Servicio Web es un componente software que puede ser registrado, descubierto e


invocado mediante protocolos estndares de Internet.
Permiten exponer y hacer disponibles funcionalidades (servicios) de los
sistemas informticos de las organizaciones mediante tecnologas y protocolos
WEB estndar.
Cada Servicio Web se responsabilidad de realizar un conjunto de funciones
concretas y bien definidas.
Los Servicios Web actan como componentes independientes que se pueden
integrar para formar sistemas distribuidos complejos.

Modelo de funcionamiento de los web services


Cuando una empresa como un banco desea comunicarse sus sistemas con una
empresa aseguradora, el banco publica un servicio web y la empresa aseguradora
utiliza el servicio es decir la consume para realizar operaciones con el banco. El
siguiente grafico muestra el modo de operar de un servicio web para ello se emplea
datos en el lenguaje XML, la definicin denominado esquema y utilizando un protocolo
de comunicaciones denominado SOAP.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 105

Segn el ejemplo del grfico, un usuario (que juega el papel de cliente dentro de
los Servicios Web), a travs de una aplicacin, solicita informacin sobre un
viaje que desea realizar haciendo una peticin a una agencia de viajes que
ofrece sus servicios a travs de Internet. La agencia de viajes ofrecer a su
cliente (usuario) la informacin requerida. Para proporcionar al cliente la
informacin que necesita, esta agencia de viajes solicita a su vez informacin a
otros recursos (otros Servicios Web) en relacin con el hotel y la compaa
area. La agencia de viajes obtendr informacin de estos recursos, lo que la
convierte a su vez en cliente de esos otros Servicios Web que le van a
proporcionar la informacin solicitada sobre el hotel y la lnea area. Por ltimo,
el usuario realizar el pago del viaje a travs de la agencia de viajes que servir
de intermediario entre el usuario y el servicio Web que gestionar el pago.

En todo este proceso intervienen una serie de tecnologas que hacen posible
esta circulacin de informacin. Por un lado, estara SOAP (Protocolo Simple de
Acceso a Objetos). Se trata de un protocolo basado en XML, que permite la
interaccin entre varios dispositivos y que tiene la capacidad de transmitir
informacin compleja. Los datos pueden ser transmitidos a travs de HTTP,
SMTP, etc. SOAP especifica el formato de los mensajes. El mensaje SOAP est
compuesto por un envelope (sobre), cuya estructura est formada por los
siguientes elementos: header (cabecera) y body (cuerpo).

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 106

Figura: Estructura de los mensajes

Fuente: http://www.w3c.es/Divulgacion/GuiasBreves/ServiciosWeb

Para optimizar el rendimiento de las aplicaciones basadas en Servicios Web, se


han desarrollado tecnologas complementarias a SOAP, que agilizan el envo de
los mensajes (MTOM) y los recursos que se transmiten en esos mensajes
(SOAP-RRSHB).

Por otro lado, WSDL (Lenguaje de Descripcin de Servicios Web), permite que
un servicio y un cliente establezcan un acuerdo en lo que se refiere a los
detalles de transporte de mensajes y su contenido, a travs de un documento
procesable por dispositivos. WSDL representa una especie de contrato entre el
proveedor y el que solicita. WSDL especifica la sintaxis y los mecanismos de
intercambio de mensajes.

Durante la evolucin de las necesidades de las aplicaciones basadas en


Servicios Web de las grandes organizaciones, se han desarrollado mecanismos
que permiten enriquecer las descripciones de las operaciones que realizan sus
servicios mediante anotaciones semnticas y con directivas que definen el
comportamiento. Esto permitira encontrar los Servicios Web que mejor se
adapten a los objetivos deseados. Adems, ante la complejidad de los procesos
de las grandes aplicaciones empresariales, existe una tecnologa que permite
una definicin de estos procesos mediante la composicin de varios Servicios
Web individuales, lo que se conoce como coreografa.

Ejemplos

A continuacin se muestra el cdigo que se utilizara para solicitar un viaje:

<?xml version='1.0' ?>


<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-
envelope">

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 107

<env:Header>
<m:reserva xmlns:m="http://empresaviajes.ejemplo.org/reserva"
env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
env:mustUnderstand="true">
<m:referencia>
uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d
</m:referencia>
<m:fechaYHora>2001-11-29T13:20:00.000-
05:00</m:fechaYHora>
</m:reserva>
<n:pasajero xmlns:n="http://miempresa.ejemplo.com/empleados"
env:role="http://www.w3.org/2003/05/soap-envelope/role/next"
env:mustUnderstand="true">
<n:nombre>Pepe Ejemplo</n:nombre>
</n:pasajero>
</env:Header>
<env:Body>
<p:itinerario
xmlns:p="http://empresaviajes.ejemplo.org/reserva/viaje">
<p:ida>
<p:salida>Nueva York</p:salida>
<p:llegada>Los Angeles</p:llegada>
<p:fechaSalida>2001-12-14</p:fechasalida>
<p:horaSalida>ltima hora de la tarde</p:horaSalida>
<p:preferenciaAsiento>pasillo</p:preferenciaAsiento>
</p:ida>
<p:vuelta>
<p:salida>Los Angeles</p:salida>
<p:llegada>Nueva York</p:llegada>
<p:fechaSalida>2001-12-20</p:fechaSalida>
<p:horaSalida>media-maana</p:horaSalida>
<p:preferenciaAsiento/>
</p:vuelta>
</p:itinerario>
<q:alojamiento
xmlns:q="http://empresaviajes.example.org/reserva/hoteles">
<q:preferencia>ninguna</q:preferencia>
</q:alojamiento>
</env:Body>
</env:Envelope>

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 108

Estructura Mensaje SOAP

Un mensaje SOAP es un documento XML ordinario con una estructura definida en la


especificacin del protocolo.

Definicin del Mensaje SOAP (WSDL)


WSDL son las siglas de Web Services Description Language, un formato XML que se
utiliza para describir servicios Web.
WSDL se usa a menudo en combinacin con SOAP y XML Schema

Estructura del WSDL


Tipos de Datos
<types>: Esta seccin define los tipos de datos usados en los mensajes.
Mensajes
<message>: Aqu definimos los elementos de mensaje.
Tipos de Puerto
<portType>: Con este apartado definimos las operaciones permitidas y los
mensajes intercambiados en el Servicio.
Bindings
<binding>: Especificamos los protocolos de comunicacin usados.
Servicios
<service>: Conjunto de puertos y direccin de los mismos.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 109

Caso:
Crear un web Service usando Visual Studio 2010

Nombre de proyecto: WSLogin


Ubicacin: C:\Android_2015
Agregar un web Service men proyect/Add new Item

Vista del proyecto

Cdigo fuente de wslogin.asmx

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 110

El mtodo WebMethod con dos parmetros pUsuario y pContrasenia

Web Service en publicacin

Dnde:
(1) Al dar click e ServiceDescriptin
Muestra la definicin de servicio como mtodos y funcionalidades como
mtodos pblicos parmetros y tipos de datos

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 111

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microso


ft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"x
mlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:s="h
ttp://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="http://schemas.xmlsoap.org/ws
dl/" targetNamespace="http://tempuri.org/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
<s:element name="HelloWorld">
<s:complexType/>
</s:element>
<s:element name="HelloWorldResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="HelloWorldResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ValidarUsuario">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="pUsuario" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="pContrasenia" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="ValidarUsuarioResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ValidarUsuarioResult" type="s:boolean"/>
</s:sequence>
</s:complexType>

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 112

</s:element>
</s:schema>
</wsdl:types>

(2) Metodos del servicio


Muestra los mtodos pblicos que se pueden consumir por el cliente e
nuestro caso utilizando Android, Dando un click por ejemplo en el
mtodo Validar usuario se muestra la siguiente pgina para hacer
pruebas del servicio.

Adicionalmente se muestra formas de llamada de clientes:

Usando protocolo SOAP 1.1


Indica el nombre del mtodo as como los parmetros que recibe y la respuesta que
emite la seccin que tiene el nombre del mtodo con la palabra Result ejemplo
ValidarUsuarioResponse y el tipo de dato de respuesta
<ValidarUsuarioResult>boolean</ValidarUsuarioResult>
Ejemplo de la imagen

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 113

Usando Protocolo SOAP 1.2 el mismo escenario indicado, sin embargo es para
soporte a plataformas complejas como WCF (Windows comuication fudation)

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 114

Clases de acceso a web service

Android no tiene ninguna librera para consumir web Service por ello debemos utilizar
una librera libre llamada ksoap para consumir nuestro web Service. Para utilizar la
librera se debe descargar desde:
https://code.google.com/p/ksoap2-android/

Dar click en download y descargar el .jar que indica descarga directa.

Una vez descargado ponerlo en una carpeta con ruta corta como C:\AndroidDll

Clases, mtodos y funciones

SoapObject
Permite realizar crear la conexin al servicio basado en el namespace y el nombre de
mtodo
SoapObject oRequest=new SoapObject(http://tempuri.org/, Sumar);

addProperty
Propiedad de SoapObject para agregar parmetros
oRequest.addProperty("pNumero1",1);
oRequest.addProperty("pNumero2",2);

SoapSerializationEnvelope

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 115

Permite inicializar el enlace de datos con el web service, serializar los datos para
iniciar comunicacin.
SoapSerializationEnvelope oSerializador=new
SoapSerializationEnvelope(SoapEnvelope.VER11);
oSerializador.setOutputSoapObject(oRequest);
oSerializador.dotNet=true;

HttpTransportSE
Permite realizar la llamada al servicio web utilizando la url y el objetito de serializacin
HttpTransportSE oEjecutarWebService=new
HttpTransportSE(http://planificador.nisabusiness.com/operaciones.asmx);
oEjecutarWebService.call(http://tempuri.org/Sumar, oSerializador);
SoapObject Resultado=(SoapObject)oSerializador.bodyIn;
StrResultado=Resultado.getProperty(0).toString(); //Permite recuperar el dato.

Agregar la referencia en Android Studio

Click e el men archivo y luego dar click en estructura de proyecto.

Dar click en agregar referencia

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 116

En la ventana que aparece seleccionar importar .Jar como se muestra en el siguiente


grfico:

Dar click en siguiente:


En esta ventana ubicar el archivo descargado:

Posteriormente se debe seguir los pasos que se indica en la numeracin para agregar
la referencia en el APK

Dar click en Apply y luego ok

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 117

Thread Manejando Hilos

E Android para las llamadas que pueden demorar el proceso de operacin de las
aplicaciones se debe utilizar un hilo de ejecucin por ello debemos revisar la
documentacin de cmo manejar hilos.

Thread (Hilo).- Clase que permite ejecutar algn proceso en segundo plano.

Thread Ejemplo

Thread cdigo de ejemplo

El siguiente cdigo de ejemplo muestra cmo se utiliza el thead

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 118

Dnde:
1.- es el diseo de la pantalla
2.- las variables a nivel de activity
3.- cdigo del mtodo principal del thead

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 119

Consumiendo web Service desde Android

Objetivo
Crear un web Service que permita realizar operaciones de suma y que retire el
resultado.

Paso 1: Crear en proyecto usado Visual Studio 2010


Utilizado el proyecto creado anteriormente
Agregar el webservice llamado Operaciones.asmx

El cdigo fuente s el siguiente:

Una vez ejecutado se muestra lo siguiente:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 120

EL mismo web Service se encuentra publicado en la siguiente direccin:


http://planificador.nisabusiness.com/operaciones.asmx

Consumiendo web Service desde Android


Crear el proyecto WSLogin

Activity en Blanco

No olvidarse de dar permisos de acceso a internet

En el archivo de manifiesto AndroidManifest.xml

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 121

El layout principal es el siguiente:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lbltitulo"
android:textAppearance="?android:attr/textAppearanceLarge" />

</TableRow>

<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lblTitulonumero1" />

<EditText
android:id="@+id/edtnumero1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" >

<requestFocus />
</EditText>

</TableRow>

<TableRow
android:id="@+id/tableRow3"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 122

android:layout_height="wrap_content"
android:text="@string/lbltitulonumero2" />

<EditText
android:id="@+id/edtnumero2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" />

</TableRow>

<TableRow
android:id="@+id/tableRow4"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lbltituloresultado" />

<TextView
android:id="@+id/tvresutado"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lbltituloresultadofinal"
android:textAppearance="?android:attr/textAppearanceMedium" />

</TableRow>

<TableRow
android:id="@+id/tableRow5"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<Button
android:id="@+id/btncalcular"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/lblbtntituloboton" />

<Button
android:id="@+id/btncancelar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btntitulocancelar" />

</TableRow>

</LinearLayout>

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 123

El diseo final de la pantalla es el siguiente:

Los nombres de los controles son los siguientes:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 124

Cdigo fuente
Cdigo para el evento click del botn de comando calcular

package solucionesmoviles.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class MainActivity extends Activity {

EditText oedtnumero1=null;
EditText oedtnumero2=null;
TextView oTvResultado=null;

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 125

Button obtnSumar=null;
Button obtnCancelar=null;

private static String NAMESPACE = "http://tempuri.org/";


private static String URL = "http://planificador.nisabusiness.com/operaciones.asmx";
private static String NOMBRE_METODO = "Sumar";
private static String SOAP_ACTION = "http://tempuri.org/Sumar";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

obtnSumar=(Button)findViewById(R.id.btncalcular);
obtnSumar.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Thread oHilo=new Thread()
{
String StrResultado="";
public void run()
{
oedtnumero1=(EditText)findViewById(R.id.edtnumero1);
oedtnumero2=(EditText)findViewById(R.id.edtnumero2);
SoapObject oRequest=new SoapObject(NAMESPACE, NOMBRE_METODO);

oRequest.addProperty("pNumero1",Integer.valueOf(oedtnumero1.getText().toString()));

oRequest.addProperty("pNumero2",Integer.valueOf(oedtnumero2.getText().toString()));
SoapSerializationEnvelope oSerializador=new
SoapSerializationEnvelope(SoapEnvelope.VER11);
oSerializador.setOutputSoapObject(oRequest);
oSerializador.dotNet=true;
HttpTransportSE oEjecutarWebService=new HttpTransportSE(URL);
try
{
oEjecutarWebService.call(SOAP_ACTION, oSerializador);
SoapObject Resultado=(SoapObject)oSerializador.bodyIn;
StrResultado=Resultado.getProperty(0).toString();
}
catch(Exception ex)
{
StrResultado=ex.toString();
}
runOnUiThread(new Runnable()
{
public void run()
{
oTvResultado=(TextView)findViewById(R.id.tvresutado);
oTvResultado.setText(StrResultado);
Toast.makeText(getBaseContext(), StrResultado,
Toast.LENGTH_LONG).show();
}
});

}
};
oHilo.start();

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 126

}
});
obtnCancelar=(Button)findViewById(R.id.btncancelar);
obtnCancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
//getActivity().onBackPressed();

public void AplicandoHilos()


{
Thread oHilo=new Thread(
new Runnable()
{
public void run()
{//Metodo de ejecucin

//Acceso a interfaz grafica actual


runOnUiThread(new Runnable()
{
public void run()
{}
});
}
}
);
oHilo.start(); //Ejecutar el hilo
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 127

Prueba de ejecucin de aplicacin


Ingresar los datos Una vez calculado se muestra el resultado

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 128

UNIDAD

5
Servicios basados en localizacin
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno elabora aplicaciones que permitan el uso del
servicio basado en localizacin utilizando Google Maps.

TEMARIO

5.1 Tema 10: Manejo de fragments (4 horas)


5.1.1 Que es Fragment
5.1.2 Creating a Fragment, administrar Fragments,Flagment class
5.1.3 Toolbar Fragment Talk to the Activity
5.1.4 Eventos fragment, Aplicacin fragment

5.2 Tema 11: Servicios basados en localizacin (3 horas)


5.2.1 Utilizar Google Maps en la aplicacin.
5.2.2 Obtencin de la localizacin (coordenadas) del dispositivo.
5.2.3 Activar las API de Google Maps.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 129

Que es un fragment

Es una porcin de la interfaz que puede aadirse y/o quitarse de la interfaz


independientemente de la actividad en curso, un fragmente se puede reutilizar en
varias Activities el propsito principal del fragment es poder disear varias
configuraciones de pantalla y que podamos adaptarlo de acuerdo a la necesidad,
adaptndose a la orientacin vertical o horizontal con ello reducir el cdigo que
podamos generar. Por ejemplo podemos presentar una aplicacin cliente de correo
electrnico, donde al lado izquierdo debemos tener la lista de correos y al lado
derecho mostrar el mensaje de correo, con sus campos clsicos De y Asunto, y por
otro lado debemos mostrar el contenido completo del correo seleccionado. En un
telfono mvil lo habitual ser tener una primera actividad que muestre el listado de
correos, y cuando el usuario seleccione uno de ellos navegar a una nueva actividad
que muestre el contenido de dicho correo. Sin embargo, en un tablet puede existir
espacio suficiente para tener ambas partes de la interfaz en la misma pantalla, por
ejemplo en un tablet en posicin horizontal podramos tener una columna a la
izquierda con el listado de correos y dedicar la zona derecha a mostrar el detalle del
correo seleccionado, todo ello sin tener que cambiar de actividad.

Imagen 51
Fuente: http://jarroba.com/

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 130

Ciclo de vida

Al igual que las activity un fragmento tiene un ciclo de vida muy parecido, que el
fragmento depende completamente del activity adems de tener caractersticas
adicionales que es muy utilizado en tiempo de ejecucin para alterarlos.
Lista de eventos invocados en el ciclo de vida de un fragment

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 131

Evento Descripcin / Funcionalidad


onAttach se ejecuta cuando el fragmento ha sido asociado a la actividad
contenedora.
onActiviyCreated Se ejecuta cuando la actividad contenedora ya ha terminado la ejecucin de
su mtodo onCreate()
onCreate Se ejecuta cuando el fragmento se est creando. En el puedes inicializar
todos los componentes que deseas guardar si el fragmento fue pausado o
detenido.
onCreateView Se llama cuando el fragmento ser dibujado por primera vez en la interfaz
de usuario. En este mtodo crearemos el view que representa al fragmento
para retornarlo hacia la actividad.
onStart Se invoca cuando el fragmento esta visible ante el usuario. Obviamente
depende del mtodo onStart() de la actividad para saber si la actividad se
est mostrando.
onResume Es ejecutado cuando el fragmento est activo e interactuando con el
usuario. Esta situacin depende de la que actividad anfitriona este primero
en su estado Resumed.
onStop Se ejecuta cuando un fragmento ya no es visible para el usuario debido a
que la actividad anfitriona est detenida o porque dentro de la actividad se
est gestionando una operacin de fragmentos.

onPause Al igual que las actividades, onPause se ejecuta cuando se detecta que el
usuario dirigi el foco por fuera del fragmento.

onDestroyView Este mtodo es llamado cuando la jerarqua de views a la cual ha sido


asociado el fragmento ha sido destruida.

onDetach Se ejecuta cuando el fragmento ya no est asociado a la actividad anfitriona

La API de los fragmentos se incluye en el API de Android y se encuentra en la clase


Fragment, por ello cada vez que necesite utilizar se debe extender la clase Fragment
en nuestra nueva clase para heredar sus propiedades y comportamientos.

Tambin existen otros librera que se pueden utilizar como


ListFragment
DialogFragment
PreferenceFragment

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 132

Cdigo de ejemplo:

public static class FragmentoDemo extends Fragment {


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragmento_Demo, container, false);
}
}

El evento onCreateView() recibe como parmetro un objeto de tipo LayoutInflater, el


cual es provedo por la clase anfitriona.

Esta clase es la encargada de inflar el cdigo Java a travs del mtodo inflate(). Este
recibe como parmetros el recurso xml del layout, el contenedor(en este caso el
view de la actividad anfitriona) donde ser insertado y una bandera indicando si el view
que se producir debe incorporarse al contenedor.

Como se ve, hemos usado al archivo fragmento_Demo.xml como recurso, el


parmetro container que apunta a la actividad anfitriona y false para indicar que no
indicar que no deseamos comprometer el view del fragmento.

Aadiendo un fragmento a la actividad

Una vez creada la clase y el layout que representa nuestro fragmento debemos
aadirlo a la actividad. Existen dos formas para realizar este proceso.

La primera es a travs del archivo layout de la actividad. Donde incluiremos un


componente XML de equivalencia para fragmentos llamado <Fragment>, el cual
referenciar a la clase especifica extendida del fragmento para crear la jerarqua.

Veamos un ejemplo:

Creacin del primer layout Fragment

El siguiente paso es crear la interfaz de usuario para el primer fragmento que se


utilizar dentro de nuestra actividad.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 133

Esta interfaz de usuario tiene que estar en un archivo XML, para ello debes estar en la
vista app ira la carpeta es y layout nuevo y lyout resource file como se muestra en el
siguiente grafico

Adicin de un archivo de recursos de diseo para un proyecto Android Estudio

En el siguiente cuadro de dilogo resultante, nombre el toolbar_fragment diseo y


cambiar el elemento raz de LinearLayout a RelativeLayout antes de hacer clic en
Aceptar para crear el nuevo archivo de recursos.

El cdigo fuente inicial es el siguiente:

Sin embargo se debe modificar el XML como se muestra a continuacin:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 134

<Button
android:id="@+id/btnBuscar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Buscar"
android:layout_below="@+id/skbBarraBusqueda"
android:layout_alignStart="@+id/edtBuscar" />

<EditText
android:id="@+id/edtBuscar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:ems="10"
android:inputType="text" >
<requestFocus />
</EditText>

<SeekBar
android:id="@+id/skbBarraBusqueda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/edtBuscar"
android:layout_marginTop="14dp" />

</RelativeLayout>

El diseo queda como se muestra:

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 135

Creacin de la Primera Clase Fragmento

Adems de un diseo de interfaz de usuario, un fragmento tambin tiene que tener


una clase asociada con l para hacer el trabajo real por medio de cdigo. Por ello se
debe adicionar una nueva clase ir a los archivos de proyecto desplegado en la carpeta
java Aadir una clase para este fin al proyecto desplegando la aplicacin carpeta java
bajo el proyecto FragmentExample en la ventana de herramientas del proyecto y hacer
clic derecho sobre el nombre del paquete dado al proyecto cuando se cre (en este
caso com.appmovil. fragmentexample). En el men que aparece, seleccione la nueva
opcin -> Java Class. En el cuadro de dilogo Crear nueva clase resultando, nombre
el ToolbarFragment clase y haga clic en Aceptar para crear la nueva clase.
Una vez que la clase se ha creado, se debe, por defecto, aparecer en el panel de
edicin en el que se lea como sigue:

package com.appmovil.fragmentexample;

public class ToolbarFragment {


}

Posteriormente se debe agregar las importaciones necesarias para que el buen


funcionamiento de la aplicacin

Por el momento, los nicos cambios en esta clase son para aadir algunas directivas
de importacin y reemplazar el mtodo onCreateView () para asegurarse de que el
archivo de diseo se infla y se visualiza cuando se utiliza el fragmento dentro de una
actividad. La declaracin de la clase tambin debe indicar que la clase ampla la clase
Fragmento Android:
package com.appmovil.fragmentexample;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class ToolbarFragment extends Fragment {

@Override
public view onCreateView (LayoutInflater inflado,
Contenedor ViewGroup, Bulto
savedInstanceState) {

// Inflar el diseo de este fragmento


Ver view = inflater.inflate (R.layout.toolbar_fragment,
contenedor, false);

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 136

vista regresar;
}
}

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 137

Servicios basados en localizacin

Localizacin Geogrfica Bsica


La geolocalizacin es la localizacin geogrfica en Android existen multitud de formas
de obtener la localizacin de un dispositivo mvil, la ms conocida y popular es la
localizacin por GPS, tambin es posible obtener la posicin de un dispositivo por las
antenas de telefona mvil o mediante puntos de acceso Wi-Fi cercanos, y todos cada
uno de estos mecanismos tiene una precisin, velocidad y consumo de recursos
distinto.

A location-based service (LBS)


Es un sistema de difusin de informacin que se puede acceder por los dispositivos
mviles a travs de la red mvil. Es impulsado por la capacidad del sistema para
detectar la posicin geogrfica del dispositivo mvil.

Cdigo de ejemplo: Listar todos los proveedores.

LocationManager locManager =
(LocationManager)getSystemService(LOCATION_SERVICE);
List<String> listaProviders = locManager.getAllProviders();

Clases para localizacin por GPS

Address
Una clase que representa una direccin, es decir, un conjunto de cadenas que
describen una ubicacin.
Criteria
Una clase con indicacin de los criterios de aplicacin para la seleccin de un
proveedor de ubicacin.
Geocoder
Una clase para el manejo de la geo codificacin.
GpsSatellite
Esta clase representa el estado actual de un satlite GPS.
GpsStatus
Esta clase representa el estado actual del motor GPS.
Location

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 138

Una clase representa una situacin geogrfica sinti en un momento


determinado (un "arreglar").
LocationManager
Esta clase proporciona acceso a los servicios de localizacin del sistema.
LocationProvider
Unos proveedores de localizacin super cclase abstracto.
GpsStatus.Listener
Se utiliza para recibir notificaciones cuando el estado del GPS ha cambiado.
GpsStatus.NmeaListener
Se utiliza para recibir sentencias NMEA del GPS.
LocationListener
Se utiliza para recibir notificaciones de la LocationManager cuando la ubicacin
ha cambiado.

Para ms detalles visitar el portal de desarrollador google:


http://developer.android.com/guide/topics/location/strategies.html

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 139

Google Maps
Google Maps es un servidor de aplicaciones de mapas en la web que pertenece a
Google. Ofrece imgenes de mapas desplazables, as como fotografas por satlite del
mundo e incluso la ruta entre diferentes ubicaciones o imgenes a pie de calle Google
Street View. Desde el 6 de octubre de 2005, Google Maps es parte de Google Local.

Existe una variante a nivel entorno de escritorio llamada Google Earth que ofrece
Google tambin de forma gratuita. En 2014, los documentos filtrados por Edward
Snowden revelaron que Google Maps es parte y vctima del entramado de vigilancia
mundial operado por varias agencias de inteligencia occidentales y empresas
tecnolgicas.

Imagen 215
Fuente: http://www.elandroidelibre.com/wp-content/uploads/2011/05/google-maps-navigation.jpg

Nuevo Google Maps


En la Google I/O 2013, Google present un rediseo de Google Maps para la versin
Web, mostrando nuevas funciones como:
El mapa ocupa toda la pantalla.
La barra de bsqueda est en la parte superior izquierda y puede mostrar
informacin sobre la ubicacin.
En la esquina inferior derecha estn ubicados los controles de zoom.
Ahora hay un modo tierra el cual es una combinacin entre la vista satlite y
google earth, en donde podremos ver las ciudades en 3D y al alejar la imagen
podremos ver la Tierra en 3D.
Al hacer clic en un lugar, nos muestra las reseas, fotos, nmeros de telfono y
ver el edificio en Street View.
Al usar indicaciones podremos ver varias rutas y cambiarlas, adems de que se
podrn ver las rutas en avin y reservar vuelos.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 140

Habilitar APIS de google Maps


Google est compuesto por muchas aplicaciones las cuales las denomina google
apps, Google Apps for Work es un servicio
de Google que proporciona varios
productos de Google con un nombre de
dominio personalizado por el cliente.
Cuenta con varias aplicaciones web con
funciones similares a las suites ofimticas
tradicionales, incluyendo Gmail, Hangouts,
Calendar, Drive, Docs, Sheets, Slides,
Groups, News, Play, Sites y Vault. Fue la
creacin de Rajen Sheth, un empleado de
Google que posteriormente desarroll las
Chromebooks.1

Para habilitar las apps de google Maps se debe ingresar a la siguiente direccin:

1. Ingresar a tu cuenta de Gmail


2. Ingresar a la consola de APIS
https://code.google.com/apis/console
3. Crear un proyecto asociado a la plataforma de desarrollo para nuestro caso es
una aplicacin mvil en Android
4. Habilitar las API necesarias

Instalar google play services


Para utilizar google Maps se debe instalar google play services ingresando al
administrador de libreras como se muestra.

1
Cfr: http://es.wikipedia.org/wiki/Google_Apps

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 141

Creando nuestra primera aplicacin en google Maps

Datos del proyecto

Se debe modificar el XMl como se muestra en la siguiente imagen

Modificar el glandle como se muestra para agregar las referencias a google play
services

Posterior a ello se debe crear las llaves digitales para firmar la aplicacin con los
siguientes comandos como se indica:

keytool -list -v -keystore mystore.keystore

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 142

Configurar el archivo de manifiesto como se indica

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyB9oARLFPe4wRGyeuWJq0IqZ0g84TjmjVI" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission
android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Agregar el siguiente cdigo para hacer uso de google Maps

import com.google.android.gms.maps.*;
public class MainActivity extends Activity {
private void createMapView(){

try {
if(null == googleMap){
googleMap = ((MapFragment)
getFragmentManager().findFragmentById(
R.id.mapView)).getMap();

if(null == googleMap) {
Toast.makeText(getApplicationContext(),
"Error creating map",Toast.LENGTH_SHORT).show();
}
}
} catch (NullPointerException exception){
Log.e("mapasApp", exception.toString());
}
}

Para agregar marcadores se debe realizar con el siguiente cdigo

import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

Agregar el siguiente mtodo para fijar un marcador


private void addMarker(){
if(null != googleMap){
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker")
.draggable(true)
);
}
}

Finalmente el mtodo oncreate queda como se muestra:

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 143

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
createMapView();
addMarker();
}

Finalmente ejecutando la aplicacin se muestra el mapa en el celular como se muestra

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 144

UNIDAD

6
Servicios
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno elabora aplicaciones desatendidas basadas en
servicios que permitan realizar operaciones como descarga de archivos grandes,
monitorear usuarios basado en geolocalizacin.

TEMARIO

6.1 Tema 13: Creando y administrando Servicios (4 horas)


6.1.1 Qu es un servicio,
6.1.2 Anatoma de un servicio, accesos y permisos.
6.1.3 Intent Service, Bound Service.
6.1.4 Configurar el archivo de manifiesto.
6.1.5 Iniciar/Configurar servicios

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 145

Que es un servicio (Service)

Los servicios son componentes sin interfaz grfica que se ejecutan en segundo plano.
En concepto, son exactamente iguales a los servicios presentes en cualquier otro
sistema operativo como por ejemplo Windows los servicios de Windows update, o el
servicio de actualizacin de la hora de windows. Los servicios pueden realizar
cualquier tipo de acciones, por ejemplo actualizar datos, lanzar notificaciones, o
incluso mostrar elementos visuales como por ejemplo Activities si se necesita en algn
momento la interaccin con del usuario. La plataforma de Android tiene una gran
variedad de servicios que ofrece como por ejemplo los alertas cuando la batera esta
baja o por ejemplo cuando llega un mensaje de texto o alertas para acceder a dichos
servicios se puede realizar con la clase Manager. De esta manera, en nuestras
actividades podremos accesar a estos servicios a travs del
mtodo getSystemService().

Por otro lado, si necesitamos utilizar servicios propios, estos deben ir declarados en el
archivo AndroidManifest.xml.

Imagen: Ciclo de vida de los servicios


Fuente: http://cd1.faqsandroid.com/wp-content/uploads/2012/08/service_lifecycle.jpg

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 146

Creando un servicio de msica

1. Crea un nuevo proyecto con los siguientes datos:

2. Reemplaza el cdigo del layout activity_main.xml por:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Servicio de reproduccin de msica"/>
<Button android:id="@+id/boton_arrancar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Arrancar servicio"/>
<Button android:id="@+id/boton_detener"
android:layout_width="wrap_content"

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 147

android:layout_height="wrap_content"
android:text="Detener servicio"/>
</LinearLayout>

El diseo de pantalla queda Como se muestra:

3. Agregar la clase ServicioMusica

3.1. Agregar el siguiente cdigo en el activity main:

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 148

4. agregar el siguiente cdigo en el servicio de musica:

package solucionesmoviles.serviciomusica;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.widget.Toast;
/**
* Created by peextssolis on 06/03/2015.
*/
public class ServicioMusica extends Service {
MediaPlayer reproductorMusica;

@Override
public void onCreate() {
Toast.makeText(this, "Servicio iniciado",
Toast.LENGTH_SHORT).show();
reproductorMusica = MediaPlayer.create(this, R.raw.audio);
}
@Override
public int onStartCommand(Intent intenc, int flags, int idArranque) {
Toast.makeText(this,"Servicio arrancado "+ idArranque,
Toast.LENGTH_SHORT).show();
reproductorMusica.start();
return START_STICKY;
}

@Override
public void onDestroy() {
Toast.makeText(this,"Servicio detenido",
Toast.LENGTH_SHORT).show();
reproductorMusica.stop();
}

@Override
public IBinder onBind(Intent intencion) {
return null;
}
}

5. Modificar el archivo de manifiesto AndroidManifest.xml y agregar el siguiente


cdigo de declaracin de servicio en el tag <application>.
<service android:name=".ServicioMusica" />

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 149

6. Ahora debes crear una nueva carpeta con nombre raw dentro de la carpeta res.
Arrastra a su interior el ficheroaudio.mp3.

7. Ejecuta la aplicacin y comprueba su funcionamiento. Puedes terminar la


actividad pulsando el botn de retroceder y verificar que el servicio contina en
marcha.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 150

UNIDAD

7
Multimedia y publicacin
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al trmino de la unidad, el alumno elabora aplicaciones que permitan el uso del video y
de sus dispositivos visuales y las publicar en GooglePlay.

TEMARIO

7.1 Tema 12: Audio, Video y Uso de Dispositivos visuales


7.1.1 Componente Media Player. Definicin, caractersticas y aplicaciones.
7.1.2 Visualizacin de videos usando la vista Video.
7.1.3 Grabacin de audio y video: Uso de Intents para grabar video.

17.2 Tema 14: Publicacin en Google Play


7.2.1 Generacin de APK firmado con el certificado digital.
7.2.2 Creacin de la cuenta en Google Play.
7.2.3 Publicacin de la aplicacin

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 151

Audio, Video y Uso de Dispositivos visuales

Multimedia

La capacidad de reproducir contenido multimedia es una caracterstica presente en la


prctica totalidad de las terminales telefnicas existentes en el mercado hoy en da.
Muchos usuarios prefieren utilizar las capacidades multimedia de su telfono, en lugar
de tener que depender de otro dispositivo adicional para ello. Android incorpora la
posibilidad de reproducir no slo audio en diversos formatos, sino que tambin vdeo.
Los formatos de audio soportados son los siguientes:

AAC LC/LTP
HE-AACv1 (AAC+)
HE-AACv2 (Enhanced ACC+)
AMR-NB
AMR-WB
FLAC
MP3
MIDI
Ogg Vorbis
PCM/Wave

Con respecto al vdeo, los formatos soportados son:


H.263
H.264 AVC
MPEG-4 SP
VP8

En esta sesin echaremos un vistazo a las herramientas necesarias para poder


reproducir contenido multimedia (audio o vdeo) en una actividad. Tambin veremos
cmo aadir la capacidad a nuestra aplicacin para la toma de fotografas, una
caracterstica perfectamente emulada por el emulador en las ltimas versiones del
Android SDK.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 152

Reproduccin de audio
La reproduccin de contenido multimedia se lleva a cabo por medio de la clase
MediaPlayer. Dicha clase nos permite la reproduccin de archivos multimedia
almacenados como recursos de la aplicacin, en ficheros locales, en proveedores de
contenido, o servidos por medio de streaming a partir de una URL. En todos los casos,
como desarrolladores, la clase MediaPlayer nos permitir abstraernos del formato as
como del origen del fichero a reproducir. Incluir un fichero de audio en los recursos de
la aplicacin para poder ser reproducido durante su ejecucin es muy sencillo.
Simplemente creamos una carpeta raw dentro de la carpeta res, y almacenamos en
ella sin comprimir el fichero o ficheros que deseamos reproducir. A partir de ese
momento el fichero se identificar dentro del cdigo como R.raw.nombre_Archivo.
Para reproducir un fichero de audio tendremos que seguir una secuencia de pasos.

En primer lugar deberemos crear una instancia de la clase MediaPlayer.


El siguiente paso ser indicar qu fichero ser el que se reproducir. Por ltimo
ya podremos llevar a cabo la reproduccin en s misma del contenido
multimedia.

Veamos primero cmo inicializar la reproduccin.

Tenemos dos opciones. La primera de ellas consiste en crear una instancia de la clase
MediaPlayer por medio del mtodo create(). En este caso se deber pasar como
parmetro, adems del contexto de la aplicacin, el identificador del recurso, tal como
se puede ver en el siguiente ejemplo:

Reproduccin de vdeo usando el control VideoView

La reproduccin de vdeo es muy similar a la reproduccin de audio, salvo dos


particularidades. En primer lugar, no es posible reproducir un clip de vdeo
almacenado como parte de los recursos de la aplicacin. En este caso deberemos
utilizar cualquiera de los otros tres medios (ficheros locales, streaming o proveedores
de contenidos). Un poco ms adelante veremos cmo aadir un clip de vdeo a la
tarjeta de memoria de nuestro terminal emulado desde la propia interfaz de Eclipse. En
segundo lugar, el vdeo necesitar de una superficie para poder reproducirse. Esta
superficie se corresponder con una vista dentro del layout de la actividad. Existen
varias alternativas para la reproduccin de vdeo, teniendo en cuenta lo que acabamos
de comentar. La ms sencilla es hacer uso de un control de tipo VideoView, que
encapsula tanto la creacin de una superficie en la que reproducir el vdeo como el
control del mismo mediante una instancia de la clase MediaPlayer. Este mtodo ser
el que veamos en primer lugar. El primer paso consistir en aadir el control
VideoView a la interfaz grfica de la actividad en la que queramos que se reproduzca
el vdeo. Podemos aadir algo como lo siguiente el fichero de layout correspondiente:

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 153

Dentro del cdigo Java podremos acceder a dicho elemento de la manera habitual, es
decir, mediante el mtodo findViewById(). Una vez hecho esto, asignaremos una
fuente que se corresponder con el contenido multimedia a reproducir. El control
VideoView se encargar de la inicializacin del objeto MediaPlayer. Para asignar un
video a reproducir podemos utilizar cualquiera de estos dos mtodos:

Una vez inicializado el control se puede controlar la reproduccin con los mtodos:
start()
stopPlayback()
pause()
seekTo()

La clase VideoView tambin incorpora el mtodo setKeepScreenOn(boolean)con la


que se podr controlar el comportamiento de la iluminacin de la pantalla durante la
reproduccin del clip de vdeo. Si se pasa como parmetro el valor true sta
permanecer constantemente iluminada.

El siguiente cdigo muestra un ejemplo de asignacin de un vdeo a un control


VideoView y de su posterior reproduccin. Dicho cdigo puede ser utilizado a modo de
esqueleto en nuestra propia actividad. Tambin podemos ver un ejemplo de uso de
seekTo(), en este caso para avanzar hasta la posicin intermedia del video.

En esta seccin veremos en ltimo lugar, tal como se ha indicado anteriormente, la


manera de aadir archivos a la tarjeta de memoria de nuestro dispositivo virtual, de tal
forma que podamos almacenar clips de vdeo y resolver los ejercicios propuestos para
la sesin. Se deben seguir los siguientes pasos:
En primer lugar el emulador debe encontrarse en funcionamiento, y por supuesto, el
dispositivo emulado debe hacer uso de una tarjeta SD.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 154

Grficos 2D y Aplicaciones Multimedia


Las libreras android.graphics.drawable y android.view.animation son proporcionadas
por Android para dibujar y animar imgenes y formas 2D.

Drawables
Se refiere a todo aquello que se puede dibujar. Es la clase de la cual heredan una
variedad de tipos de grficos, incluyendo BitmapDrawable, ShapeDrawable,
PictureDrawable, LayerDrawable y otros. Hay tres maneras distintas de instanciar una
clase Drawable.
Utilizar una imagen almacenada en el directorio de recursos de nuestro proyecto.
Utilizar un XML que define las propiedades del objeto para luego poder
recuperarlo mediante getDrawable() y el ID que se le asign en el XML.
o Utilizando los constructores propios de la clase.
Lxas libreras android.graphics.drawable y android.view.animation son
proporcionadas por Android para dibujar y animar imgenes y formas 2D.

ShapeDrawable

Se utiliza para realizar grficos simples en 2D y aplicarles estilos directamente


Desde el cdigo de nuestra aplicacin.

Al ser una clase que hereda de Drawable, se puede utilizar en el mismo contexto que
sta. Se pueden realizar por lo tanto clases View que dibujen formas personalizadas
gracias al mtodo onDraw() que incluye la clase ShapeDrawable.

Crear un reproductor mediaplayer


Crear una instancia de MediaPlayer y ejecutar el mtodo start() pasando la referencia
al recurso.
MediaPlayer mp= MediaPlayer.create(getApplicationContext (), R.raw.bundle);
mp.start();

Reproducir desde Stream


Crear una instancia de MediaPlayer y usar el mtodo setDataSource()wcon la
cadena que contiene el path al sistema local o la URL.
Utilizar prepare() y despus start()en la instancia.

MediaPlayer mp = new MediaPlayer();


mp.setDataSource( PATH_TO_FILE);
mp.prepare();
mp.start();

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 155

Grabar audio y video


Para ello se utiliza la clase MediaRecorder.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 156

Publicacin de software

Para publicar nuestras aplicaciones primero tenemos que empaquetarlas. Antes de


empaquetar debemos preparar el cdigo y comprobar que todo est correcto:

Nombre de la aplicacin, icono y versin.


Deshabilitar debugging en el AndroidManifest.xml (atributo
android:debuggable="false" del tag de application).
Eliminar cualquier mensaje de Log.
Pedir slo los permisos que de verdad la aplicacin use, y no ms de los
necesarios. Por supuesto, haber probado la aplicacin en terminales reales, a
ser posible en ms de uno.

Antes de comenzar con nuestra publicacin debemos aprender cmo funciona la


herramienta de control de aplicaciones de google denominado google play

Google Play Services


Es una aplicacin del sistema de Android que nos permitir tener el resto de
aplicaciones de nuestro terminal siempre actualizadas, ya que se encargar de
comprobar que todas las apps instaladas estn en la ltima versin disponible.

Las funciones principales de Google Play Services son la autentificacin de servicios


de Google, la sincronizacin de contactos, el acceso a la ltima configuracin de
privacidad del usuario, y los servicios basados en la ubicacin de mayor calidad y
menor potencia.

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 157

Modo de control de licencias por google play

Una vez publicado la aplicacin la licencia se valida con la librera de google play
cliente y este se comunica con el servidor de google

Firmar la aplicacin Android


Para firmar la aplicacin debes dar realizar el siguiente procedimiento

Prepara tu APK
Cuando ests listo para realizar cambios en el APK, asegrate de actualizar
tambin el Cdigo de versin de la aplicacin para que los usuarios existentes
reciban la actualizacin.

Utiliza la siguiente lista de verificacin para asegurarte de que el nuevo APK


est listo para actualizar a los usuarios existentes:

El nombre de paquete del archivo APK actualizado debe ser el mismo que el
de la versin actual.

El cdigo de versin debe ser superior al cdigo de la versin actual. Obtn


ms informacin sobre cmo crear versiones de tu aplicacin.

La firma del archivo APK actualizado debe coincidir con la firma de la versin actual.
Para comprobar que el archivo APK utiliza la misma certificacin que la versin
anterior, puedes ejecutar el siguiente comando en ambos archivos APK y comparar los
resultados:

$ keytool -genkey -v -keystore nombredenuestrakeystore.keystore


-alias aliasdenuestrakeystore -keyalg RSA -keysize 2048 -validity 10000

Si los resultados son idnticos, significa que ests utilizando la misma clave y que
puedes continuar. Si los resultados son diferentes, tendrs que volver a firmar el
archivo APK con la clave correcta.

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 158

Publicar Aplicaciones
1. Ingresar a tu cuenta de Gmail
2. Ingresar a la consola de publicaciones de google play
https://play.google.com/apps/publish/

1. Agregar un nombre
2. Dar click en Preparar Ficha de play store
https://play.google.com/apps/publish/

3. Ubicar clave de API pblica

CARRERAS PROFESIONALES CIBERTEC


DESARROLLO DE APLICACIONES MVILES I 159

VII. BIBLIOGRAFA DEL CURSO

Bsica

GIRONS, Jess Tomas


2013 El gran libro de Android 3era Edicin.
Mxico: Alfa y Omega.

GARGENTA, Marko
2011 Learning Android (245 pages)
United States of America: OReilly Media, Inc.

HODSON, Ryan
2014 Android Programming Succinctle.
United States of America: Syncfusion Inc.

THOMAS, Erl
2010 Service Oriented Architecture: A field Guide to integrating XML and Web
Services.
United States of America Canada: Prentice Hall

SMYTH, Neil
2014 Android 4.4 App Development Essentials (47 pages). Lean Publishing

Bibliografa Electrnica

SATYA, Komatineni y MACLEAN, Dave


2012 Expert Android. (Consulta: 22 de enero 2015)
United States of America: Apress Inc.
Recuperado de:
http://androidbook.com/akc/display?url=ShowAttachmentsIMPURL&reportId=442
3&downerUserId=satya&order_by_format=name

ANDROID Developer
2014 Sitio web oficial de desarrollo Android. (Consulta: 27 de Diciembre
2014)(http://developer.android.com/index.html)

LPEZ, Victoria
2010 Introduccin a Android (117 pginas). (Consulta: 25 de enero 2015)
Espaa: Grupo Tecnologa CM (Universidad Complutense de Madrid)
Recuperado de:
http://pendientedemigracion.ucm.es/info/tecnomovil/documentos/android.pdf

Complementara

MENG LEE, Wei


2013 Android Application Development Cookbook (385 pages).
Indianpolis, Indiana EEUU: John Wiley & Sons, Inc.

MENG LEE, Wei


2012 Beginning Android 4 Application Development.
United States of America: John Wiley & Sons, Inc.

APRESS AND Commonsware

CIBERTEC CARRERA DE ELECTRICIDAD


DESARROLLO DE APLICACIONES MVILES I 160

2010 Beginning Android 4.


United States of America: Apress Inc.

GARGENTA, Marco
2011 Learning Android Building applications for be Android Market.
United States of America: OReilly Media, Inc.

RETO, Meir RETO (2012).


2012 Android 4 Application Development.
United States of America - Indianapolis, Indiana: John Wiley & Sons, Inc.

CARRERAS PROFESIONALES CIBERTEC

You might also like