TOMO I - Repositorio CISC - Universidad de Guayaquil

Transcripción

TOMO I - Repositorio CISC - Universidad de Guayaquil
TOMO I
Línea de Investigación
Redes y Sistema Operativo
Nombre del egresado
Antonio Nicolás Rodríguez Andrade
Nombre del Tema
Evaluación de la plataforma Android para dispositivos móviles
Número de Proyecto
9
Nombre del Tutor
Ing. David Benavides
i
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS
CARRERA DE INGENIERIA EN SISTEMAS
COMPUTACIONALES
EVALUACIÓN DE LA PLATAFORMA ANDROID PARA
DISPOSITIVOS MÓVILES
TESIS DE GRADO
Previa a la obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
ANTONIO NICOLAS RODRIGUEZ ANDRADE
TUTOR: ING. DAVID BENAVIDES
GUAYAQUIL – ECUADOR
2010
ii
Guayaquil, 11 de octubre del 2010
APROBACION DEL TUTOR
En mi calidad de Tutor del trabajo de investigación, “Evaluación de la plataforma
Android
para
dispositivos
móviles”
elaborado
por
el
Sr.
Antonio Nicolás Rodríguez Andrade, egresado de la Carrera de Ingeniería en
Sistemas Computacionales, Facultad de Ciencias Matemáticas y Físicas de la
Universidad de Guayaquil, previo a la obtención del Título de Ingeniero en Sistemas,
me permito declarar que luego de haber orientado, estudiado y revisado, la Apruebo
en todas sus partes.
Atentamente
………………………………….
Ing. David Benavides
TUTOR
iii
DEDICATORIA
El presente trabajo de tesis se lo dedico a
mi familia, quienes son partícipes de este
logro, gracias a ellos el concluir mi carrera
universitaria es una realidad.
iv
AGRADECIMIENTO
Quiero comenzar dando gracias a Dios por
permitirme vivir y tener una familia única y
maravillosa.
Gracias a mis padres por darme el regalo de
la vida y por estar siempre conmigo. A mi
padre porque además de darme su amor y
sus consejo me apoyó con los recursos
monetarios para llegar a esta instancia. A mi
madre, por todo su amor y comprensión, la
persona en que me he convertido es un
reflejo de sus enseñanzas. A mi hermana
Evelyn, por preocuparse por mí, a mi
abuelito Antonio por todo lo que ha hecho
por la familia.
Gracias a mis profesores por transmitirme
sus conocimientos y permitirme realizar
como profesional. A mi tutor de tesis, el Ing.
David Benavides, por guiarme en este
proceso.
Gracias a Verónica por su amor y su
compañía, a todos los buenos amigos que
hice en las aulas, muchas gracias por estar
conmigo durante todo este tiempo en los que
hemos vivido momentosfelices y tristes.
v
TRIBUNAL DE GRADO
Ing. Fernando Abad Montero
Ing. Juan Chanabá Alcócer
DECANO DE LA FACULTAD
DIRECTOR
CIENCIAS MATEMATICAS Y FISICAS
Ing. Luis Choez Acosta
MIEMBRO DEL TRIBUNAL
Ing. Jorge Medina
MIEMBRO DEL TRIBUNAL
Ing. David Benavides López
AB. José Júpiter Wiles
MIEMBRO DEL TRIBUNAL (TUTOR)
SECRETARIO
vi
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS
CARRERA DE INGENIERIA EN SISTEMAS
COMPUTACIONALES
EVALUACIÓN
DE LA PLATAFORMA
ANDROID PARA DISPOSITIVOS MÓVILES
Proyecto de trabajo de grado que se presenta como requisito para optar por el título de
INGENIERO en Sistemas Computacionales
Autor/a:
C.I.
Tutor:
Guayaquil, octubre del 2010
vii
CERTIFICADO DE ACEPTACIÓN DEL TUTOR
En mi calidad de Tutor del Primer Curso de Fin de Carrera, nombrado por el
Departamento de Graduación y la Dirección de la Carrera de Ingeniería en Sistemas
Computacionales de la Universidad de Guayaquil,
CERTIFICO:
Que he analizado el Proyecto de Grado presentado por el/la egresado(a)
Rodríguez Andrade Antonio Nicolás, como requisito previo para optar por el título de
Ingeniero cuyo problema es:“Evaluación de la plataforma Android para dispositivos
móviles”considero aprobado el trabajo en su totalidad.
Presentado por:
Rodríguez Andrade Antonio Nicolás
Cédula de ciudadanía N°
Tutor: Ing. David Benavides
Guayaquil, octubre del 2010
viii
ÍNDICE GENERAL
CARATULA .................................................................................................................................. i
DEDICATORIA ............................................................................................................................ iii
AGRADECIMIENTO .................................................................................................................... iv
UNIVERSIDAD DE GUAYAQUIL .................................................................................................. vi
CERTIFICADO DE ACEPTACIÓN DEL TUTOR.............................................................................. vii
ÍNDICE GENERAL ..................................................................................................................... viii
ÍNDICE DE CUADROS ............................................................................................................... xiv
ÍNDICE DE GRÁFICOS ................................................................................................................ xv
UNIVERSIDAD DE GUAYAQUIL ................................................................................................ xix
UNIVERSIDAD DE GUAYAQUIL ................................................................................................. xx
INTRODUCCIÓN......................................................................................................................... 1
CAPÍTULO I ................................................................................................................................ 1
El PROBLEMA ............................................................................................................................ 1
1.1UBICACIÓN DEL PROBLEMA EN UN CONTEXTO .............................................................. 1
1.2SITUACIÓN CONFLICTO NUDOS CRÍTICOS ....................................................................... 4
1.3CAUSAS Y CONSECUENCIAS DEL PROBLEMA ................................................................... 6
1.4DELIMITACIÓN DEL PROBLEMA ....................................................................................... 7
1.5FORMULACION DEL PROBLEMA ...................................................................................... 8
1.6EVALUACIÓN DEL PROBLEMA ........................................................................................ 10
1.7OBJETIVOS ...................................................................................................................... 12
1.7.1 OBJETIVO GENERAL................................................................................................ 12
1.7.2 OBJETIVOS ESPECÍFICOS......................................................................................... 12
1.8 ALCANCES...................................................................................................................... 14
1.8.1 ALCANCES ADICIONALES ........................................................................................ 18
1.9JUSTIFICACIÓN E IMPORTANCIA .................................................................................... 22
CAPITULO II ............................................................................................................................. 25
MARCO TEÓRICO ................................................................................................................ 25
2.1ANTECEDENTES DEL ESTUDIO........................................................................................ 25
ix
2.2 FUNDAMENTACION TEORICA ....................................................................................... 26
2.2.1 Dispositivo móvil .................................................................................................... 26
2.2.1.1 Tipos de dispositivos móviles .......................................................................... 26
2.2.1.2Categoría de dispositivos móviles .................................................................... 27
2.2.2Historia de los teléfonos celulares .......................................................................... 28
2.2.3 El papel de los teléfonos celulares en la computación ubicua .............................. 31
2.2.4 Introducción a la plataforma Android ................................................................... 32
2.2.4.1 Un poco de historia ......................................................................................... 32
2.2.4.2 ¿Qué es Android? ............................................................................................ 33
2.2.4.3 Versiones de la Plataforma ............................................................................. 33
2.2.4.4Licencias ........................................................................................................... 36
2.2.4.5Características distintivas ................................................................................ 38
2.2.4.6Arquitectura ..................................................................................................... 39
2.2.4.6.1 Aplicaciones ............................................................................................. 40
2.2.4.6.2 Framework de Aplicación......................................................................... 41
2.2.4.6.3 Librerías.................................................................................................... 42
2.2.4.6.4 Entorno de Ejecución (Runtime) .............................................................. 43
2.2.4.6.5 Kernel ....................................................................................................... 45
2.2.4.7Configuración del entorno de desarrollo de Android ...................................... 45
2.2.4.7.1 SDK (Software Development Kit) ............................................................. 46
2.2.4.7.2 API ............................................................................................................ 46
2.2.4.7.3 Instalación del plug-in ADTpara Eclipse Galileo ....................................... 47
2.2.4.7.4 Explorando las funcionalidades del IDE ................................................... 50
2.2.4.7.4.1 Perspectiva Java ................................................................................ 51
2.2.4.7.4.2 Perspectiva DDMS ............................................................................ 53
2.2.4.7.4.3La primera aplicación con Android: “Hola Mundo” ........................... 56
2.2.4.8Aplicaciones en Android .................................................................................. 60
2.2.4.8.1Consideraciones al desarrollar aplicaciones para dispositivos móviles.... 60
2.2.4.8.2 Componentes principales de una aplicación en Android ....................... 61
2.2.4.8.3Tipos de Aplicaciones en Android ............................................................. 62
x
2.2.4.8.4 Archivo de Configuración AndroidManifest.xml ...................................... 63
2.2.4.8.4.1 Estructura .......................................................................................... 63
2.2.4.8.4.2 Descripción de los elementos ........................................................... 64
2.2.4.8.5Actividad ................................................................................................... 70
2.2.4.8.5.1 Ciclo de Vida...................................................................................... 70
2.2.4.8.5.2 Creación de una Actividad ................................................................ 72
2.2.4.8.5.3 Iniciar una actividad ......................................................................... 73
2.2.4.8.5.4 Ejemplo de actividad incluido en el proyecto ................................... 74
2.2.4.8.5.5Clases de Actividad ............................................................................ 76
2.2.4.8.6Interfaces de Usuario (GUI’s) .................................................................... 77
2.2.4.8.6.1 Ejemplo de vistas incluido en el proyecto........................................ 80
2.2.4.8.7Ordenando el contenido de los Layouts ................................................... 83
2.2.4.8.7.1AbsoluteLayout .................................................................................. 83
2.2.4.8.7.1.1 Ejemplo del contenedor AbsoluteLayout .................................. 84
2.2.4.8.7.2FrameLayout ...................................................................................... 85
2.2.4.8.7.2.1Ejemplo del contenedor FrameLayout ....................................... 85
2.2.4.8.7.3LinearLayout ...................................................................................... 87
2.2.4.8.7.3.1 Ejemplo del contenedor LinearLayout ....................................... 87
2.1.4.8.7.4Relative Layout................................................................................... 88
2.2.4.8.7.4.1 Ejemplo del contenedor RelativeLayout .................................... 91
2.2.4.8.7.5 TableLayout ....................................................................................... 92
2.2.4.8.7.5.1 Ejemplo del contenedor TableLayout ........................................ 93
2.2.4.8.7.6Gallery (Layout tipo galería)............................................................... 94
2.2.4.8.7.6.1 Ejemplo del contenedor Gallery ................................................ 94
2.2.4.8.8Elementos GUI más utilizados .................................................................. 97
2.2.4.8.8.1 Ejemplo de elementos GUI más utilizados ....................................... 97
2.2.4.8.9Menús ..................................................................................................... 102
2.2.4.8.9.1 Ejemplos de Menús incluidos en el proyecto ................................ 103
2.2.4.8.9.1.1 Menú de Opciones ................................................................... 103
2.2.4.8.9.1.2 Menú Contextual ..................................................................... 104
xi
2.2.4.8.9.1.3 SubMenú ................................................................................. 107
2.2.4.8.9.1.4 Menú de opciones a través de un archivo XML ...................... 109
2.2.4.8.10Proveedor de Contenido (Content Provider) ........................................ 110
2.2.4.8.10.1 Ejemplo de proveedor de contenido incluido en el proyecto ..... 111
2.2.4.8.11Intentos (Intents) .................................................................................. 114
2.2.4.8.11.1 Ejemplos de intento incluido en el proyecto ............................... 115
2.2.4.8.12Adaptadores (Adapters)........................................................................ 117
2.2.4.8.13Base de Datos SQLite ............................................................................ 118
2.2.4.8.14BroadcastReciever ................................................................................ 121
2.2.4.8.14.1 Ejemplo del BroadcastReciever incluido en el proyecto............... 121
2.2.4.8.15Servicios ................................................................................................ 123
2.1.4.8.15.1 Ejemplo de servicio incluido en el proyecto ................................. 124
2.2.4.8.16Hilo (Thread) ......................................................................................... 127
2.2.4.8.16.1 Ejemplo de hilo incluido en el proyecto ....................................... 128
2.2.4.8.17Archivos (File)........................................................................................ 130
2.2.4.8.17.1 Ejemplo de archivos incluido en el proyecto ................................ 130
2.2.4.8.18Navegador WebKit ................................................................................ 134
2.2.4.8.18.1 Ejemplo del navegador WebKit incluido en el proyecto .............. 135
2.2.4.8.19Multimedia............................................................................................ 138
2.2.4.8.19.1 MediaPlayer .................................................................................. 140
2.2.4.8.19.1.1 Reproducción de archivos de audio ....................................... 140
2.2.4.8.19.1.2Reproducción de archivos de video ........................................ 140
2.2.4.8.19.1.3 Grabación de audio y video ................................................... 141
2.2.4.8.19.2Ejemplo incluido en el proyecto .................................................... 142
2.2.4.8.20Notificaciones ....................................................................................... 145
2.2.4.8.21Google Maps ......................................................................................... 147
2.2.4.8.22Opciones avanzadas de Android ........................................................... 149
2.2.4.8.22.1 Acceso al Hardware...................................................................... 149
2.3 FUNDAMENTACIÓN LEGAL ......................................................................................... 152
xii
2.3.1Constitución del Ecuador, Título VII, Capítulo Primero, Sección primera (Educación)
...................................................................................................................................... 152
2.3.2Constitución del Ecuador, Título VII, Capítulo Primero, Sección octava............... 152
2.4 HIPÓTESIS A CONTESTARSE ........................................................................................ 153
2.5 VARIABLES DE LA INVESTIGACIÓN .............................................................................. 154
2.5.1 Análisiscomparativo de Android, Symbian OS y Windows Mobile ...................... 154
2.5.1.1 Criterios básicos ............................................................................................ 155
2.5.1.2Criterios principales ....................................................................................... 156
2.5.1.3Criterios técnicos ........................................................................................... 158
2.5.1.4 Criterios de Interfaz de usuario................................................................... 159
2.5.2 Comparativa de los SDKs de Android y Symbian OS ........................................... 159
CAPITULO III .......................................................................................................................... 161
3.1 MODALIDAD DE LA INVESTIGACIÓN ........................................................................... 161
3.1.1TIPO DE INVESTIGACIÓN ....................................................................................... 161
3.2 POBLACIÓN Y MUESTRA ............................................................................................. 162
3.3 OPERACIONALIZACIÓN DE VARIABLES........................................................................ 164
3.4INSTRUMENTOS DE RECOLECCIÓN DE DATOS ............................................................ 165
3.5PROCEDIMIENTOS DE LA INVESTIGACIÓN ................................................................... 166
3.6RECOLECCIÓN DE LA INFORMACIÓN ........................................................................... 167
3.7PROCESAMIENTO Y ANÁLISIS....................................................................................... 167
3.8RESULTADO DE LA ENCUESTA REALIZADA................................................................... 168
3.9ANÁLISIS COMPARATIVO DEL SISTEMA OPERATIVO ANDROID, SYMBIAN OS Y
WINDOWS MOBILE ........................................................................................................... 173
3.9.1 Criterios básicos ................................................................................................... 173
3.9.1.1 Comparativa de los merados de aplicaciones móviles ................................. 173
3.9.2 Criterios principales ............................................................................................. 180
3.9.3 Clasificación basada en otros criterios ................................................................. 189
3.9.3.1 Criterios técnicos........................................................................................... 189
3.9.3.2 Criterios de interfaz de usuario..................................................................... 189
3.10LISTADO DE PERSONAS: APLICACIÓN IMPLEMENTADA UTILIZANDO EL SDK DE
ANDROID Y EL SDK DE SYMBIAN OS ................................................................................. 192
xiii
CAPÍTULO IV .......................................................................................................................... 217
4.1 CRONOGRAMA............................................................................................................ 217
4.2 PRESUPUESTO ............................................................................................................. 223
CAPÍTULO V ........................................................................................................................... 224
5.1 CONCLUSIONES Y RECOMENDACIONES...................................................................... 224
5.1.1 CONCLUSIONES .................................................................................................... 224
5.1.2 RECOMENDACIONES ............................................................................................ 229
xiv
ÍNDICE DE CUADROS
CUADRO NO. 1 .......................................................................................................................... 5
ESTADÍSTICA DE VENTA DE DISPOSITIVOS ANDROID ............................................................... 5
CUADRO NO. 2 ........................................................................................................................ 33
VERSIONES DE LA PLATAFORMA............................................................................................. 33
CUADRO NO. 3 ........................................................................................................................ 46
HERRAMIENTAS PARA EL DESARROLLO DE APLICACIONES .................................................... 46
CUADRO NO. 4 ........................................................................................................................ 57
RELACIÓN DE LAS VERSIONES DE ANDROID Y EL NIVEL DEL API ............................................ 57
CUADRO NO. 5 ...................................................................................................................... 139
FORMATOS MULTIMEDIA SOPORTADOS EN LA PLATAFORMA ............................................ 139
CUADRO No. 6 ....................................................................................................................... 164
MATRIZ DE OPERACIONALIZACIÓN DE VARIABLES ............................................................... 164
CUADRO NO. 7 ...................................................................................................................... 175
CARACTERÍSTICAS PRINCIPALES DE CADA TIENDA ............................................................... 175
CUADRO NO. 8 ...................................................................................................................... 175
MODELO DE INGRESOS MONETARIOS DE CADA TIENDA ..................................................... 175
CUADRO NO. 9 ...................................................................................................................... 176
VENTAS DE TELÉFONOS INTELIGENTES POR SISTEMA OPERATIVO (EN MILES) ................... 176
CUADRO NO. 10 .................................................................................................................... 190
RESULTADO COMPARATIVA CRITERIOS PRINCIPALES .......................................................... 190
CUADRO NO. 11 .................................................................................................................... 194
REQUERIMIENTOS MÍNIMOS DE HARDWARE PARA INSTALAR LOS SDK.............................. 194
CUADRO NO. 12 .................................................................................................................... 194
REQUERIMIENTOS MÍNIMOS DE SOFTWARE PARA INSTALAR LOS SDK ............................... 194
xv
ÍNDICE DE GRÁFICOS
GRÁFICO NO. 1 ........................................................................................................................ 23
LAS TELECOMUNICACIONES EN EL PAÍS ................................................................................. 23
GRÁFICO NO. 2 ........................................................................................................................ 30
EVOLUCIÓN DE LOS TELÉFONOS CELULARES.......................................................................... 30
GRÁFICO NO. 3 ........................................................................................................................ 39
ARQUITECTURA DE LA PLATAFORMA ANDROID..................................................................... 39
GRÁFICO NO. 4 ........................................................................................................................ 50
ESQUEMA DEL ENTORNO DE DESARROLLO ............................................................................ 50
GRÁFICO NO. 5 ........................................................................................................................ 51
PERSPECTIVA JAVA .................................................................................................................. 51
GRÁFICO NO. 6 ........................................................................................................................ 52
VISTA JAVADOC ....................................................................................................................... 52
GRÁFICO NO. 7 ........................................................................................................................ 53
PERSPECTIVA DDMS ................................................................................................................ 53
GRÁFICO NO. 8 ........................................................................................................................ 56
VENTANA PARA LA CREACIÓN DE UN NUEVO PROYECTO...................................................... 56
GRÁFICO NO. 9 ........................................................................................................................ 59
APLICACIÓN HOLAMUNDO ..................................................................................................... 59
GRÁFICO NO.10 ....................................................................................................................... 72
CICLO DE VIDA DE UNA ACTIVIDAD ........................................................................................ 72
GRÁFICO NO. 11 ...................................................................................................................... 76
EJEMPLO DE ACTIVIDAD ......................................................................................................... 76
GRÁFICO NO. 12 ...................................................................................................................... 78
DIAGRAMA DE CLASES DEL API VIEW DE ANDROID ............................................................... 78
GRÁFICO NO. 13 ...................................................................................................................... 82
GUI GENERADA A TRAVÉS DE CÓDIGO JAVA .......................................................................... 82
GRÁFICO NO. 14 ...................................................................................................................... 83
xvi
GUI GENERADA A TRAVÉS DE UN ARCHIVO XML ................................................................... 83
GRÁFICO NO. 15 ...................................................................................................................... 85
ESQUEMA ABSOLUTELAYOUT ................................................................................................. 85
GRÁFICO NO. 16 ...................................................................................................................... 86
ESQUEMA FRAMELAYOUT ...................................................................................................... 86
GRÁFICO NO. 17 ...................................................................................................................... 88
ESQUEMA LINEARLAYOUT ...................................................................................................... 88
GRÁFICO NO. 18 ...................................................................................................................... 92
ESQUEMA RELATIVELAYOUT................................................................................................... 92
GRÁFICO NO. 19 ...................................................................................................................... 94
ESQUEMA TABLELAYOUT ........................................................................................................ 94
GRÁFICO NO. 20 ...................................................................................................................... 96
ESQUEMA GALLERY................................................................................................................. 96
GRÁFICO NO. 21 .................................................................................................................... 100
ELEMENTOS MÁS USADOS EN LA CREACIÓN DE INTERFACES.............................................. 100
GRÁFICO NO. 22 .................................................................................................................... 101
WIDGETS PARA LA VISUALIZACIÓN DE RELOJES ................................................................... 101
GRÁFICO NO. 23 .................................................................................................................... 104
MENÚ DE OPCIONES ............................................................................................................. 104
GRÁFICO. 24 .......................................................................................................................... 106
MENÚ CONTEXTUAL ............................................................................................................. 106
GRÁFICO NO. 25 .................................................................................................................... 108
SUBMENÚ ............................................................................................................................. 108
GRÁFICO NO. 26 .................................................................................................................... 114
PROVEEDOR DE CONTENIDOS: LLAMADAS RECIENTES ........................................................ 114
GRÁFICO NO. 27 .................................................................................................................... 117
INTENTO: REALIZAR UNA LLAMADA TELEFÉNICA ................................................................. 117
GRÁFICO NO. 28 .................................................................................................................... 122
RECEPTOR DE DIFUSIÓN ....................................................................................................... 122
GRÁFICO NO. 29 .................................................................................................................... 127
xvii
SERVICIO ............................................................................................................................... 127
GRÁFICO NO.30 ..................................................................................................................... 130
HILO (THREAD) ...................................................................................................................... 130
GRÁFICO NO. 31 .................................................................................................................... 134
NAVEGADOR DE ARCHIVOS .................................................................................................. 134
GRÁFICO NO. 32 .................................................................................................................... 137
NAVEGADOR WEBKIT ............................................................................................................ 137
GRÁFICO NO. 33 .................................................................................................................... 145
REPRODUCCIÓN DE VIDEO ................................................................................................... 145
GRÁFICO NO. 34 .................................................................................................................... 147
NOTIFICACIÓN DE FINALIZACIÓN DE REPRODUCCIÓN DEL VIDEO ....................................... 147
GRÁFICO NO. 35 .................................................................................................................... 169
ENCUESTA: PLATAFORMAS OBJETIVO PARA EL DESARROLLO DE APLICACIONES................ 169
GRÁFICO NO. 36 .................................................................................................................... 170
ENCUESTA: NIVEL DE CONOCIMIENTO SOBRE ANDROID ..................................................... 170
GRÁFICO NO. 37 .................................................................................................................... 171
ENCUESTA: ORDEN DE IMPORTANCIA DE LAS CARACTERÍSTICAS QUE DEBE POSEER UNA
PLATAFORMA PARA TELÉFONOS INTELIGENTES .................................................................. 171
GRÁFICO NO. 38 .................................................................................................................... 177
PROPORCIÓN DE APLICACIONES PAGADAS VS LAS GRATUITAS ........................................... 177
GRÁFICO NO. 39 .................................................................................................................... 178
PRECIO PROMEDIO DE LAS APLICACIONES ........................................................................... 178
GRÁFICO NO. 40 .................................................................................................................... 197
ANDROID: PANTALLA INICIAL ............................................................................................... 197
GRÁFICO NO. 41 .................................................................................................................... 197
SYMBIAN OS: PANTALLA INICIAL.......................................................................................... 197
GRÁFICO NO. 42 .................................................................................................................... 198
ANDROID: MENÚ DE OPCIONES ........................................................................................... 198
GRÁFICO NO. 43 .................................................................................................................... 198
SYMBIAN OS: MENÚ DE OPCIONES ..................................................................................... 198
xviii
GRÁFICO NO. 44 .................................................................................................................... 198
ANDROID: AGREGAR PERSONA............................................................................................. 198
GRÁFICO NO. 45 .................................................................................................................... 198
SYMBIAN OS: AGREGAR PERSONA....................................................................................... 198
GRÁFICO NO. 46 .................................................................................................................... 199
ANDROID: CUADRO DE DIÁLOGO ......................................................................................... 199
GRÁFICO NO. 47 .................................................................................................................... 199
SYMBIAN OS: CUADRO DE DIÁLOGO ................................................................................... 199
GRÁFICO NO. 48 .................................................................................................................... 200
ANDROID: MOSTRAR DATOS ................................................................................................ 200
GRÁFICO NO. 49 .................................................................................................................... 200
SYMBIAN OS: MOSTRAR DATOS .......................................................................................... 200
GRÁFICO NO. 50 .................................................................................................................... 202
CICLO DE VIDA DE UNA APLICACIÓN EN SYMBIAN ............................................................... 202
xix
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS
CARRERA DE INGENIERIA EN SISTEMAS
COMPUTACIONALES
EVALUACIÓN
DE LA PLATAFORMA
ANDROID PARA DISPOSITIVOS MÓVILES
Autor: Antonio Rodríguez
Turtor: Ing. David Benavides
RESUMEN
Android es una plataforma para dispositivos móviles que se caracteriza por ser
abierta, completa y libre con el potencial para liderar en el mercado de los teléfonos
inteligentes. El objetivo principal del presente trabajo es evaluar sus características,
compararla con plataformas que operan en el mismo segmento y demostrar sus
funcionalidades. Como parte del contenido Ud. podrá encontrar una guía para
desarrollar aplicaciones para Android, conocer sobre sus principales componentes:
Actividades, Servicios, Intentos, Adaptadores y Receptores de Difusión. Visualizar
un estudio comparativo frente a otros sistemas operativos móviles así como
aplicaciones útiles como monitorear la ubicación de las personas desde un sitio web.
Concluir indicando que cada vez son más los tipos de equipos de los que Android
forma parte, lo que permite creer que esta plataforma puede ser la base para crear un
entorno en donde las personas puedan vivir interactuando con la tecnología sin notar
su presencia.
xx
UNIVERSIDAD DE GUAYAQUIL
FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS
CARRERA DE INGENIERIA EN SISTEMAS
COMPUTACIONALES
EVALUACIÓNDE LA PLATAFORMAANDROID PARA
DISPOSITIVOS MÓVILES
ABSTRACT
Android is a platform for mobile devices that is characterized by be open, complete
and free with the potential to lead in the smart phone market. The main objective of
this study is to evaluate its characteristics, compare it with platforms operating in the
same segment and demonstrate Android capabilities. As part of the content you can
find a guide to develop applications for Android, learn about its major components:
Activities, Services, Intents, Adapters and Broadcast Receivers. Show a comparative
study against other mobile operating systems and applications useful to monitor the
location of people from a website. Concludes that Android is part of more and more
types of equipment, which allows you to believe that this platform can be the basis
for creating an environment where people can live interacting with the technology
without noticing their presence.
1
INTRODUCCIÓN
En la última década la evolución de la tecnología ha dado un salto inesperado, la
necesidad de las personas por mejorar la comunicación y el intercambio de
información que comenzó con los inventos revolucionarios de la computadora
personal y la Internet, actualmente se traduce en términos de telefonía celular.
Según el informe de prensa de la consultora Analysys Mason 1del mes de abril del
2010, se prevé que para el año 2014 existirán 1.7 billones de teléfonos inteligentes en
el mundo. Considerando los resultados de este estudio uno debe formularse una
pregunta muy interesante ¿Cómo sacar provecho de esta tendencia?
Google, quien para mantener y aumentar su relevancia en el futuro decidió
incursionar en el mercado del Internet móvil nos proporciona la respuesta: Android,
una plataforma de software abierta para que nosotros, los desarrolladores de
aplicaciones podamos beneficiarnos evitando esas barreras artificiales que en otras
plataformas no nos permitían tomar todas las ventajas del acceso al hardware del
equipo, con el extra de poder lucrarnos distribuyéndolas en el market (mercado en
1
Analysys Mason es una empresa asesora en telecomunicaciones, tecnología y medios de
comunicación.
Fuente:
http://www.analysysmason.com/Research/Content/ViewPoints\RDMY0smartphones-forecast-OS-Apr2010
2
línea) que la misma empresa mantiene con el objetivo de aumentar las ventas y la
popularidad de su reciente producto.
CAPÍTULO I
El PROBLEMA
“EVALUACIÓN DE LA PLATAFORMA ANDROID PARA
DISPOSITIVOS MÓVILES”
1.1UBICACIÓN DEL PROBLEMA EN UN CONTEXTO
Dentro de los dispositivos móviles, los smartphones2o teléfonos inteligentes forman
parte de la revolución tecnológica más silenciosa que ha ocurrido en el mundo, estos
equipos que originalmente formaban parte de las herramientas de trabajo de los
ejecutivos hoy en día son una opción popular para cualquier consumidor.
Android es una tecnología prometedora, tanto para los usuarios de teléfonos celulares
inteligentes así como para las personas interesadas en hacer negocios y desarrollar
aplicaciones sobre ella. El problema central del presente trabajo es realizar un estudio
sobre esta plataforma, determinar cuáles son las ventajas y desventajas que posee
frente a Symbian OS y Windows Mobile, plataformas que operan en el mismo
mercado, y como pueden beneficiarse los usuarios ya antes mencionados. Además de
servir como un documento guía para los desarrolladores, principalmente
ecuatorianos, ya que el material de consulta existente en español es aun limitado.
2
Ver su definición en el Anexo 1: Glosario
4
Con un número elevado de empresas y sus tecnologías compitiendo en el medio se
podría pensar que los ganadores son los consumidores; sin embargo, los más
beneficiados somos los desarrolladores de aplicaciones que tenemos un mundo de
oportunidades, escoger la plataforma sobre la cual desarrollar y obtener mayores
beneficios puede resultar hasta cierto punto complicado, a lo largo de este documento
se expondrá porque Android constituye una de las mejores opciones.
1.2SITUACIÓN CONFLICTO NUDOS CRÍTICOS
Lo primero que se debe de especificar cuando se trata de evaluar dispositivos
móvileses que existen diferentes visiones de acuerdo al tipo de persona interesada,
pudiendo ser esta la empresa fabricante del equipo y de los accesorios, los
desarrolladores de aplicaciones o los usuarios finales que hacen uso de los mismos.
Android es una tecnología reciente pero con un futuro prometedor, como se puede
apreciar en el siguiente cuadro estadístico publicado en la nota de prensa del mes de
febrero del 2010 por parte de la empresa Gartner3,del año 2008 al 2009 el porcentaje
de participación de Android en el mercado mundial de los dispositivos móviles se
incrementó un 3.5% y se estima que para el año 2012 ocupe el segundo lugar en la
lista de aceptación por parte de los usuarios finales.
3
Gartner es una empresa asesora en telecomunicaciones, tecnología y medios de comunicación.
Fuente: http://www.gartner.com/it/page.jsp?id=1306513
5
CUADRO NO. 1
ESTADÍSTICA DE VENTA DE DISPOSITIVOS ANDROID
Compañía
Symbian
Research In Motion
iPhone OS
Microsoft Windows Mobile
Linux
Android
WebOS
Other OSs
Total
2008
Unidades
%
Vendidas Mercado
72,933.5
52.4
23,149.0
16.6
11,417.5
8.2
16,498.1
11.8
10,622.4
7.6
640.5
0.5
NA
NA
4,026.9
2.9
139,287.9
100.0
2009
Unidades
%
Vendidas Mercado
80,878.6
46.9
34,346.6
19.9
24,889.8
14.4
15,027.6
8.7
8,126.5
4.7
6,798.4
3.9
1,193.2
0.7
1,112.4
0.6
172,373.1
100.0
Elaboración: Antonio Rodríguez Andrade
Fuente: Gartner
En este documentose expondrá información relevante que permita al lector conocer la
plataforma, visualizar de manera breve pero concisa sus prestaciones, qué factores
hacen que se distinga de las demás, y si en definitiva se convertirá en la favorita de
los desarrolladores, lo
que consecuentemente se traduce a los otros tipos de
interesados ya antes mencionados.
6
1.3CAUSAS Y CONSECUENCIAS DEL PROBLEMA
Andy Rubin, vicepresidente de ingeniería en Googley supervisor del proyecto
Android, la describe como:
La primera plataforma verdaderamente abierta y completa para
dispositivos móviles, dotada de todo el software para ejecutar enel
teléfono móvil, pero sin los obstáculos de propiedad que han
obstaculizado la innovación de la tecnología móvil4.
Al ser una carrera tecnológica no nos podemos quedar atrás en la tecnología, con la
proliferación dela Internet y la comunicación inalámbrica se abren nuevos horizontes
y oportunidades, Android constituye una de ellas.Uno de los grandes inconvenientes a
la hora de desarrollar aplicaciones para dispositivos móviles es el hecho de las
empresas propietarias del sistema operativo no proporcionan el mismo trato tanto
para las aplicaciones nativas así como las realizadas por terceros, además de bloquear
el acceso al hardware del equipo. Esta situación puede resultar frustrante para los
desarrolladores. Sin embargo, Android rompe estas barreras y proporciona un entorno
de desarrollo con igualdad de condiciones para todos los desarrolladores.
4
Texto extraído y traducido al español el 4 de abril del 2010, la versión original se encuentra en el
idioma inglés y puede ser visualizada en http://googleblog.blogspot.com/2007/11/wheres-mygphone.html.
7
1.4DELIMITACIÓN DEL PROBLEMA
El estudio se desarrolla dentro del campo de la tecnología de los dispositivos móviles,
específicamente en el área de los teléfonos inteligentes. El aspecto central es evaluar
Android. Para el desarrollo de los ejemplos demostrativos incluidos en el presente
estudio se utiliza la versión 1.6 de Android, Donut, esto significa que las aplicaciones
podrán ejecutarse en cualquier dispositivo que posea esta versión o cualquier versión
superior sin presentar ningún inconveniente, es importante mencionar que el idioma
de las mismas en cualquier región donde se utilicen será el español, sin embargo
Android posee el mecanismo para permitir la internacionalización del software
desarrollado sobre ella, este tema está fuera del alcance de este documento, pero
podrá
encontrar
buenas
referencias
en
el
siguiente
enlace:
http://developer.android.com/guide/topics/resources/localization.html.
Actualmente los teléfonos celulares son un elemento indispensables para las personas,
muchas de sus tareas diarias requieren de las prestaciones que estos dispositivos
proporcionan. La lucha de las grandes compañías por ocupar mayor volumen de
usuarios en el mercado de los teléfonos inteligentes permite que con mayor frecuencia
y menor tiempo aparezcan nuevas tecnologías o se mejoren las que existen. Android
es una plataforma avalada principalmente por Google y que en el corto tiempo que
tiene en el medio ha logrado alcanzar un porcentaje importante en los mercados de los
países en que ya se encuentra disponible.
8
El estudio de Android se basará en documentar sus componentes, los fundamentos
para el desarrollo de aplicaciones, así como compararlo con los sistemas operativos
Symbian OS y Windows Mobile. Todas las aplicaciones desarrolladas durante el
presente estudio podrán ser ejecutadas en el emulador incorporado en su SDK5con la
finalidad de que los interesados puedan evaluar de manera visual su comportamiento
y las bondades que nos proporciona.
1.5FORMULACION DEL PROBLEMA
¿Es Android el futuro de la computación móvil y la oportunidad que esperaban los
desarrolladores ecuatorianos para explotar sus aplicaciones?Uno de los mayores
inconvenientes de las plataformas para dispositivos móviles es que las empresas
dueñas de la tecnología restringen el acceso al hardware para las aplicaciones
desarrolladas por terceros, además de limitar los equipos sobre los cuales se pueden
ejecutar los sistemas operativos que forman parte de estas plataformas. Google ha
demostrado que tener dispositivos disponibles para diferentes compañías hace la
diferencia entre un buen desempeño y la dominación absoluta. El hecho de que la
plataforma Android sea de código abierto y que se ejecuta en múltiples dispositivos
en múltiples redes de operadores le han permitido ganar una cuota de mercado más
rápido en comparación con una plataforma con una única compañía como el iPhone
OS.
5
Ver su definición en el Anexo 1: Glosario
9
Los aspectos destacados del estudio son considerados a una perspectiva a corto plazo,
la llegada de Android al Ecuador ya es una realidad, se espera que durante la etapa de
masificación de los usuarios de esta tecnología los desarrolladores ecuatorianos
puedan hacer uso de este estudio para obtener réditos.
Para responder a la pregunta inicial se realizará una breve comparativa de Android
frente a otras plataformas, los criterios a evaluar corresponden a: criterios básicos,
principales, técnicos y de interfaz de usuario, que se detallan en el Capítulo 3 del
documento en cuestión. A nivel de los desarrolladores, que es en donde se pone
mayor énfasis, se desarrollará una pequeña aplicación para Android y Symbian OS,
con el propósito de comparar los procesos en cada plataforma, orientados a evaluar
SDK’s, ciclos de vida de las aplicaciones, cómo se manejan los eventos y los
mecanismos que se utilizan para el almacenamiento de la información.
Adicionalmente se documentarán las características y los beneficios de desarrollar
sobre esta plataforma, sustentándose en ejemplos prácticos que se pueden probar en el
emulador incluido en su SDK.
10
1.6EVALUACIÓN DEL PROBLEMA
Los aspectos generales de evaluación son:
Delimitado.-El estudio está orientado a demostrar las prestaciones de la plataforma
con el objetivo de que los desarrolladores ecuatorianos lo utilicen como medio de
consulta. En lo que respecta al sistema operativo incluido en la pila de software se
realizará una comparativa contrastándolo con los sistemas operativos móviles
Symbian OS y Windows Mobile.También se comparará el ciclo de vida y los
procesos involucrados en el desarrollo de programas tanto para Android como para
Symbian OS.
Evidente.-Los resultados del estudio podrán ser visibles a lo largo del documento, se
utilizarán cuadros estadísticos cuando sea relevante y se documentarán las
demostraciones prácticas para facilitar la comprensión de los temas tratados.
Concreto: Los temas expuestos se abordarán directamente con el propósito de
facilitar la comprensión del lector, el contenido del estudio requiere tener
fundamentos de programación para su total entendimiento ya que está dirigido
principalmente para desarrolladores.
11
Factible.-El alcance del proyecto esta ajustado para ser realizado en el corto tiempo
que se ha proporcionado para el desarrollo del mismo. En la sección 1.7 y 1.8 de este
capítulo se detallan los objetivos, las tareas y el alcance del presente trabajo.
Además, el SDK de Android proporciona un emulador que permite simular el
comportamiento de las aplicaciones que se van a ejecutar sobre los dispositivos con el
fin de que cualquier persona interesada en la tecnología pueda hacer pruebas con ella.
Identifica los productos esperados.- El resultado del estudio busca demostrar de
manera objetiva las capacidades de Android, contrastarlo con otras plataformas que
compiten en el mismo mercado,además de presentar aplicaciones que sustenten la
investigación.
Original:En un futuro no muy lejano, las necesidades de independencia de los
usuarios del cableado se van a hacer realidad y serán los dispositivos móviles los
preferidos de los usuarios para realizar los procesamientos de datos en sus tareas
cotidianas. Basado en este contexto, el estudio es original en nuestro país, ya que se
realizará sobre una tecnología joven,como precedente, en el Ecuador recientemente
hicieron su arribo los primeros teléfonosAndroid, el viernes 25 de junio del 20106.
6
Fuente: http://www.eluniverso.com/2010/06/25/1/1431/primer-telefono-sistema-operativo-androidecuador.html
12
1.7OBJETIVOS
1.7.1 OBJETIVO GENERAL
Evaluar las características de la plataforma Android y las facilidades que proporciona
a los desarrolladores en la creación de aplicaciones para teléfonos celulares
inteligentes haciendo uso de un API7y un entorno de desarrollo robusto.
1.7.2 OBJETIVOS ESPECÍFICOS
Para la consecución del objetivo general será necesario:
Explorar el SDK de Android y su integración con Eclipse como IDE8de
desarrollo.
Desarrollar una guía de introducción para la creación de aplicaciones sobre
esta plataforma con el propósito de que el lector del presente trabajo de Tesis
tenga una base de referencia.
Efectuar un estudio comparativo de Android frente a dossistemas operativos
para teléfonos inteligentes que operan en el mismo mercado objetivo:Symbian
OS y Windows Mobile, el primero de ellos un sistema operativo que al igual
7
Ver su definición en el Anexo 1: Glosario
Ver su definición en el Anexo 1: Glosario
8
13
que Android es de código abierto, líder en ventas mundiales, como lo indica la
empresa Gartner en su reporte del mes de mayo del 2010 y lo reafirma la
empresa Canalys9en su reporte del mes de de agosto del mismo año, el
segundo un sistema operativo que a diferencia de Android es propietario de
Microsoft, y que estádiseñado para ser algo similar a
las versiones de
escritorio.
Implementar una pequeña aplicación para los sistemas operativos Symbian OS
y Android con el propósito de comparar:
 SDK’s
 Ciclo de vida de las aplicaciones
 Librerías
 Almacenamiento persistente de datos
 Manejo de eventos
Programas demostrativos:
 Desarrollar una aplicación que indique la posición en donde se encuentra
el dueño del equipo haciendo uso de GoogleMaps y la opción del GPS.
 Desarrollar una aplicación que permita visualizar una lista de los lugares
(ciudades) en donde han ocurrido terremotos en el último día. A su vez
tener corriendo un servicio que permita notificar al usuario que ha
9
Canalys es una empresa independiente centrada en tecnología, que ofrece inteligencia de negocios,
análisis y consulta estratégica sobre tendencias en un amplio rango de mercados de tecnología
14
ocurrido uno de estos eventos, la acción para notificarlo puede ser mostrar
una ventana de notificación.
Para realizar esta acción se utilizará como fuente para obtener los datos
la
página
web:http://earthquak.usgs.gov/eqcenter/catalogs/1day-
M2.5.xml.
 Realizar un velocímetro, una aplicación que permitirá visualizar el cambio
de velocidad de la persona haciendo uso del GPS incluido en el hardware
del equipo y basándose en la distancia recorrida durante lapsos de tiempo.
1.8 ALCANCES
El presente documento detalla el proceso para configurar Eclipse Galileo como el
entorno de desarrollo de Android, así como una breve descripción de las
funcionalidades que nos proporciona el IDE a nosotros los desarrolladores de
software para la creación de aplicaciones en esta plataforma.
La guía de referencia para el desarrollo de aplicaciones de Android explicará a
manera de introducción los siguientes temas:
 El uso y configuración de los componentes fundamentales para el
desarrollo de una aplicación en Android.
15
 El tratamiento de GUIs10, proveedores de contenidos, adaptadores,
intentos, notificaciones, SQLite y multimedia, desarrollando pequeñas
aplicaciones demostrativas para los tópicos previamente mencionados.
 Interacción con el API de Google, GoogleMaps.
 Las opciones avanzadas: Acceso al hardware del equipo y accesos al
kernel11.
El estudio comparativo de Android frente a los sistemas operativos Symbian OS y
Windows Mobile se realizará en base a los siguientes criterios:
Criterios básicos: mercado disponible a nivel de: usuario final, desarrolladores
y empresas desarrolladoras de equipos, basándose en datos estadísticos a nivel
mundial.
Criterios principales: portabilidad, confiabilidad, conectividad, tamaño del
kernel, seguridad y características que lo distinguen de los demás.
Criterios técnicos: administración de energía y capacidad multitarea.
Criterios de interfaz de usuario: personalización y diseño.
La aplicación “Listado de Personas” que se desarrollará tanto para Android y
Symbian OS deberá:
10
Ver su definición en el Anexo 1: Glosario
Ver su definición en el Anexo 1: Glosario
11
16
Permitir el ingreso de información de la persona: nombre, apellido, cédula,
teléfono y dirección.
Almacenar la información utilizando el mecanismo que proporciona el
sistema operativo para el almacenamiento persistente de datos.
Listar las personas que están almacenadas en el sistema en la pantalla
principal.
Eliminar registros de las personas.
Aplicaciones demostrativas
Antes de detallar las funcionalidades de las aplicaciones es importante recalcar que
las mismas serán desarrolladas sobre la versión 1.6 de la plataforma.
Aplicación “Localización GPS”
La presente aplicación deberá:
Obtener las coordenadas del GPS del equipo.
Actualizar la información de manera automática cuando la persona se
desplace 10 metros de la última coordenada geográfica leída.
Presentar la ubicación al usuario del equipo de manera narrativa y a su vez
en el mapa provisto por el API de Google Maps.
17
Aplicación “Visualizador de Terremotos”
La presente aplicación deberá:
Ejecutarse de manera automática cuando el sistema operativo termina de
bootear.
Acceder
a
la
página
http://earthquake.usgs.gov/earthquakes/catalogs/1day-M2.5.xml
web
para
extraer la información de los terremotos que han ocurrido durante el
último día.
Permitir que el usuario escoja la frecuencia con que la aplicación se
conecta al sitio para extraer la información así como la magnitud de los
terremotos que se presentarán en pantalla.
Formatear la información de la página para presentar los terremotos.
Mostrar en el mapa provisto por el API de Google Maps la ubicación
donde ocurrió el terremoto. Además de tener la opción de visualizar en el
mapa la ubicación de todos los terremotos de manera global.
Notificar al usuario de manera automática cuando un nuevo siniestro ha
ocurrido.
Aplicación “Velocímetro”
La presente aplicación deberá:
18
Obtener las coordenadas del GPS del equipo.
Calcular la velocidad con que el usuario se desplaza mediante los valores
que proporciona el GPS del equipo y el tiempo que se demora en llegar
desde el punto de partida hasta el punto de llegada.
1.8.1 ALCANCES ADICIONALES
Como un adicional del presente trabajo de tesis se desarrollarán las siguientes
aplicaciones:
Aplicación “Localizador Teléfono”
“Localizador Teléfono” es una aplicación que permite al usuario del equipo
solicitar a través de un mensaje SMS12la ubicación del dispositivo, el propósito es
el de tener un mecanismo para encontrar el equipo cuando se lo ha dejado
olvidado
o
cuando
se
ha
perdido,
siempre
y
cuando
esté
encendido.Adicionalmente si alguien llegase a cambiar la simcard del teléfono se
enviara de manera automática un mensaje al correo electrónico previamente
definido por el usuario indicando el suceso y el número de la nueva simcard. La
presente aplicación deberá:
12
Ver su definición en el Anexo 1: Glosario
19
Permitir que el usuario ingrese la contraseña o clave que la aplicación
buscará en los mensajes SMS entrantes.
Encriptar la contraseña con el algoritmo MD5.
Permitir que el usuario ingrese los datos del correo electrónico al que se
enviarán los mensajes informativos.
Permitir que el usuario establezca las preferencias para el envío de la
ubicación del equipo de manera automática (en background), puede ser a
través de un mensaje SMS al número de celular desde el cual se solicitó la
ubicación o al correo electrónico que previamente debió ser ingresado.
Almacenar
las
preferencias
utilizando
SharedPreferences
como
mecanismo para el almacenamiento persistente de datos.
Buscar en los mensajes SMS entrantes si se encuentra la clave para el
envío de la ubicación.
Enviar un correo electrónico de manera automática cuando se cambie la
simcard del equipo al correo definido por el usuario indicando este suceso
y el número de la nueva simcard ingresada.
Aplicación GPSFinder
La aplicación GPSFinder permite consultar la ubicación del equipo y por ende de
su portador desde el sitio web http://www.gpsfinder.zobyhost.com/Tesis/,
haciendo uso del API de Google Maps. Está compuesta por un aplicativo que se
20
ejecuta en los celulares Android y que proporciona las coordenadas de su
ubicación, además del sitio web en el que se encuentran los mantenedores de la
aplicación y la página de consulta.
El aplicativo “GPSFinderClient” que se instalará en los celulares Android deberá:
Ejecutarse de manera automática cuando el sistema operativo termina
de bootear.
Detener los servicios que se están ejecutando cuando se pierde la
conexión con la Internet y reanudar su ejecución cuando se
restablezca.
Obtener las coordenadas del GPS del equipo.
Conectarse al sitio web para el envío de las coordenadas con la
frecuencia de tiempo establecida en el sitio web.
Leer los parámetros de configuración del sitio web y actualizar los
hilos con los nuevos valores.
Presentar el estado de los servicios y del GPS al usuario portador del
equipo a través de una pantalla informativa.
El sitio web deberá:
Permitir actualizar los valores de los parámetros de configuración que
lee el aplicativo cliente instalado en los celulares Android.
21
Permitir el ingreso, modificación y eliminación de los usuarios
portadores de los teléfonos Android.
Permitir el ingreso, modificación y eliminación de los dispositivos que
serán contemplados por el sistema.
Permitir consultar la ubicación y el recorrido de los portadores de los
equipos por rango de fechas en el mapa provisto por el API de Google
Maps.
22
1.9JUSTIFICACIÓN E IMPORTANCIA
Según datos de la Secretaría Nacional de Telecomunicaciones (SENATEL) internet y
el uso de celulares se presentan como los dos rubros de mayor crecimiento
tecnológico en el Ecuador en los últimos tres años13.
En lo que a telefonía móvil se refiere, los datos son contundentes. Si en 2001 había
una densidad del 7%, en la actualidad esta llega al 89%, con algo más de 12.1
millones de líneas activas. Tan bien le ha ido a este sector que, comparando la
densidad de cobertura en el país, el Ecuador se encuentra a la par que Colombia (88%
de densidad) y Chile (86%) y muy por encima del Brasil (76%), Perú (69%) y Bolivia
(43%).
Adicionalmente, de acuerdo al resultado obtenido por el INEC (Instituto de
Estadísticas y Censos del Ecuador) tras su última encuesta de Tecnologías de la
Información y Comunicaciones TIC´S14realizado en diciembre de 2009 a 21.768
hogares ecuatorianos, a personas de cinco años en adelante, las conclusiones
obtenidas por la SENATEL se reafirman.
13
El
documento
puede
ser
leído
en
su
totalidad
en
la
página:
http://www.conatel.gov.ec/site_conatel/index.php?option=com_content&view=article&id=595:celular
es-e-internet-en-una-carrera-sin-trabas-en-ecuador&catid=46:noticias-articulos&Itemid=184
14
El
estudio
completo
se
puede
descargar
de
la
página:
http://www.inec.gov.ec/c/document_library/get_file?folderId=954942&name=DLFE-34202.pdf
23
GRÁFICO NO. 1
LAS TELECOMUNICACIONES EN EL PAÍS
Elaboración: Tomado de la fuente
Fuente: INEC
Análisis: Según esta encuesta, el uso del celular en el Ecuador subió 3.8 puntos más en
comparación a los datos de 2008, cuando se registró un uso de 69,9%.
En la publicación del 25 de enero del 2010, la empresa IDC15,cuyas siglas significan
International Data Corporation, determina que Android experimentará el crecimiento
más rápido de cualquier sistema operativo móvil. A partir de una base muy pequeña
de sólo 690.000 unidades en 2008, Android alcanzará 68millones de unidades
vendidas en el 2013, lo que constituye una tasa compuesta de crecimiento anual del
150.4%.
En el presente estudio se demuestra cómo obtener las coordenadas geográficas que
nos proporciona el GPS de los equipos, como enviar información a un sitio web,
utilizar Google Maps en Android, responder ante eventos que ocurren en el
15
IDC es un proveedor mundial de inteligencia de mercado, servicios de consultoría y eventos para la
tecnología de la información, telecomunicaciones y tecnología de consumo.
Fuente:
http://www.idc.com/getdoc.jsp?containerId=prUS22176610.
24
equipo,todo con la finalidad de que el lector amplíe sus horizontes, las oportunidades
de negocio existen, el precio promedio de las aplicaciones que se ofrecen en el market
de Android es de $3.50, pero el mercado más prometedor es el de lasgrandes
empresas, un ejemplo del uso de equipos con Android sería el monitorear el recorrido
de sus agentes o abaratar costos de comunicación mediante la tecnología PUSH16
incluida en la versión 2.2 de la plataforma.
Basado en las premisas anteriores, al ser un proyecto nuevo y con un futuro
prometedor, a corto o mediano plazo, cuando esta tecnología tenga acogida en nuestro
medio, las empresas ecuatorianas de desarrollo de aplicaciones para dispositivos
móviles tendránla necesidad de capacitar o contratar gente con conocimientos sobre
Android para obtener una cuota del mercado. La importancia de este estudio radica en
explorar la plataforma y establecer una referencia de su potencial.
16
Estilo de comunicaciones sobre Internet donde la petición de una transacción se origina en el
servidor. Fuente: http://es.wikipedia.org/wiki/Tecnolog%C3%ADa_Push
CAPITULO II
MARCO TEÓRICO
2.1ANTECEDENTES DEL ESTUDIO
Google anunció la plataforma
Android y la liberación de su primer equipo de
desarrollo de software en noviembre del 2007 y el primer dispositivo que lo
ejecutaba, el G1, en octubre del 2008. Como se puede observar este producto es
relativamente joven y la cantidad de información en español aun es un poco limitada.
En la publicación realizada por Dot Com Infoway de novimbre del 2009, “Android
by 2012, A study on present and future of Google's Android” se realiza una breve
narrativa sobre la situación actual de la plataforma y las predicciones que en base a
proyecciones estadísticas posicionan a Android en segundo lugar de preferencia en el
mercado de los dispositivos inteligentes por detrás de Symbian para el año 2012.
El documento “A Spectrum White Paper: Thoughts on Google Android” publicado
por la empresa Spectrum Data Technologies en febrero del año 2008 describe de
manera detallada la arquitectura de Android y sirve como base para este documento
cuando se hace referencia al mismo tópico.
26
Adicionalmente, el estudio también se fundamenta en la información que se encuentra
disponible en la Internet y en una serie de libros de los cuales se hace referencia en la
sección bibliográfica.
2.2 FUNDAMENTACION TEORICA
2.2.1 Dispositivo móvil
Los dispositivos móviles son micro-ordenadores lo suficientemente ligeros para que
una persona los puedan transportar, con conexión intermitente o permanente a una red
y que necesitan de la capacidad de una batería para funcionar de manera autónoma.
También se los conoce como computadoras de mano.
2.2.1.1 Tipos de dispositivos móviles
Teléfonos celulares.- equipos inalámbricos electrónicos que tienen como
función primordial recibir y realizar llamadas, pero que también permiten
enviar y recibir mensajes, reproducir archivos multimedia, navegación por
Internet, etc.
PDAs.-su nombre proviene del acrónimo en inglés Personal Digital Assistant
que significa asistente personal digital, son organizadores electrónicos cuyas
funcionalidades incluyen agenda, calendario, gestión de contactos,creación de
27
documentos, juegos, correo electrónico, navegación por Internet, reproducción
de archivos multimedia, etc. La línea que los separa de los teléfonos celulares
es cada vez másdifusa.
Consolas.- estos dispositivos están orientados al entretenimiento, diseñados
con el propósito de permitir que los usuarios puedan jugar. Integran ciertas
funcionalidades de un PDA, como agenda, calendario, conexión a Internet y
reproducción de archivos multimedia. Como ejemplos se pueden mencionar la
Nintendo DSi y el PlayStation Portable (PSP) de Sony.
2.2.1.2Categoría de dispositivos móviles
Debido a la gran diversidad de equipos y a las prestaciones que proporciona, en el
año 2005,T38 y DuPont Global Mobility InnovationTeam propusieron los siguientes
estándares de dispositivos móviles:
Dispositivo Móvil de Datos Limitados: dispositivos que tienen una pantalla
pequeña, principalmente basada en pantalla de tipo texto con servicios de
datos generalmente limitados a SMS y acceso WAP17.
Dispositivo Móvil de Datos Básicos: dispositivos que tienen una pantalla de
mediano tamaño, que utilizan menús o navegación basada en íconos por
medio de una rueda o cursor, y que ofrecen acceso a e-mails, lista de
direcciones, SMS y un navegador web básico.
17
Ver su definición en el Anexo 1: Glosario
28
Dispositivo Móvil de Datos Mejorados: dispositivos que tienen pantallas
medianas a grandes, que están por encima de los 240 x 120 pixeles,
navegación de tipo stylus, y que además de proporcionar las mismas
características que el Dispositivo Móvil de Datos Básicos posee aplicaciones
nativas como aplicaciones de Microsoft Office Mobile
y aplicaciones
corporativas usuales, en versión móvil, como SAP18, portales intranet, etc.
2.2.2Historia de los teléfonos celulares
Basado en los artículos publicados en los sitioshttp://www.historyofcellphones.net,
http://cellphones.org/cell-phone-history.html
y
http://www.android.com
a
continuación se lista de manera cronológica y resumida la historia de los teléfonos
celulares:
El primer móvil que apareció en el mercado fue el MTA Phone fabricado por
Ericsson en el año de 1956, el mismo que tuvo un total de 125 usuarios entre
Estocolmo y Gotemburgo, Suecia. Debido a su peso, 40 kilogramos, estos aparatos
debían integrarse a un vehículo.
En 1973, Motorola presentó un prototipo del primer teléfono celular portátil del
mundo, diseñado por Martin Cooper, conocido como el “padre de la tecnología
18
Ver su definición en el Anexo 1: Glosario
29
celular”. Aquel teléfono media cerca de 30 centímetros de largo y pesaba casi 800
gramos. Fue lanzado al mercado en 1983 con el nombre de Motorola DynaTAC
8000X, tenía un costo de 3995 dólares, contaba con memoria para almacenar 30
números de teléfono y su batería proporcionaba solamente una hora de tiempo de
conversación.
Unos años después, en 1984, Nokia comercializó el Mobira Talkman que añadía un
maletín que le proporcionaba varias horas de autonomía, aunque su peso era de unos
10 kg.
En 1993 IBM y BellSouth introducen el Simon Personal Communicator, primer
teléfono móvil en contar con funciones de PDA. Era un teléfono paginador,
calculadora, libreta de direcciones, fax y dispositivo de correo electrónico, todo en un
mismo paquete. Pesaba alrededor de 500 gramos y su precio era de 900 dólares.
Luego en 1996 Motorola lanza al mercado su terminal StarTAC, el primer móvil en
formato clamshell, que se doblaba por la mitad, haciendo del mismo un teléfono
realmente compacto para ser transportado.
El Kyocera QCP6035 es considerado el precursor de los teléfonos inteligentes, fue un
impacto en el mercado a principios del 2001, costaba entre 400 y 500 dólares y fue el
30
primer teléfono basado en Palm OS. Poseía una modesta memoria de 8 Mb y una
pantalla monocromática.
En el 2004, el MotorolaRAZR V3 reaparece con un diseño ultradelgado y apariencia
metálica, dispositivo que hizo popular el uso de los teléfonos móviles entre todo tipo
de consumidor. Posteriormente, el 9 de enero de 2007 Apple presentó al mundo lo
que llamaron la reinvención del teléfono, el iPhone. Un dispositivo con un diseño
innovador, contaba con una pantalla sensible al tacto (touch-sensitive screen).
En octubre del 2008, Google introduce al mercado el dispositivo móvil G1, mismo
que estaba dotado del sistema operativo Android, desde su liberación inicial hasta la
actualidad se han liberado seis actualizaciones al sistema, siendo la última “Froyo”, la
cual incrementa de manera general el sistema, la memoria y el rendimiento, Nexus
One de HTC es uno de los teléfonos dotados con esta versión.
GRÁFICO NO. 2
EVOLUCIÓN DE LOS TELÉFONOS CELULARES
Elaboración: Antonio Rodríguez
Fuente:
http://www.webdesignerdepot.com/2009/05/the-evolution-of-cell-phone-design-between1983-2009
Análisis: En la gráfica se presentan las mejoras en el diseño físico de los teléfonos celulares con el
paso del tiempo
31
2.2.3 El papel de los teléfonos celulares en la computación ubicua
La computación ubicua es un cambio de paradigma donde la tecnología se vuelve
prácticamente invisible en nuestras vidas. De manera técnica, se define como un
modelo de interacción en el que el procesamiento de la información se integra a los
objetos cotidianos que son parte de nuestras actividades diarias.El ejemplo más
visible de este modelo lo constituyen los teléfonos celulares.
De acuerdo al pensamiento de Andy Rubin publicado en el blog oficial de Google,
http://googleblog.blogspot.com/2008/09/future-of-mobile.html, el futuro de los
dispositivos móviles está orientado a:
Alertas inteligentes.- basado en los sensores que poseen, los dispositivos serán
consientes de las situaciones que ocurren alrededor de las personas y les
notificará si alguna de ellas o todas requieren de su atención.
Realidad aumentada.- añadirán información virtual a la información física ya
existente con el propósito de proporcionar información que le puede ser útil
al usuario en la toma de decisiones.
Herramienta para el desarrollo.- debido a su gran crecimiento y a la expansión
de la cobertura de operadoras, los teléfonos colaborarán aun más en el eje
económico.
32
2.2.4 Introducción a la plataforma Android
2.2.4.1 Un poco de historia
Android Inc. era una pequeña compañía con sede en Palo Alto, California-Estados
Unidos, la cual trabajaba en el desarrollo de un sistema operativo para dispositivos
móviles basado en Linux, principalmente para ser utilizado en teléfonos celulares.
Google, el mayor motor de búsquedas de la Internet, cuya misión es la de organizar la
información del mundo, se ha enfocado continuamente en la innovación, y debido al
rápido crecimiento del mercado de celulares inteligentes, en julio del 2005 adquirió
Android Inc. e incorporó a su equipo de trabajo a los co-fundadores de la recién
adquirida compañía, Rich Miner, co-fundador de Wildfire Communications, Andy
Rubin, co-fundador de Danger (una compañía de servicio de software), Chris White,
un ingeniero de WebTV y
Nick Sears, quien fue vice presidente de T-
Mobile.Finalmente el 5 de noviembre del 2007 la Open Handset Alliance (OHA), un
consorcio de 34 empresas de tecnología (hasta ese instante) entre las que se
encuentran Google, HTC, Motorola, Intel, Qualcomm, Sprint Nextel, T-Mobile y
NVIDIA, fue fundada con el propósito de mejorar esta plataforma tecnológica y
brindar mejor experiencia a los usuarios de dispositivos móviles.
33
2.2.4.2 ¿Qué es Android?
Android es un entorno de software integrado para dispositivos móviles que incluye un
sistema operativo, un middleware y un conjunto de aplicaciones bases. Es la primera
plataforma móvil de código abierto que tiene el potencial de lograr avances
significativos en muchos mercados.
En su página oficial, la Open Handset Alliance indica que “Android fue diseñada
desde cero con el objetivo explícito de ser la primera plataforma abierta,
completa y libre creada específicamente para dispositivos móviles”19.
2.2.4.3 Versiones de la Plataforma
CUADRO NO. 2
VERSIONES DE LA PLATAFORMA
1,1
1,5
(Cupcake)
Basado en
Linux
Kernel
2.6.27
19
Fecha de lanzamiento 09 de febrero 2009
El 30 de abril de 2009, la actualización oficial 1.5 (Cupcake) para
Android fue lanzada. Esta versión incluía nuevas características y
actualizaciones de la interfaz de usuario:

Capacidad para grabar y ver videos en el modo cámara de vídeo.

Subir videos a YouTube y fotos a Picasa directamente desde el
teléfono.
Texto
extraído
y
traducido
el
15
http://www.openhandsetalliance.com/oha_overview.html
de
abril
del
2010
desde
34

Bluetooth A2DP20y AVRCP21de apoyo.

Capacidad para conectarse automáticamente a un auricular Bluetooth
a una distancia determinada.

Nuevos widgets y carpetas que pueden llenar las pantallas de Inicio

Transiciones de pantallas animadas.
El 15 de septiembre de 2009, el SDK 1.6 (Donut) fue liberado, esta
actualización incluía:

Experiencia mejorada del Market de Android.

Cámara integrada, cámara de vídeo y la interfaz galería.
Actualización de Búsqueda mediante voz, con una respuesta más
rápida y mayor integración con las aplicaciones nativas, incluyendo

1,6
(Donut)
Basado en
Linux
Kernel 
2.6.29
la capacidad de marcar los contactos.
Mejoras en la experiencia de búsqueda para permitir la búsqueda de
marcadores, historial, contactos y la web desde la pantalla de inicio.

Soporte tecnológico para CDMA / EVDO, 802.1x , VPN , y el motor
text-to-speech actualizado.

Soporte para resoluciones de pantalla WVGA.

Introducción de la herramienta de desarrollo GestureBuilder.
El 26 de octubre de 2009, el SDK 2.0 (Eclair) fue liberado. Los cambios
introducidos fueron los siguientes:

2.0/2.1 
(Eclair)
Basado en
Linux 
Kernel 
2.6.29
20
Velocidad del hardware optimizada.
Soporte para un número mayor de tamaños de pantalla y
resoluciones.
Renovación de la interfaz de usuario.
Nueva interfaz de usuario del navegador y soporte para HTML5.

Nueva lista de contactos.

Mejor relación blanco-negro para los fondos.

Mejora de Google Maps 3.1.2.

Soporte para Microsoft Exchange.
Ver su definición en el Anexo 1: Glosario
Ver su definición en el Anexo 1: Glosario
21
35

Soporte de flash para la cámara.

Zoom digital.

Clase MotionEvent mejorada para realizar un seguimiento a toques
múltiples.

Mejora de teclado virtual.

Bluetooth 2.1.

Fondos de pantalla en vivo (Live Wallpapers).
El SDK 2.0.1 fue lanzado el 3 de diciembre de 2009.
EL SDK 2.1 fue lanzado el 12 enero de 2010.
El 20 de mayo de 2010, el SDK 2.2 (Froyo) fue liberado. Los cambios
incluyen:

Optimización del rendimiento, memoria y velocidad del sistema
operativo.

Velocidad de las aplicaciones adicionales mejoradas gracias a la
implementación de JIT.

Integración del motor JavaScript V8 de Chrome con la aplicación
del navegador.
2,2
(Froyo) 
Basado en
Linux
Kernel

2.6.32
Mejoras del soporte técnico de Microsoft Exchange (políticas de
seguridad, auto-descubrimiento, GAL de búsqueda, sincronización
del calendario, borrado remoto).
Opción para deshabilitar el acceso a datos sobre la red.

Rápido intercambio entre múltiples idiomas de teclado y sus
diccionarios.

Marcación por voz y uso compartido de contactos a través de
Bluetooth.

Apoyo para las contraseñas numéricas y alfanuméricas.

Soporte a los archivos subidos en la aplicación del navegador.

Soporte para la instalación de aplicaciones a la memoria expandible

Adobe Flash 10.1.
Elaboración: Traducido del cuadro original de la fuente
Fuente: http://en.wikipedia.org/wiki/Android_(operating_system)
36
2.2.4.4Licencias
Una licencia de software es un contrato entre el licenciante y el licenciatario del
programa informático para utilizar el software cumpliendo una serie de términos y
condiciones establecidas dentro de sus cláusulas. Las licencias se clasifican en base a
dos criterios:
Según los derechos que cada autor se reserva sobre su obra
 Licencia de software de código abierto permisiva.- Se puede crear una
obra derivada sin que ésta tenga obligación de protección alguna como
la ASL(Apache Software License).
 Licencia de software de código abierto robustas
o Licencias de software de código abierto robustas fuertes.obliga a que las obras derivadas o modificaciones que se
realicen al software original se deban licenciar bajo los mismos
términos y condiciones de la licencia original, dentro de esta
clasificación se encuentra la GPL (General Public License) y la
(EPL) Eclipse Public License, esta última utilizada en Symbian
OS.
o Licencias de software de código abierto robustas débiles.obliga a que las modificaciones que se realicen al software
original se deban licenciar bajo los mismos términos y
condiciones de la licencia original, pero que las obras
37
derivadas que se puedan realizar de él puedan ser licenciadas
bajo otros términos y condiciones distintas.
 Licencia de software de código cerrado.- los propietarios establecen
los derechos de uso, distribución, redistribución, copia, modificación,
cesión y en general cualquier otra consideración que se estime
necesaria
 Software de dominio público.- Se permite uso, copia, modificación o
redistribución con o sin fines de lucro
Según su destinatario
 Licencia de Usuario Final.- EULA (End User License Agreement) por
sus siglas en inglés, licencia por la cual el uso de un producto sólo está
permitido para un único usuario, Windows Mobile hace uso de esta
licencia.
 Licencia de distribuidores.- le asigna derechos restringidos a un
comerciante de tipo comisionario para que venda el producto
(software) dando una remesa o comisión al fabricante.
Android está liberada bajo dos licencias diferentes de código abierto. El kernel Linux
versión 2.6 está publicado bajo la licencia GPL,como exige la concesión de kernel
del sistema operativo de código abierto.En cuanto a la plataforma Android, excepto el
núcleo, tiene licencia Apache (ASL).
38
2.2.4.5Características distintivas
Conforme se establece en el libro Beginning Android 2 de Mark L. Murphy, Android
se caracteriza por poseer:
Aplicaciones con Google Maps.- a pesar de que Google Maps es un producto
popular entre los dispositivos móviles, en Android es un componente atómico
y reusable para el desarrollo de aplicaciones.
Servicios en segundo plano.- Android permite crear aplicaciones que utilizan
un modelo basado en eventos, ejecutándose de manera silenciosa mientras
otras aplicaciones están siendo utilizadas, de tal manera que reaccionan sólo
cuando ocurre un evento específico como una llamada, la recepción de un
mensaje, etc.
Datos compartidos y comunicación entre procesos.- usando Intents
(Intentos) y Content Providers (Proveedores de Contenido) Android permite a
sus aplicaciones intercambiar mensajes, y compartir información. Por
seguridad y para mitigar cualquier riesgo, la información y los archivos son
privados para cada aplicación a menos que sea explícitamente compartida
mediante un mecanismo de seguridad basado en permisos.
Aplicaciones creadas por igual.-la característica más importante que tiene
Android, es la de no hacer ninguna diferencia entre las aplicaciones nativas y
aquellas desarrolladas por terceros, lo que le permite a los usuarios cambiar la
39
apariencia de sus equipos pudiendo incluso reemplazar todas las aplicaciones
nativas. Los accesos a los componentes de hardware no están restringidos.
2.2.4.6Arquitectura
GRÁFICO NO. 3
ARQUITECTURA DE LA PLATAFORMA ANDROID
Aplicaciones
Aplicaciones
Nativas
Aplicaciones de
Terceros
Aplicaciones de
Desarrolladores
Framework de Aplicación
LBS
Proveedores
de Contenido
Administrador
de Ventana
Administrador
de Actividades
Telefonía
P2P/XMPP
Notificaciones
Vistas
Administrador
de Paquetes
Administrador
de Recursos
Entorno de Ejecución
Librerías
Gráficos
Media
SSL & Webkit
Librerías
Android
libC
Sqlite
Administrador
de Superficie
Máquina
Virtual Dalvik
Kernel Linux
Drivers del
Hardware
Administración de
Memoria
Administración de
Procesos
Administración de
Poder
Elaboración: Traducido del cuadro original de la fuente
Fuente: http://developer.android.com/guide/basics/what-is-android.html
Análisis: La arquitectura de Android representauna pila de componentes, en el gráfico se muestran los
diferentes elementos que forman parte de cada una de las capas en que esta pila se divide.
40
2.2.4.6.1 Aplicaciones
En la capa superior de la arquitectura se encuentran las aplicaciones que se ejecutan
sobre el sistema operativo incluido en la plataforma. Estas aplicaciones pueden ser:
Aplicaciones nativas.-aquellas que vienen incorporadas en los equipos por
defecto. El siguiente listado muestra las aplicaciones nativas que posee todo
teléfono celular Android:
Cliente e-mail
Aplicativo de administración de SMS
Aplicativo PIM22 (Personal Information Management) que incluye lista de
contactos y calendario para la administración de la información personal
Navegador basado en WebKit
Reproductor de música y gestor de imágenes
Aplicativo para grabación de video
Calculadora
Alarma reloj
Aplicaciones desarrolladas por terceros.-generalmente empresas grandes
que crean aplicativospara la plataforma, como Facebook.
Aplicaciones creadas por desarrolladores independientes.
22
Ver su definición en el Anexo 1: Glosario
41
2.2.4.6.2 Framework de Aplicación
Proporciona las clases necesarias para el desarrollo de aplicaciones, así como una
abstracción genérica para el acceso al hardware. Adicionalmente administra la
interfaz de usuario y de aplicación.
LBS (Location Based Services).- estructura de soporte que las aplicaciones
pueden utilizar para determinar la ubicación del dispositivo y registrarse para
recibir actualizaciones.
Proveedor de Contenido (Content Providers).- componente que permiten
almacenar yrecuperar datosy hacerlosaccesiblea todas lasaplicaciones.
Administrador de Ventana (Window Manager).- componente encargado de
la gestión de la ventana.
Administrador de Actividades (Activity Manager).- encargado de
gestionarelciclo de vidade las aplicaciones.
Administrador de Paquetes (Package Manager).-permite gestionar los
paquetes de aplicación que se encuentran instalados en el equipo.
Telefonía.-proporciona las clases para el monitoreo de la información del
teléfono, como el tipo de red y el estado de la conexión.
P2P/XMPP.-API que permite utilizar servicios de comunicación punto a
punto (peer to peer) haciendo uso de una versión especializada del protocolo
XMPP (Extensible Messaging and Presence Protocol).
42
Administrador de Notificaciones (Notification Manager).-permite atodas
las aplicacionesmostraralertaspersonalizadasenlabarrade estado.
Vistas (Views).- Unamplio conjuntode elementosque se puedenutilizarpara
crear
una
aplicación,
incluidas
laslistas,
cajas
detexto,botones,
e
inclusounnavegadorwebembebido.
Administrador de recursos (Resource Manager).- permite el acceso a los
recursos que no son código,estos recursos pueden ser cadenas, gráficos y
archivos de diseño.
2.2.4.6.3 Librerías
Ejecutándose sobre el kernel se encuentran diversas librerías que pueden ser
utilizadas para la creación de aplicaciones.
Librerías para gráficos, que incluyen SGL y OpenGL para gráficos 2D Y 3D
respectivamente
Librería multimedia para la reproducción de medios de audio y vídeo
WebKit y SSL23para el navegador web integrado y la seguridad en Internet,
esta última escrita en C/C++
Libc escrita en C/C++
Librería SQLite para la utilización de base de datos
Administrador de superficie encargado de la gestión de la pantalla
23
Ver su definición en el Anexo 1: Glosario
43
2.2.4.6.4 Entorno de Ejecución (Runtime)
Es el motor de ejecución de las aplicaciones. Está compuesto por:
Librerías Android.- incluyen las librerías principales de Java, así como las
librerías específicas de Android.
Principales librerías de Java utilizadas en Android
java.lang.- clases fundamentales para el diseño del lenguaje de
programación Java
java.io.- capacidades de entrada y salida
java.net.- conexiones de red
java.util .- utilidades
java.text.- utilidades para el manejo de texto
java.math.- clases matemáticas y de manipulación de números
javax.net.- clases para el manejo de red
javax.security.- clases relacionadas a la seguridad
javax.xml.- clases para manejo de XML24basado en DOM
org.apache.- clases relacionadas con HTTP
org.xml.- clases para el manejo de XML basado en SAX
Librerías propias de Android
android.app.- modelo de acceso a las aplicaciones de Androi
android.content.-acceso y publicación de los datos en Android
24
Ver su definición en el Anexo 1: Glosario
44
android.net.- contiene la clase Uri, utilizada para acceder a contenidos
diversos
android.graphics.- gráficos primitivos
android.opengl.- clases OpenGL
android.os.- acceso al sistema operativo en el ambiente de desarrollo
de Android
android.provider.- clases para la administración de los proveedores
de contenido
android.telephony.- acceso a las capacidades telefónicas
android.text.- diseño de texto
android.util.- utilidades
android.view.- elementos UI
android.webkit.- funcionalidad del navegador
android.widget.- más elementos UI
Máquina Virtual Dalvik.- máquina virtual basada en registros que se ha
optimizado para garantizar que un dispositivo pueda ejecutar varias instancias
simultáneamente y de manera eficiente.
45
2.2.4.6.5 Kernel
El núcleo del sistema operativo, se encarga de administrar los servicios básicos,
incluidos
los
controladores
de
hardware,
proceso,
gestión
de
memoria,
seguridad, red y administración de energía. También proporciona una capa de
abstracción entre el hardware y el resto de la pila.
2.2.4.7Configuración del entorno de desarrollo de Android
Al igual que la mayoría de las aplicaciones para teléfonos celulares, las aplicaciones
de Android son desarrolladas en un ambiente cliente-objetivo (host-target). Es decir
que se desarrollan en una computadora en donde los recursos son abundantes, para
luego ser probadas en el dispositivo físico o en el emulador incluido en el SDK.
La primera consideración a la hora de desarrollar las aplicaciones son los sistemas
operativos sobre los cuales se puede instalar y ejecutar el SDK(esta información fue
extraída del sitiohttp://developer.android.com/sdk/requirements.html):
Windows XP (32-bit) o Vista (32- or 64-bit)
Mac OS X 10.5.8 (Sólo chips Intel)
Linux (probado en la versión Linux Ubuntu Hardy Heron)
46
Independientemente de cualquiera de los sistemas operativos listados en el párrafo
anterior, generalmente se necesitarán las siguientes herramientas:
CUADRO NO. 3
HERRAMIENTAS PARA EL DESARROLLO DE APLICACIONES
Herramienta
URL de descarga
Eclipse 3.4 (Ganymede) o 3.5 (Galileo)
http://www.eclipse.org/downloads
Java Development Kit (JDK)
http://java.sun.com/javase/downloads/index.jsp
Android Software Developer Kit
(SDK)
Android Developer Tool (ADT)
http://developer.android.com/sdk/index.html
http://developer.android.com/sdk/eclipse-adt.html
Elaboración: Antonio Rodríguez Andrade
Fuente: http://developer.android.com/sdk/requirements.html
2.2.4.7.1 SDK (Software Development Kit)
El
SDK
de
Android
es
distribuido
a
través
de
la
página
http://developer.android.com/sdk/index.html, se presenta como un archivo ZIP que
contiene las bibliotecas, herramientas de desarrollo, documentación de la plataforma
yvarias aplicaciones demostrativas.
2.2.4.7.2 API
Incluye las librerías Java y las propias de Android, mismas que fueron descritas
anteriormente en el numeral 2.2.4.6.4, “Entorno de Ejecución”.
47
2.2.4.7.3 Instalación del plug-in ADTpara Eclipse Galileo
El plug-in ADT (Android Development Tool) es el componente que permite agregar
las extensiones necesarias a Eclipse para su integración con las herramientas de
desarrollo de Android. Las instrucciones mostradas a continuación presentan las
opciones en inglés, considero que siempre se obtiene mayor beneficio utilizando las
herramientas en su lenguaje de origen. Sin embargo, las personas que deseen cambiar
el idioma al español pueden descargar un plug-in con este propósito.
1. Iniciar Eclipse
2. En la barra de menú seleccionar “Help → Install New Software”
3. En la nueva ventana que se presenta, al dar clic en “Add” aparecerá el cuadro
de diálogo “Add Site”, en donde se debe ingresar un nombre de referencia
para el plug-in y el URL para descargar la actualización: https://dlssl.google.com/android/eclipse. Dar click en “OK”
4. El nuevo sitio deberá aparecer en la lista de sitios del cuadro de dialogo de
instalación. Al dar clic en siguiente Eclipse comenzará a buscar el plug-in
ADT, una vez que haya finalizado mostrará las opciones disponibles para ser
instaladas.
5. En este momento se deberá seleccionar el nodo raíz de la lista y dar clic en
“next”
48
6. Inmediatamente Eclipse descargará el plug-in. Una vez finalizado se debe
asegurar que tanto las opciones de “Android DDMS” y “Android Developer
Tools” estén seleccionadas. Proceder a dar clic en “Next”
7. Leer el contenido de la licencia que aparecerá en la ventana que se presenta,
dar click en “Accept terms of the license agreement”, clic en “Next.”y clic en
“Finish.”
8. Reiniciar Eclipse
9. Después de reiniciado el IDE se deberá indicar la ruta en donde se encuentra
localizado el SDK descomprimido. En la barra de menú seleccionar
“Window → Preferences.”
En el cuadro de Preferences seleccionar
“Android” en la columna izquierda.
10. Finalmente dar click en el botón “Browse” para buscar la ruta en donde se
instaló el SDK, dar click en “Apply,” y finalmente en “OK
En caso de no contar con una conexión a Internet para realizar la instalación en línea
se puede realizar la descarga del plug-in como un archivo con extensión zip desde el
URL http://developer.android.com/sdk/eclipse-adt.html. Los pasos a seguir para
integrarlo con el IDE son similares a los descritos anteriormente, la única diferencia
radica en el paso número 3:
Cuando se abre el cuadro de dialogo “Add Site”, dar clic en “Archive” para proceder
a buscar y seleccionar el plug-in en nuestro directorio de archivos.
49
A continuación se enumeran las características que incorpora el plug-in ADT a
Eclipse:
Un asistente de proyectos de Android que simplifica la creación de nuevos
proyectos e incluye una plantilla básica para la aplicación.
Editores para ayudar a crear, editar y validar los archivos xml.
Construcción automática de proyectos, conversión a los ejecutables de
Android (.dex), empaquetamiento (.apk) e instalación de los proyectos sobre
la máquina virtual Dalvik.
El emulador de Android, el cual permite la manipulación de la apariencia, la
configuración de conexión de red,y la capacidad para simular las llamadas
entrantes y mensajes SMS.
El Dalvik Debug Monitoring Service (DDMS), que traducido al español
significa Servicio de monitoreo de depuración Dalvik, el cual permite realizar
operaciones de depuración del código.
Acceso al dispositivo o al sistema de archivos del emulador, lo que le permite
navegar por el árbol de carpetas y transferencia de archivos.
Depuración en tiempo de ejecución, para establecer puntos de interrupción y
una vista de las llamadas a la pila.
Toda la bitácora Android/Dalvik y las salidas por consola
50
El Gráfico No. 4 resume los componentes que conforman el entorno de desarrollo de
Android.
GRÁFICO NO. 4
ESQUEMA DEL ENTORNO DE DESARROLLO
Eclipse IDE
Herramientas por Línea de Comandos
Transferencia de Archivos
Simulador de GPS
Codificación
Depuración
ADT
SDK
Configuración del perfil del
emulador
Lanzamiento del emulador
Vista de procesos y del sistema de
archivos
Vista de Log
Emulador
Múltiples skins
Opciones de Conectividad de Red
Integración con Eclipse vía AVT
Equipo Android
Dispositivo físico Real
Documentación SDK
Elaboración: Antonio Rodríguez
Fuente: Libro Unlocking Android A Developer’s Guide, de Ableson Frank, Collins Charlie, Sen Robi
(2009), pag. 35,
Análisis:Como se puede apreciar en la imágene el IDE Eclipse se encuentra fuertemente integrado con
el SDK de Android, permitiendo interactuar con todas las bondades de este último
2.2.4.7.4 Explorando las funcionalidades del IDE
Una vez que se ha configurado el entorno de desarrollo, el siguiente paso es entender
las funcionalidades que proporciona el mismo:
51
2.2.4.7.4.1 Perspectiva Java
Esta perspectiva proporciona un número conveniente de vistas para el desarrollo de
aplicaciones. En la parte izquierda se encuentra el explorador de paquetes que permite
visualizar una lista de todos los proyectos y sus estructuras.
GRÁFICO NO. 5
PERSPECTIVA JAVA
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis:La perspectiva Java es un contenedor de vistas que proporciona Eclipse para realizar la
codificación de las aplicaciones.
En el centro de la pantalla se encuentra el editor de código Java, cada vez que se
guarda el archivo, este
es compilado de manera automática por la herramienta
52
JDT25(Java Developer Tools). En el caso de que un error existiese, este se presentará
en la vista “Problems” ubicada en la parte inferior del editor.
Otra vista de gran ayuda la constituye “JavaDoc”, la cual provee de toda la
documentación disponible acerca de la clase o método seleccionado.
GRÁFICO NO. 6
VISTA JAVADOC
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: La vista JavaDoc proporciona información relativa a la clase o método seleccionado en el
editor de código.
25
Ver su definición en el Anexo 1: Glosario
53
2.2.4.7.4.2 Perspectiva DDMS
Las perspectivas de uso más frecuente se muestranen la esquina superior derecha de
la ventana de Eclipse. Para cambiar de perspectiva se lo puede realizar dando clic a
la opción deseada, en caso de que no se presente se debe seleccionar el icono con un
signo +
con el propósito de que se despliegue una ventana con el listado de
perspectivas posibles.
GRÁFICO NO. 7
PERSPECTIVA DDMS
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: La perspectiva DDMS es un contenedor de vistas que proporciona Eclipse para facilitar la
depuración de las aplicaciones.
54
La perspectiva DDMS (Dalvik Debug Monitor Service) es una herramienta
robustapara la depuración de las aplicaciones que le permite al desarrollador conocer
los procesos activos, ver la pila, observar y pausar los hilos activos y explorar el
sistema de archivo de cada uno de los dispositivos conectados. Tiene cuatro paneles
por defecto, iniciando desde la parte superior izquierda y desplazando la mirada de
izquierda a derecha hacia abajo tenemos:
Devices (Dispositivos).- Muestra el listado de los dispositivos conectados a
eclipse. El emulador por defecto está identificado con su número de puerto, el
5554.
Threads/Heap/Allocation
Tracker/File
Explorer
(Hilos/Montículo/Seguidor de Asignación/Explorador de Archivos).-como
se puede apreciar en el Gráfico No. 7en esta vista existen 4 pestañas:
Hilos.- lista de hilos que se ejecutan en el proceso de la máquina
virtual de destino
Montículo.- muestra estadísticas del montículoactualizado durante la
recolección de basura
Seguidor de Asignación.- en esta vista se puede realizar un
seguimiento de la asignación de memoria de cada máquina virtual
Explorador de Archivos.- permite manipular los directorios incluidos
en el emulador
55
Emulator Control (Controlador del emulador).- Controles que permiten
simular estados del equipo y también de las actividades. Proporciona:
Estado de la telefonía.- permite cambiar el estado de voz del teléfono y
de planes de datos (casa, móvil, búsqueda, etc.) además de simular
diferentes tipos de velocidad y latencia de red (GPRS, EDGE, UMTS,
etc.).
Acciones de telefonía.- permite simular la realización y recepción de
llamadas, así como el envío y recepción de mensajes.
Ubicación.- permite el envióde datos para la simulación de ubicación
hacia el emulador, de modo que sea posible realizar operaciones de
localización como GPS.
Logcat.- Vista que presenta los registros de los sucesos que han ocurrido
durante la ejecución de la aplicación, e incluso desde antes. Permite realizar
filtros de la información. Las opciones disponibles son:
V (Verbose).- Detallado, el archivo muestra todo.
D (Debug).- Depuración, muestra los mensajes de depuración,
información, advertencia y de error.
I (Information).- Información, muestra los mensajes la información,
advertencia y mensajes de error.
W (Warning).- Advertencia, muestra los mensajes de advertencia y de
error.
E (Error).- Sólo muestra los mensajes de error.
56
2.2.4.7.4.3La primera aplicación con Android: “Hola Mundo”
La primera acción a realizar consiste en crear un nuevo proyecto, para esto se debe
dar clic en “File”, luego clic en “New Proyect”, dentro de la carpeta “Android”
seleccionar “Android Proyect”, lo que hará que se levante la ventana de
configuración.
GRÁFICO NO. 8
VENTANA PARA LA CREACIÓN DE UN NUEVO PROYECTO
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis:Ventana de configuiración de parámetros globales del proyecto
57
Aquí se deberá definir el nombre del proyecto, el SDK que se va a utilizar para
construir la aplicación, el nombre de la aplicación, a que paquete pertenece, el
nombre de la actividad y la mínima versión del SDK que podría ejecutar la
aplicación.
Es importante mencionar que la mínima versión del SDK representa el nivel del API,
que es un número entero que identifica de manera única la versión del
framework26incluida en la plataforma. A continuación se presenta un cuadro con estas
relaciones:
CUADRO NO. 4
RELACIÓN DE LAS VERSIONES DE ANDROID Y EL NIVEL DEL API
Versión de laPlataforma
Nivel del API
Android 2.2
8
Android 2.1
7
Android 2.0.1
6
Android 2.0
5
Android 1.6
4
Android 1.5
3
Android 1.1
2
Android 1.0
1
Elaboración: Antonio Rodríguez
Fuente: http://developer.android.com/guide/appendix/api-levels.html
26
Ver su definición en el Anexo 1: Glosario
58
Para ejecutar la aplicación se debe crear una configuración de lanzamiento, los pasos
necesarios se listan a continuación:
1. Seleccionar “Run Configurations” o “ Debug Configurations” del menu
“Run”
2. Dar clic derecho sobre
“Android Application” en la lista de tipos de
proyectos ubicada en el lado izquierdo de la ventana y seleccionar “New”
3. Escribir un nombre para la configuración
4. Seleccionar las opciones iniciales, en la pestaña “Android” escoger el
proyecto y la actividad a ejecutarse, en la pestaña “Target” seleccionar el
equipo virtual(AVD) sobre el cual se ejecuta el emulador y la aplicación, en
esta
pestaña también se pueden configurar ciertos parámetros como la
latencia de la red y comandos que se le pueden transferir al emulador
El AVD (Android Virtual Device) es una configuración del emulador que
permite un mejor modelo de un celular real. Entre los beneficios que
proporciona tenemos:
Un perfil de hardware.- establecer opciones para definir las
características de hardware del dispositivo virtual. Por ejemplo, puede
definir si el dispositivo tiene una cámara, si utiliza un teclado
QWERTY27físico, la cantidad de memoria, y así sucesivamente.
27
Ver su definición en el Anexo 1: Glosario
59
Una asignación a una imagen del sistema.- definir qué versión de la
plataforma Android se ejecutará en el dispositivo virtual.
También se pueden especificar otras opciones del emulador, lo que le
permite controlar las dimensiones de pantalla, apariencia, emulación
de tarjetas SD, etc.
Finalmente al seleccionar el botón “Run” se mostrará la aplicación cargada en el
AVD.
GRÁFICO NO. 9
APLICACIÓN HOLAMUNDO
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: Interfaz gráfica resultado de ejecutar la aplicación HolaMundo
60
2.2.4.8Aplicaciones en Android
2.2.4.8.1Consideraciones al desarrollar aplicaciones para dispositivos móviles
Existen una serie de factores que se deben considerar a la hora de escribir programas
para dispositivos móviles, la mayoría de ellas son consideraciones
de hardware
impuestas por el diseño.
En comparación con las computadoras de escritorio, laptops o netbooks, los
dispositivos móviles tienen de manera relativa:
 Bajo poder de procesamiento
 Memoria RAM limitada
 Capacidad de almacenamiento persistente limitada
 Vida limitada de la batería
 Pantallas con resoluciones pequeñas
 Costos de transferencia de datos elevada
 Transferencia de datos más lenta con mayor latencia
 Menor número de conexiones de datos fiables
61
2.2.4.8.2 Componentes principales de una aplicación en Android
Como
se
indica
en
el
sitio
oficial
de
Android,
http://developer.android.com/guide/topics/fundamentals.html, y se reafirma en el
libro Beginning Android 2 de Mark L. Murphy,los componentes principales que
conforman una aplicación en Android son:
Activities (Actividades).-haciendo una analogía con las aplicaciones de
escritorio una actividad es como una ventana, en Android pueden existir
aplicaciones sin interfaces de usuario, pero cuando la tengan siempre existirá
una actividad.
Descritas de manera más técnica, son piezas de código ejecutables que pueden
ir y venir en el tiempo, instanciadas por el usuario o el sistema operativo y que
se mantendrán ejecutando mientras sean necesitadas.
Content Providers (Proveedores de Contenido).-componentes que permiten
intercambiar datos entre aplicaciones.
Services (Servicios).-a diferencia de las actividades y de los proveedores de
contenido que pueden ser detenidos en cualquier momento, los servicios son
componentes diseñados para ejecutarse independientemente de una actividad,
62
por esta razón no poseen una interfaz de usuario. Ejemplos de acciones para
los cuales son utilizados: Actualizaciones de contenido RSS, ejecución de
música en segundo plano.
Intents (Intentos).-los intentos son mensajes que permiten notificar a las
aplicaciones de que algún evento ha ocurrido. Estos eventos pueden ser
cambios en los estados del hardware (Una memoria SD ha sido insertada), de
arribo de información (Llegada de un SMS), eventos de aplicación, entre
otros.
2.2.4.8.3Tipos de Aplicaciones en Android
Primer Plano.- aplicación que es útil cuando esta ejecutándose en primer
plano, y que se suspende cuando no está visible.
Segundo Plano.- aplicación que permite una interacción limitada con el
usuario, pasa la mayor parte del tiempo oculta.
Intermitente.- es la combinación de las anteriores, pasa la mayor parte del
tiempo ejecutándose de manera invisible al usuario, con el que interactúa para
notificarle algún suceso.
63
2.2.4.8.4 Archivo de Configuración AndroidManifest.xml
EL AndroidManifest.xml es un archivo ubicado en la el nodo raíz de la jerarquía del
proyecto, en el cual se almacenan configuraciones globales. Contiene información
necesaria que el sistema debe conocer antes y durante la ejecución de una aplicación.
2.2.4.8.4.1 Estructura
A continuación se presentan todos los nodos que se pueden declarar cuando se crea
una aplicación:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
64
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data />
</activity-alias>
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data />
</receiver>
<provider>
<grant-uri-permission />
<meta-data />
</provider>
<uses-library />
</application>
</manifest>
2.2.4.8.4.2 Descripción de los elementos
<uses-permission>.- permite declarar los permisos que uno considera necesarios para
que funcione la aplicación. Forman parte del modelo de seguridad de Android. El
siguiente ejemplo muestra la sentencia que se debe declarar para permitir a la
aplicación el accesoa Internet.
<uses-permission android:name=”android.permission.INTERNET”>
65
<permission>.- en aplicaciones realizadas por terceros especifica si se restringe o
permite el acceso a componentes de la aplicación.
<permission-tree>.- declara el nombre base de un árbol de permisos. La aplicación
toma la propiedad de todos los nombres en el árbol. Se pueden añadir dinámicamente
nuevos permisos para el árbol llamando el método PackageManager.addPermission.
<permission-group>.- declara un nombre para una agrupación lógica de permisos
relacionados.
<instrumentation>.- proporciona un marco de trabajo para realizar pruebas de los
componentes de la aplicación en tiempo de ejecución.
<instrumentation android:label="Mi Test"
android:name=".TestClass"
android:targetPackage="com.android.Package">
</instrumentation>
<uses-sdk>.- este nodo permite definir la versión mínima, máxima y con la cual se
desarrolló la aplicación. El objetivo es permitirle al sistema conocer que versión del
SDK debe de existir en el equipo para que se pueda ejecutar la aplicación sin ningún
inconveniente. Los números asociados a cada atributo corresponden al nivel del API
(Tópico discutido anteriormente).
<uses-sdk
android:minSdkVersion="4"
android:targetSdkVersion="5">
android:maxSDKVersion=”5”
</uses-sdk>
66
<uses_configuration>.-se utiliza para especificar las combinaciones de mecanismos
de entrada soportados por la aplicación. Estos pueden ser:
reqFiveWayNav.-
permiteespecificar si se necesita un dispositivo
de entrada que puede moverse arriba, abajo, izquierda, derecha y
hacer clic en la selección actual.
reqHardKeyboard.- permite especificar si la aplicación requiere un
teclado físico (hardware).
reqNavigation.- permite especificar el tipo de navegación, los valores
posibles son:nonav(sin navegación), Dpad, trackball, wheel (rueda), o
undefined (no definido).
reqKeyboardType.- permite indicar el tipo de teclado presente en el
dispositivo, los valores posibles son: nokeys, qwerty, twelvekey, o
undefined (indefinido).
reqTouchScreen.- permite especificar cómo el usuario interactuará
con la pantalla táctil, los valores posibles son: notouch(sin pantalla
táctil), stylus, finger, o undefined.
<uses-feature>.- permite especificar una característica utilizada por la aplicación.
<supports-screens>.- en este elemento se pueden especificar las dimensiones de la
pantalla que soporta la aplicación. De manera predeterminada una aplicación
67
moderna (utilizando la API de nivel 4 o superior) es compatible con todos los
tamaños de pantalla, a diferencia de aplicaciones más antiguas que sólo admiten el
tamaño "normal" de pantalla.
<application>.- este elemento contiene subelementos que permiten declarar cada uno
de los componentes de la aplicación y tiene atributos que puede afectar a todos los
componentes. Entre los principales atributos y los más usados tenemos:
android:icon.-permite especificar el ícono para la aplicación como un todo.
android:label.- permite definir una etiqueta para la aplicación como un todo
que puede ser visualizada por el usuario, también constituye la etiqueta por
defecto para cada uno de los componentes de la aplicación en caso de que en
ellos no se defina una etiqueta.
<activity>.- permite declarar una actividad, la cual implementa parte de la interfaz de
usuario. Todas las actividades a ser utilizadas en la aplicación deberán ser declaradas
en este archivo para que sean visibles por el sistema. Al igual que en el nodo
“application” los atributos más usados son icon y label, con la diferencia que para
este caso son locales a la actividad.
68
<service>.- permite declarar un servicio como uno de los componentes de la
aplicación. A diferencia de las actividades, los servicios no poseen una interfaz de
usuario visual.
<receiver>.- permite declarar un receiver (receptor) como uno de los componentes
de la aplicación. Los BroadcastReceiver les permiten a las aplicaciones responder a
llamadas que se emiten por el sistema o por otras aplicaciones.
<provider>.- permite declarar un proveedor de contenido (ContentProvider) que
como su nombre indica proporciona acceso estructurado a datos manejados por la
aplicación. Contiene dos subelementos: meta-data y grant-uri-permission, este último
permite especificar a qué conjunto de información se le permite el acceso a los
proveedores de contenido.
<uses-library>.- permite especificar una librería compartida que requiere ser
vinculada a la aplicación. Este elemento le indica al sistema que incluya el código de
la librería para el paquete.
<intent-filter>.- especifica los tipos de intentos (intents) a los cuales una actividad,
servicio o receptor de difusión puede responder. Este elemento puede especificar
obtener a su vez los siguientes subelementos:
<action>
69
<category>
<data>
<meta-data>.- en este elemento se puede definir un par nombre-valor que pueden ser
suministrados al componente principal.
A continuación se presenta el archivo AndroidManifest.xml que se generó al crear la
aplicación HolaMundo:
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="android.com.HolaMundo"
android:versionCode="1"
android:versionName="1.0">
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
<activityandroid:name=".HolaMundo"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
70
2.2.4.8.5Actividad
2.2.4.8.5.1 Ciclo de Vida
En Android las actividades son administradas bajo el esquema de pila, es decir, que
cuando una nueva actividad es instanciada pasa a la cima de la pila y se convierte en
la actividad en ejecución, mientras que la actividad que estaba ejecutándose
previamente se ubica atrás en la pila y permanece allí hasta que la nueva actividad
finalice.Una actividad tiene generalmente cuatro estados:
Activa.-cuando la actividad es visible y está interactuando con el usuario, el
sistema se encargará de mantenerla en ejecución llegando inclusive a asesinar
actividades ubicadas posteriormente en la pila si es necesario. Cuando una
nueva actividad es instanciada, esta cambia de estado a pausada.
Pausada.-en ciertas ocasiones cuando una actividad es visible pero no tiene el
foco está en estado de pausada. En este estado la actividad es tratada por el
sistema como si fuese activa pero no recibe ingresos del usuario. Cuando una
actividad ya no está visible cambia al estado de detenida.
Detenida.-en este estado la actividad aún continúa en memoria manteniendo
toda su información pero se convierte en una candidata a ser eliminada cuando
el sistema requiera recursos. Una vez que la actividad se cierra pasa al estado
de inactiva.
71
Inactiva.-después que una actividad ha sido asesinada y antes de ser ejecutada
se encuentra en este estado.
El ciclo de vida de una actividad en Android puede ser descrito a través de los
métodos que se pueden ejecutar durante los diferentes estados:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
Como se puede visualizar en la lista previa, el ciclo entero de la actividad va desde
que se hace la llamada al método onCreate() hasta cuando se ejecuta el método
onDestroy(). Sin embargo este ciclo se puede dividir en dos partes, el tiempo de vida
visible y el tiempo de vida en primer plano.
72
GRÁFICO NO.10
CICLO DE VIDA DE UNA ACTIVIDAD
Activity
onCreate
Activity
onRestore
Activity
onResume
Activity
onStart
Activity
onSave
InstanceState
Activity
onPause
Activity
onStop
Activity
onDestroy
Activity
onReset
Ciclo de Vida Activo
Ciclo de Vida Visible
Ciclo de Vida Completo
Elaboración: Antonio Rodríguez
Fuente:http://www.slideshare.net/peterbuck/microsoft-powerpoint-androidchapter03lifecycle
Análisis:El ciclo de vida completo de una actividad se inicia con el método onCreate, endonde se
realizan las configuraciones globales y finaliza con el método onDestroy, en el que se liberan los
recursos. Durante el ciclo de vida visible el usuario puede ver la actividad en pantalla.
2.2.4.8.5.2 Creación de una Actividad
Para crear una Actividad en Android se recomienda realizar tres pasos: crear la clase
en java que contendrá la interfaz de usuario derivando de la clase Activity, crear la
GUI en un archivo con extensión xml (También se lo puede hacer de manera
programática)
y
finalmente
especificar
en
el
archivo
de
configuración
AndroidManifest.xml la nueva actividad a ser utilizada. A continuación se presenta el
código java de la aplicación HolaMundo:
package android.com.HolaMundo;
import android.app.Activity;  Importando la clase Activity
import android.os.Bundle;
public class HolaMundo extends Activity Derivando de la clase Activity
{
73
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); Definiendo la interfaz de usuario
}
}
2.2.4.8.5.3 Iniciar una actividad
Para iniciar una actividad en Android se utiliza el método startActivity(Intent).
Adelantándonos un poco, un Intent (intento) es un mecanismo que se utiliza para
intercambiar mensajes dentro de la aplicación o entre aplicaciones.
Intent a = new Intent();  Creamos un objeto de la clase Intnet
a.setClassName("android.com.AbsoluteLayout","android.com.AbsoluteLayou
t.AbsoluteLayout");  Definimos la actividad y el paquete en que se
encuentra
startActivity(a);  Iniciamos la actividad
En ocasiones se requiere un resultado cuando la actividad finaliza, para obtenerlo se
debe implementar el método startActivityForResult(Intent,int), en el que se aumenta
un nuevo parámetro, int para el ejemplo, que identifica la llamada.
startActivityForResult(
new
Intent(Intent.ACTION_PICK,
new
Uri("content://contacts")),OBTENER_CONTACTO);
El resultado se lo puede manipular a través del método onActivityResult(int, int,
Intent).
74
2.2.4.8.5.4 Ejemplo de actividad incluido en el proyecto
El ejemplo consiste en una aplicación que presenta al usuario una pantalla en la que
se deben ingresar coordenadas, cuando se presiona el botón aceptar se invoca una
nueva actividad que gestiona el pedido de la original y muestra en el mapa el lugar
que corresponde a las coordenadas.
Archivo XML: actividad_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1,2"
>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="2dip"
android:paddingRight="4dip"
android:text="Localización:"
/>
<EditTextandroid:id="@+id/latitud"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:editable="true"
android:singleLine="true"
android:layout_weight="1"
/>
<EditTextandroid:id="@+id/longitud"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="true"
android:editable="true"
android:singleLine="true"
android:layout_weight="1"
75
/>
</TableRow>
</TableLayout>
<Buttonandroid:id="@+id/btn_mapa"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Aceptar"
/>
</LinearLayout>
Clase Java: EjemploActividad.java
package android.com.proyecto.componentes;
import android.com.proyecto.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.net.Uri;
publicclass EjemploActividad extends Activity {
//Declaración de Variables
private EditText et_latitud;
private EditText et_longitud;
private Button btn_mapa;
privatedoubleld_latitud;
privatedoubleld_longitud;
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_layout);
//Atachando los widgets definidos en en el archivo XML para utilizarlos en el
programa
et_latitud=(EditText)findViewById(R.id.latitud);
et_longitud=(EditText)findViewById(R.id.longitud);
btn_mapa=(Button)findViewById(R.id.btn_mapa);
//Estableciendo un Listener para el botón con el propósito de responder cuando el
usuariogenere el evento de dar un clic en el mismo
btn_mapa.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
ld_latitud=Double.parseDouble(et_latitud.getText().toString());
ld_longitud=Double.parseDouble(et_longitud.getText().toString());
Uri uri=Uri.parse("geo:" + ld_latitud+","+ld_longitud+"?z=5");
76
startActivity(new Intent(Intent.ACTION_VIEW,uri)); //Iniciando
una actividad}
GRÁFICO NO. 11
EJEMPLO DE ACTIVIDAD
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: La aplicación recibe coordenadas de ubicación y al dar clic en aceptar se presenta en el
mapa
2.2.4.8.5.5Clases de Actividad
Primero hay que aclarar la ambigüedad que puede originar el título de esta sección, al
hablar de las clases de actividad se hace referencia a las clases incluidas en el SDK de
Android para definir actividades y que envuelven el uso de widgetspara el diseño de
GUIs. Entre las clases más usuales se incluye:
77
MapActivity.- encapsula el manejo de los recursos necesarios para la gestión
de la vista de mapas.28
ListView.- clase envoltoria para actividades que permiten enlazar vistas tipo
lista con un conjunto de datos, así como el manejo de los eventos originados
por la selección de alguno de los elementos de la lista.
ExpandableListActivity.- similar a ListView pero da soporte a listas
expandibles.
ActivityGroup.- permite integrar múltiples actividades en una sola pantalla.
2.2.4.8.6Interfaces de Usuario (GUI’s)
Como ya se ha indicado anteriormente una Actividad contiene vistas, que son objetos
que representan elementos en la pantalla y que permiten la interacción con el usuario.
Cada pantalla en Android contiene un árbol jerárquico de objetos derivados de la
clase View, que tienen diferentes formas y cualidades y que se muestran en el Gráfico
No. 12 para una mayor comprensión del lector.
28
Ver su definición en el Anexo 1: Glosario
78
GRÁFICO NO. 12
DIAGRAMA DE CLASES DEL API VIEW DE ANDROID
Elaboración: Antonio Rodríguez
Fuente:Libro Unlocking Android A Developer’s Guide, de Ableson Frank, Collins Charlie, Sen Robi
(2009), pag. 71
Análisis:Diagrama que muestra de manera jerárquica la mayoría de las clases derivadas de View
79
Una de las características de Android es que permite definir estos elementos de
manera programática mediante el lenguaje Java o hacerlo a través de archivos XML
en los que se establecen los widgets y sus relaciones.
Android considera los layouts basados en XML como recursos, y son almacenados en
el directorio res del proyecto. Cada archivo XML contiene un árbol de elementos en
los que se especifican sus atributos y su diseño. Estos elementos o nodos poseen el
mismo nombre que la clase en java que permite su creación, así el elemento
<TextView> está definiendo un objeto de la clase del mismo nombre.
La herramienta appt incluida en el SDK se encarga de generar el archivo R.java que
permite invocar y utilizar estos elementos en la codificación de la aplicación.
Cabe en este instante la pregunta ¿Por qué usar un archivo XML para definir los
elementos de mi GUI si se lo puede hacer mediante código? La respuesta es que
ayuda en la creación de herramientas para la definición de vistas, es más sencillo la
lectura de las especificaciones de los elementos en un archivo estructurado en formato
XML para su edición que tratar de hacerlo en el lenguaje de programación.
Incluso, es cada vez más común encontrar herramientas que definen los elementos de
sus GUIs en formato XML, tal como lo hacen XAML de Microsoft, Flex de Adobe y
XUL de Mozilla.
80
2.2.4.8.6.1 Ejemplo de vistas incluido en el proyecto
Con el propósito de demostrar que la creación de la interfaz de usuario de cualquier
aplicación en Android se puede hacer netamente con código Java o utilizando un
archivo XML se ha desarrollado un programa que muestra la hora del sistema para
cada uno de los esquemas.
Archivo XML: widget_xml_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/gray"
>
<TextView
android:id="@+id/myTextView"  Identificador del elemento
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/texto_inicial"
android:textColor="@color/black"
android:gravity="center_horizontal"
/>
<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Aceptar"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
Clase Java: Widget_Java
package android.com.proyecto;
import java.util.Date;
import android.app.Activity;
81
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Button;
import android.widget.TextView;
publicclass Widget_Java extends Activity {
//Declaración de Variables
private LinearLayout myLayout;
private TextView myTextView;
private Button myButton;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Creación del objeto Layout (contenedor) y definición de sus propiedades
myLayout=new LinearLayout(this);
myLayout.setOrientation(LinearLayout.VERTICAL);
myLayout.setBackgroundColor(Color.LTGRAY);
myLayout.setLayoutParams(new
LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.FILL_PARENT)
);
myLayout.setHorizontalGravity(Gravity.CENTER);
//Creación del objeto TextView y definición de sus propiedades
myTextView=new TextView(this);
myTextView.setLayoutParams(new
LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTE
NT));
myTextView.setText("De click para mostrar la hora");
myTextView.setTextColor(Color.BLACK);
myTextView.setGravity(Gravity.CENTER_HORIZONTAL);
myLayout.addView(myTextView);
//Creación del objeto Button y definición de sus propiedades
myButton=new Button(this);
myButton.setText("Aceptar");
myButton.setLayoutParams(new
LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CON
TENT));
myLayout.addView(myButton);
myButton.setOnClickListener(new View.OnClickListener()
{
@Override
publicvoid onClick(View v) {
myTextView.setText(new Date().toString());
}
});
setContentView(myLayout);
82
}}
Clase Java: Widget_XML
package android.com.proyecto;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Date;
publicclass Widget_XML extends Activity{
private TextView myTextView;
private Button myButton;
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.widget_xml_layout);
myTextView=(TextView)findViewById(R.id.myTextView);
myButton=(Button)findViewById(R.id.myButton);
myButton.setOnClickListener(new View.OnClickListener()
{
@Override
publicvoid onClick(View v) {
myTextView.setText(new Date().toString());
}
});}}
Salida por pantalla
GRÁFICO NO. 13
GUI GENERADA A TRAVÉS DE CÓDIGO JAVA
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: Aplicación que muestra la hora del sistema y cuya interfaz gráfica se creó de manera
programática en Java.
83
GRÁFICO NO. 14
GUI GENERADA A TRAVÉS DE UN ARCHIVO XML
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: Aplicación que muestra la hora del sistema y cuya interfaz gráfica se generó a través de un
archivo xml.
2.2.4.8.7Ordenando el contenido de los Layouts
2.2.4.8.7.1AbsoluteLayout
AbsoluteLayout se basa en la sencilla idea de colocar cada uno de los controles en
una posición absoluta, en la que se especifican las coordenadas X y Y en la pantalla
para cada control. Esto no es recomendable para el desarrollo de la interfaz de usuario
(AbsoluteLayout de hecho, es actualmente obsoleto), ya que definir de esta manera la
posición hace que sea poco flexible. Por ejemplo, si se desea agregar un nuevo
elemento se debe de modificar la posición de los que ya existen.
84
2.2.4.8.7.1.1 Ejemplo del contenedor AbsoluteLayout
Archivo XML: absolute_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<AbsoluteLayoutandroid:id="@+id/AbsoluteLayout01"android:layout_width="wrap_content"android:
layout_height="wrap_content"xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/txtUsuario"
android:layout_x="60px"
android:layout_y="40px"
android:text="Usuario"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/edtUsuario"
android:layout_x="150px"
android:layout_y="40px"
android:width="100px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/txtContrasenia"
android:layout_x="60px"
android:layout_y="100px"
android:text="Contraseña"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/edtUsuario"
android:layout_x="150px"
android:layout_y="100px"
android:width="100px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/edtUsuario"
android:layout_x="115px"
android:layout_y="160px"
android:text="Aceptar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</AbsoluteLayout>
85
Salida por pantalla
GRÁFICO NO. 15
ESQUEMA ABSOLUTELAYOUT
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: El contenedor AbsoluteLayout coloca los elementos en pantalla en las coordenadas que se
especifican.
2.2.4.8.7.2FrameLayout
FrameLayout está diseñada para mostrar un solo elemento a la vez. Usted puede tener
varios elementos dentro de un FrameLayout pero cada elemento se coloca en la parte
superior izquierda de la pantalla, superponiéndose al definido anteriormente. A
continuación se muestra un layout en el que se define una imagen y una etiqueta:
2.2.4.8.7.2.1Ejemplo del contenedor FrameLayout
Archivo XML: frame_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
86
android:layout_height="fill_parent"
>
<ImageView
android:src="@drawable/logo"
android:scaleType="fitCenter"
android:id="@+id/myView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<TextView
android:id="@+id/edtText"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="24px"
android:textColor="#000000"
android:text="Android Rules"
android:gravity="center"
/>
</FrameLayout>
Salida por pantalla:
GRÁFICO NO. 16
ESQUEMA FRAMELAYOUT
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: El contenedor FrameLayout coloca los elementos en pantalla pero superponiendo uno
encima de otro desde la esquina superior izquierda.
87
2.2.4.8.7.3LinearLayout
Como su nombre lo indica un LinearLayout organiza los elementos que contiene a lo
largo de una sola línea. Se puede indicar la dirección de esta línea mediante el
atributo “orientation” del nodo raíz.
2.2.4.8.7.3.1 Ejemplo del contenedor LinearLayout
Archivo XML: linear_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"  Propiedad que indica la orientación
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/txtUsuario"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Usuario"
/>
<EditText
android:id="@+id/edtUsuario"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:width="100px"/>
<TextView
android:id="@+id/txtContrasenia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Contraseña"/>
<EditText
android:id="@+id/edtContrasenia"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:width="100px"/>
<Button
android:id="@+id/btnAceptar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
88
android:text="Aceptar"/>
</LinearLayout>
Salida por pantalla
GRÁFICO NO. 17
ESQUEMA LINEARLAYOUT
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: El contenedor LinearLayout coloca los elementos uno tras de otro de manera vertical u
horizontal, en el ejemplo se puede apreciar que la orientación que se utilizó es la primera.
2.1.4.8.7.4Relative Layout
RelativeLayout muestra sus elementos basados en la relación que existe entre ellos y
el contenedor. Este posiblemente es el diseño más complicado y se requieren varias
propiedades para obtener el resultado deseado.
En relación con el contenedor:

android:layout_alignParentBottom.- coloca la parte inferior del elemento en la
parte inferior del contenedor.
89

android:layout_alignParentLeft.- coloca la parte izquierda del elemento en la
parte izquierda del contenedor.

android:layout_alignParentRight.- coloca la parte derecha del elemento en la
parte derecha del contenedor.

android:layout_alignParentTop.- coloca el elemento en la parte superior del
contenedor.

android:layout_centerHorizontal.- centra el elemento de manera horizontal
dentro del elemento que lo contiene.

android:layout_centerInParent – centra el elemento de manera horizontal y
vertical dentro del elemento que lo contiene.

android:layout_centerVertical – centra el elemento verticalmente dentro del
elemento que lo contiene.
En relación con otros elementos:
Estas propiedades permiten establecer la ubicación del elemento de manera relativa
en la pantalla basándose en la posición de los otros elementos. En este esquema cada
elemento debe contener un identificador para poder hacer referencia de él.

android:layout_above.- coloca el elemento por encima del elemento
especificado.


android:layout_below.- coloca el elemento debajo del elemento especificado
android:layout_toLeftOf.- coloca el elemento a la izquierda del elemento
especificado.
90

android:layout_toRightOf.- coloca el elemento hacia la derecha del elemento
especificado.
Alineación con respecto otros elementos:
Estas propiedades le permiten especificar cómo los elementos están alineados en
relación con otros elementos.

android: layout_alignBaseline.- alinea la línea de base del elemento nuevo con
la línea base del elemento especificado.

android: layout_alignBottom.- alinea la parte inferior del nuevo elemento con
la parte inferior del elemento especificado.

android: layout_alignLeft.- alinea el borde izquierdo del nuevo elemento con
el borde izquierdo del elemento especificado.

android: layout_alignRight.- alinea el borde derecho del nuevo elemento con
el borde derecho del elemento especificado.

android: layout_alignTop.- alinea la parte superior del nuevo elemento con el
elemento especificado.
91
2.2.4.8.7.4.1 Ejemplo del contenedor RelativeLayout
Archivo XML: relative_layout.xml
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/txtUsuario"
android:text="Usuario
"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/editUsuario"
android:width="100px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/txtUsuario"/>
<EditText
android:id="@+id/editContrasenia"
android:width="100px"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/editUsuario"
android:layout_alignLeft="@id/editUsuario"/>
<TextView
android:id="@+id/txtContrasenia"
android:text="Contraseña"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/editContrasenia"
android:layout_alignLeft="@id/txtUsuario"
android:layout_alignTop="@id/editContrasenia"/>
<Button
android:id="@+id/backbutton"
android:text="Back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/editContrasenia"/>
</RelativeLayout>
92
Salida por pantalla:
GRÁFICO NO. 18
ESQUEMA RELATIVELAYOUT
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: El contenedor RelativeLayout presenta la ubicación de un elemento en pantalla en función de
los otros elementos.
2.2.4.8.7.5 TableLayout
TableLayout organiza el contenido en filas y columnas. Las filas son definidas en el
esquema XML, y las columnas de forma automática por Android. Esto se hace
mediante la creación de al menos una columna para cada elemento. Así, por ejemplo,
si usted define una fila con dos elementos y una fila con cuatro elementos, entonces
tendría un diseño con dos filas y cuatro columnas.
Se puede especificar que un elemento debe ocupar más de una columna utilizando
android: layout_span. Esto puede aumentar el recuento total de la columna, así que si
tenemos una fila con dos elementos y cada elemento tiene android: layout_span = "3",
entonces usted tendrá por lo menos seis columnas de la tabla.
93
2.2.4.8.7.5.1 Ejemplo del contenedor TableLayout
Archivo XML: table_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<TableLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:text="Usuario"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="100px"
/>
</TableRow>
<TableRow>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="1"
android:text="Contraseña"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="100px"
/>
</TableRow>
<TableRowandroid:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Aceptar"
/>
</TableRow>
</TableLayout>
94
Salida por pantalla
GRÁFICO NO. 19
ESQUEMA TABLELAYOUT
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: El contenedor TableLayout divide la superficie en filas y columnas, el desarrollador puede
ubicar los elementos en las celdas que se forman de la intersección
2.2.4.8.7.6Gallery (Layout tipo galería)
Contenedor utilizado para mostrar una lista de objetos desplazables de manera
horizontal.
2.2.4.8.7.6.1 Ejemplo del contenedor Gallery
Clase Java: GalleryAdapter
package android.com.proyecto.layouts;
import android.com.proyecto.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
95
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
publicclass GalleryAdapter extends BaseAdapter{
private Context myContext;
intmGalleryItemBackground;
private Integer[] myImages={R.drawable.hulk,
R.drawable.ironman,
R.drawable.thor,
R.drawable.captain_america};
public GalleryAdapter(Context c)
{
myContext=c;
TypedArray a =c.obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
@Override
publicint getCount() {
returnmyImages.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
publiclong getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i=new ImageView(myContext);
i.setImageResource(this.myImages[position]);
i.setLayoutParams(new Gallery.LayoutParams(180, 180));
i.setScaleType(ScaleType.FIT_XY);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
}
96
Clase Java: GallerySample
package android.com.proyecto.layouts;
import android.com.proyecto.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Gallery;
import android.widget.Toast;
publicclass GallerySample extends Activity {
private Gallery myGallery;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
myGallery=(Gallery)findViewById(R.id.myGallery);
myGallery.setAdapter(new GalleryAdapter(this));
myGallery.setOnItemClickListener(new OnItemClickListener() {
publicvoid onItemClick(AdapterView parent, View v, int position, long id) {
Toast.makeText(GallerySample.this, "" + position, Toast.LENGTH_SHORT).show();
}
});}}
Salida por pantalla
GRÁFICO NO. 20
ESQUEMA GALLERY
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: El contenedor Gallery se utiliza para mostrar elementos a manera de lista desplazable,
siempre centrando el elemento visible al ancho de la pantalla.
97
2.2.4.8.8Elementos GUI más utilizados
Los elementos que conforman la interfaz de usuario se denominan widgets, que no
son otra cosa que objetos derivados de la clase View y que sirven como interfaz para
la interacción con el usuario. Entre los widgets más comunes tenemos: TextView,
EditText, Button, RadioButton, Checkbox, AnalogClock y DigitClock.
2.2.4.8.8.1 Ejemplo de elementos GUI más utilizados
Para la demostración de cómo se visualizan los controles que se utilizan más a
menudo en la creación de interfaces gráficas se creó la aplicación Allwidgets,
adicionalmente para demostrar cómo se visualizan los componentes que proporcionan
la funcionalidad de relojes se creó la segunda aplicación.
Archivo XML: all_widgets.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/myTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Esto es un label"
/>
<EditText
android:id="@+id/myEditText"
android:layout_width="fill_parent"
android:layout_height="60px"
android:text="Esto es una caja de texto"
98
/>
<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Botón"
/>
<CheckBox
android:id="@+id/myCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Checkbox no seleccionada!"/>
<RadioGroup
android:id="@+id/myGroup"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RadioButtonandroid:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Opcion1"
android:checked="true"/>
<RadioButtonandroid:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Opcion2"/>
<RadioButtonandroid:id="@+id/radio3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Opcion3"/>
</RadioGroup>
</LinearLayout>
Clase Java: AllWidgets
package android.com.proyecto.widgets;
import android.app.Activity;
import android.com.proyecto.R;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
99
import android.widget.CompoundButton.OnCheckedChangeListener;
publicclass AllWidgets extends Activity{
private TextView myTextView;
private EditText myEditText;
private Button myButton;
private CheckBox myCheck;
private RadioGroup myRadio;
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.all_widgets);
myTextView=(TextView)findViewById(R.id.myTextView);
myEditText=(EditText)findViewById(R.id.myEditText);
myButton=(Button)findViewById(R.id.myButton);
myCheck=(CheckBox)findViewById(R.id.myCheck);
myRadio=(RadioGroup)findViewById(R.id.myGroup);
myButton.setOnClickListener(new View.OnClickListener()
{
@Override
publicvoid onClick(View v) {
myEditText.setText("");
}
});
myCheck.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
publicvoid onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if(isChecked)
myCheck.setText("Checkbox seleccionada!");
else
myCheck.setText("Checkbox no seleccionada");
}
});
myRadio.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener() {
@Override
publicvoid onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId)
{
case R.id.radio1:
Toast.makeText(getApplicationContext(),"Opcion1
seleccionada",Toast.LENGTH_SHORT).show();
break;
case R.id.radio2:
100
Toast.makeText(getApplicationContext(),"Opcion2
seleccionada",Toast.LENGTH_SHORT).show();
break;
case R.id.radio3:
Toast.makeText(getApplicationContext(),"Opcion3
seleccionada",Toast.LENGTH_SHORT).show();
break;}}});}}
Salida por pantalla
GRÁFICO NO. 21
ELEMENTOS MÁS USADOS EN LA CREACIÓN DE INTERFACES
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis:La pantalla muestra la apariencia que tienen los controles típicos que se utilizan en una
aplicación para permitir la interacción con el usuario
Archivo XML: clocks.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
101
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Reloj Analógico"
android:gravity="center_horizontal"/>
<AnalogClockandroid:id="@+id/analog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Reloj Digital"
android:gravity="center_horizontal"/>
<DigitalClockandroid:id="@+id/digital"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_below="@id/analog"/>
</LinearLayout>
Salida por pantalla:
GRÁFICO NO. 22
WIDGETS PARA LA VISUALIZACIÓN DE RELOJES
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: En Android los desarrolladores pueden utilizar vistas que proporcionan la funcionalidad de
un reloj, sea analógico o digital. La imagen muestra sus apariencias.
102
2.2.4.8.9Menús
Las aplicaciones en Android soportan 3 tipos de menús:
Menú de opciones.- Se activa pulsando la tecla Menu del dispositivo y funciona en
dos modos: ícono y ampliado. El modo ícono presenta en pantalla una cuadrícula de
botones de hasta seis opciones del menú, en caso de contener más opciones, el sexto
botón mostrará un signo más (+) que al ser pulsado abre el modo ampliado.
Menú contextual.- Se activa seleccionando de manera sostenida el elemento. Es
similar al menú de opciones con la diferencia de cómo se llenan las opciones y cómo
se informa la opción seleccionada.
Submenú.- Un submenú se utiliza para agrupar elementos de un menú, sea este un
menú de opciones o un menú contextual.
Adicionalmente se puede crear cualquiera de los menús a través de archivos XML e
invocarlos en la programación mediante la creación de un objeto de la clase
MenuInflater.
103
2.2.4.8.9.1 Ejemplos de Menús incluidos en el proyecto
2.2.4.8.9.1.1 Menú de Opciones
Clase de Java: Option_Menu.java
package android.com.proyecto.menues;
import android.com.proyecto.R;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
publicclass Option_Menu extends MapActivity {
private MapView mapView;
private MapController mapController;
privatestaticfinalintMENU_AUMENTAR=0;
privatestaticfinalintMENU_DISMINUIR=1;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menues);
mapView=(MapView)findViewById(R.id.mapView);
mapController=mapView.getController();
registerForContextMenu(mapView);
}
//Método utilizado para indicar al servidor si se está mostrando algún tipo deinformación de
rutas en el mapa
protectedboolean isRouteDisplayed() {
returnfalse;
}
//Método que permite crear los elementos que se muestran en el menú
publicboolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_AUMENTAR, 0, "Aumentar").setIcon(R.drawable.zoom_in);
menu.add(0, MENU_DISMINUIR, 0, "Disminuir").setIcon(R.drawable.zoom_out);
returntrue;
}
//Método que permite definir las acciones cuando se selecciona un elemento
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
caseMENU_AUMENTAR:
mapController.zoomIn();
return(true);
104
caseMENU_DISMINUIR:
mapController.zoomOut();
return(true);
}
returnfalse;}}
Salida por pantalla
GRÁFICO NO. 23
MENÚ DE OPCIONES
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: En este gráfico se aprecia como se presenta un menú de opciones en Android, se han
definido dos elementos en el menú, que representan las opciones aumentar y disminuir el zoom del
mapa
2.2.4.8.9.1.2 Menú Contextual
Clase de Java: Context_Menu.java
package android.com.proyecto.menues;
import java.util.ArrayList;
import android.app.Activity;
import android.com.proyecto.R;
import android.os.Bundle;
105
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.AdapterContextMenuInfo;
publicclass Context_Menu extends Activity{
private ArrayList<Persona>personas=new ArrayList<Persona>();
privatestaticfinalintMENU_ELIMINAR_PERSONA=0;
private ListView myListView;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.context_menues);
personas.add(new Persona("Antonio Rodríguez","042025455"));
personas.add(new Persona("Carlos Gutierrez","042698565"));
personas.add(new Persona("Carla Sanchez","042896542"));
myListView=(ListView)findViewById(R.id.contex_menu_list);
inicializarListView();
}
//Método que se utiliza para llenar los elementos que se //presentan en la lista
privatevoid refrescarListItems()
{
myListView.setAdapter(new
ArrayAdapter<Persona>(this,R.layout.context_menu_item,personas));
}
privatevoid inicializarListView() {
refrescarListItems();
myListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener()
{
//Método que permite crear los elementos del menú contextual
@Override
publicvoid onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("ContextMenu");
menu.add(0, MENU_ELIMINAR_PERSONA,0, "Eliminar esta persona!");
}
});
}
//Método que permite definir las acciones cuando se seleccione un elemento del menú
publicboolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
106
switch (item.getItemId()) {
caseMENU_ELIMINAR_PERSONA:
Persona _persona = (Persona) myListView.getAdapter().getItem(menuInfo.position);
personas.remove(_persona);
refrescarListItems();
returntrue;
}
returnfalse;}
//Clase que abstrae las características de la persona
privateclass Persona
{
private String nombre;
private String telefono;
public Persona(String nombre, String telefono)
{
this.nombre = nombre;
this.telefono = telefono;
}
public String toString() {
returnnombre + " " + telefono;}
publicboolean equals(Object o) {
return o instanceof Persona && ((Persona) o).nombre.compareTo(nombre) == 0;
}}}
Salida por pantalla
GRÁFICO. 24
MENÚ CONTEXTUAL
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: En este gráfico se aprecia como se presenta un menú contextual en Android, la apariencia es
de una ventana tipo pop-up que contiene las acciones que el usuario puede seleccionar
107
2.2.4.8.9.1.3 SubMenú
Como se podrá apreciar el ejemplo es el mismo utilizado para el menú de opciones,
con la diferencia de que se creó un submenú para agrupar las opciones de zoom.
Clase de Java: Sub_Menu.java
package android.com.proyecto.menues;
import android.com.proyecto.R;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
publicclass Sub_Menu extends MapActivity {
private MapView mapView;
private MapController mapController;
privatestaticfinalintMENU_ZOOM=0;
privatestaticfinalintMENU_AUMENTAR=1;
privatestaticfinalintMENU_DISMINUIR=2;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menues);
mapView=(MapView)findViewById(R.id.mapView);
mapController=mapView.getController();
registerForContextMenu(mapView);
}
protectedboolean isRouteDisplayed() {
returnfalse;
}
publicboolean onCreateOptionsMenu(Menu menu) {
Creación del
boolean rpta = super.onCreateOptionsMenu(menu);
Submenú
SubMenu options=menu.addSubMenu("Zoom");
options.add(MENU_ZOOM, MENU_AUMENTAR, 0, "Aumentar");
options.add(MENU_ZOOM, MENU_DISMINUIR, 0, "Disminuir");
return rpta;
}
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
caseMENU_AUMENTAR:
mapController.zoomIn();
return(true);
108
caseMENU_DISMINUIR:
mapController.zoomOut();
return(true);
}
returnfalse;
}
}
Salida por pantalla
GRÁFICO NO. 25
SUBMENÚ
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: En Android un submenú es un menú que se presenta como resultado de que el usuario haya
selecionado un elemento en otro menú. En el gráfico podemos observar que al dar clic en el elemento
Zoom se abre un submenú
109
2.2.4.8.9.1.4 Menú de opciones a través de un archivo XML
La pantalla de salida del programa es la misma del ejemplo de menú de opciones.
Archivo XML: option_menu.xml
<?xmlversion="1.0"encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:id="@+id/MENU_AUMENTAR"
android:title="Aumentar"
android:orderInCategory="0"
android:icon="@drawable/zoom_in"/>
<itemandroid:id="@+id/MENU_DISMINUIR"
android:title="Disminuir "
android:icon="@drawable/zoom_out"
android:orderInCategory="1"/>
</menu>
Clase de Java: Option_Menu_XML.java
package android.com.proyecto.menues;
import android.com.proyecto.R;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
publicclass Option_Menu_XML extends MapActivity {
private MapView mapView;
private MapController mapController;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menues);
mapView=(MapView)findViewById(R.id.mapView);
mapController=mapView.getController();
registerForContextMenu(mapView);
}
protectedboolean isRouteDisplayed() {
returnfalse;
}
publicboolean onCreateOptionsMenu(Menu menu) {
110
//Creación del objeto que permite capturar el menú definidoen el archivo xml
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
returntrue;
}
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.MENU_AUMENTAR:
mapController.zoomIn();
return(true);
case R.id.MENU_DISMINUIR:
mapController.zoomOut();
return(true);
}
returnfalse;
}
}
2.2.4.8.10Proveedor de Contenido (Content Provider)
Los proveedores de contenido permiten almacenar y compartir información entre las
aplicaciones. Android contiene una serie de proveedores de contenido que pueden ser
utilizados por los desarrolladores: audio, video, imágenes, información de las
llamadas, información personal, entre otras.
Una Uri que comience con el esquema “content://” representa una fuente o recurso
para un proveedor de contenidos, la misma que permite realizar operaciones para
crear, leer, actualizar y borrar elementos. Con una Uri se puede obtener una colección
o un solo elemento de esa colección. Por ejemplo, “content://contacts/people" extrae
la información de todos los contactos, mientras que “content://contacts/people/1”
extrae la información del contacto cuyo identificador es el 1.
111
Cuando se realiza la consulta de la colección se utiliza un objeto tipo Cursor, el cual
contiene todos los registros devueltos. Para realizar la consulta se utiliza el método
manageQuery(p1,p2,p3,p4,p5), el cual obtiene 5 parámetros: el Uri del proveedor de
contenido, un arreglo con el nombre de las columnas que se desea obtener, los dos
parámetros siguientes para ingresar clausulas where y finalmente el último parámetro
para indicar el orden de la consulta mediante la cláusula order by.
2.2.4.8.10.1 Ejemplo de proveedor de contenido incluido en el proyecto
El ejemplo mostrado a continuación lista las llamadas realizadas recientemente, al dar
clic sobre una de ellas se abre la pantalla de marcado con el número de teléfono pre
cargado.
Archivo XML: content_provider_row.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:src="@drawable/phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:textColor="#f0E686"
112
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5px"
android:text="Numero "
/>
<TextView
android:id="@+id/numero"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:textColor="#f0E686"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tipo: "
/>
<TextView
android:id="@+id/tipo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:textColor="#f0E686"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Duración: "
/>
<TextView
android:id="@+id/duracion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
113
Clase de Java: ContentProviderExample.java
package android.com.proyecto.componentes;
import android.app.ListActivity;
import android.com.proyecto.R;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.CallLog.Calls;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.OnItemClickListener;
publicclass ContentProviderExample extends ListActivity{
//Objeto del tipo cursor para obtener la información del proveedor de contenido
private Cursor phoneCalls;
//Creación del objeto tipo Uri que identifica de manera única al proveedor de contenido
private Uri llamadas = Uri.parse("content://call_log/calls");
private String[] columnas=new String[]{Calls._ID,Calls.NUMBER, Calls.TYPE,
Calls.DURATION};
private ListView lv;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Método para realizar la consulta
phoneCalls=managedQuery(llamadas,columnas,null,null,"Calls.NUMBER asc");
ListAdapter adapter=new SimpleCursorAdapter(this,
R.layout.content_provider_row, phoneCalls,
new String[]
{"Calls.NUMBER","Calls.TYPE","Calls.DURATION"},
newint[] {R.id.numero, R.id.tipo, R.id.duracion});
setListAdapter(adapter);
lv=getListView();
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
phoneCalls.moveToPosition(arg2);
String number =
phoneCalls.getString(phoneCalls.getColumnIndexOrThrow("Calls.NUMBER"));//
startActivity(new
Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+number)));
}});}}
114
Salida por Pantalla
GRÁFICO NO. 26
PROVEEDOR DE CONTENIDOS: LLAMADAS RECIENTES
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: El gráfico muestra una aplicación que lista las llamadas recientes haciendo uso de Content
Providers para extraer la información del teléfono y utilizarla
2.2.4.8.11Intentos (Intents)
Un intento es un mensaje que se pasa entre actividades con el propósito de realizar
una acción. El sistema Android es el que se encarga de resolver que actividad debe
responder al mensaje. Los intentos pueden ser de dos tipos: intentos destinados a una
sola actividad o intentos de difusión (broadcast) que se envían a múltiples
actividades. Un ejemplo de este último sería un mensaje del sistema indicando que la
carga de la batería está baja.
115
Los componentes principales de un intento son:
Action.- como su nombre lo indica action es el verbo, la acción que se quiere
realizar, se representa como una constante. Por ejemplo ACTION_CALL es
una constante de Android que indica que se quiere realizar una llamada.
Data.- representa la información sobre la cual se quiere realizar la acción. La
información se envía a través de un objeto de la clase URI.
2.2.4.8.11.1 Ejemplos de intento incluido en el proyecto
A continuación se muestra una aplicación en donde se utiliza un intento para realizar
una llamada al número ingresado por el usuario en la caja de texto.
Archivo XML: intent_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/intentTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Ingrese el numero a marcar"
/>
<EditTextandroid:id="@+id/intentNumeroTelefonico"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/intentButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Llamar"
/>
</LinearLayout>
116
Clase de Java: Intento.java
package android.com.proyecto.componentes;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.Activity;
import android.com.proyecto.R;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
publicclass Intento extends Activity{
private EditText myEditText;
private Button myButton;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.intent_layout);
myEditText=(EditText)findViewById(R.id.intentNumeroTelefonico);
myButton=(Button)findViewById(R.id.intentButton);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
if(validarNumero(myEditText.getText().toString()))
{
//Objeto del tipo Intent que permite definir una acción para que el sistema la
gestione
Intent callIntent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:" +
myEditText.getText()));
startActivity(callIntent);
}
else
{
Toast.makeText(getApplicationContext(), "Error
de formato, trate nuevamente", Toast.LENGTH_SHORT).show();
}
}
});
}
//Método que permite utilizar expresiones regulares para filtrar el contenido de la caja de texto
publicboolean validarNumero(String number){
Pattern numeroTelefono = Pattern.compile("(\\d{2}-)?(\\d{8})");
Matcher matcher = numeroTelefono.matcher(number);
return matcher.matches();
117
}
}
Salida por pantalla
GRÁFICO NO. 27
INTENTO: REALIZAR UNA LLAMADA TELEFÉNICA
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: En este gráfico se visualiza en la parte izquiera una ventana que recibe el número de teléfono
a marcar y en laparte derecha el resultado de utilizar un intento para ejecutar la acción
2.2.4.8.12Adaptadores (Adapters)
Adapters son clases que gestionan colecciones y sirven de puente para enlazar cada
uno de los elementos de esta colección con una vista. Android provee de varias clases
de tipo Adapter: ArrayAdapter, GalleryAdapter, SimpleCursorAdapter, entre otras.
Es importante mencionar que se puede crear nuestras propias clases de tipo Adapter
para que realicen acciones a la medida. A través de los ejemplos realizados a lo largo
del documento ya se ha hecho uso de estos adaptadores, como el caso de
118
GalleryAdapter para crear el ejemplo de Gallery Layout, ArrayAdapter pare el
ejemplo de Menú Contextual y SimpleCursorAdapter en el ejemplo de Proveedores
de Contenido. A continuación se presenta una breve descripción de cada uno:
ArrayAdapter.-permite enlazar objetos de tipo Generic29 con una vista. Por
defeto el objeto que enlaza es de tipo String.
GalleryAdapter.- clase que sirve como puente para enlazar un objeto de tipo
Gallery (Galería) con las imágenes que muestras.
SimpleCursorAdapter.- un adaptador que mapea las columnas devueltas en
un cursor con un objeto ya sea TextView o ImageView. Se puede especificar
que columnas se quieren mostrar y que elementos de la interfaz de usuario
presentan la información.
2.2.4.8.13Base de Datos SQLite
SQLite es un sistema de gestión de bases de datos relacional de dominio público
contenido en una pequeña librería escrita en el lenguaje C y que tiene como principal
característica la de enlazarse con el programa en donde se utiliza de una manera
integral. Esto disminuye las dependencias externas, reduce la latencia, simplifica los
bloqueos generados por transacciones y mejora la sincronización.
29
Generics son una mejora al sistema de tipos introducida en el lenguaje Java desde la versión 5 y que
permite indicarle al compilador de que tipo son los datos que contiene una colección de elementos.
119
Debido a la reputación de ser una base de datos confiable y estable es la elegida de
muchos fabricantes para integrarla en sus productos, se encuentra en diferentes
reproductores MP3, el iPhone y el iPod Touch.
En Android, todas las bases de datos creadas y utilizadas en los programas se
almacenan en la ruta /data/data/nombre_del_paquete/base_de_datos y son por defecto
privadas y accesibles sólo por la aplicación que la creo. Para compartir la información
de una base de datos con otra aplicación lo puede hacer mediante proveedores de
contenido.
Para realizar operaciones con la base, Android proporciona dos clases: Cursors y
Content Values. Con los cursores se pueden realizar operaciones de consulta y con
los Content Values operaciones de inserción de registros. Entre los principales
métodos incluidos en la clase cursor tenemos:
moveToFirst.-posiciona el cursor en la
primera posición devuelta en la
consulta.
moveToNext.-se utiliza para desplazar el cursor al registro siguiente.
moveToPrevious.- desplaza el cursor al registro previo.
getCount.-devuelve el número de columnas retornadas en la consulta.
getColumnIndexOrThrow.- devuelve el índice del registro que contiene la
columna y lanza una excepción si no la encuentra.
120
getColumnName.- devuelve el nombre de la columna especificada en el
índice.
moveToPosition.- mueve el cursor al registro ubicado en esa posición.
getPosition.- retorna la posición en que se encuentra ubicado el cursor en la
consulta.
Como se puede observar en el siguiente código, para almacenar información en un
ContentValue su utiliza el método put(), el cual recibe como parámetro el nombre de
la columna y el valor que se va a almacenar. Finalmente para que el registro sea
guardado en la base se invoca el método insert();
ContentValues values=new ContentValues();
values.put("nombre",wrapper.getNombre());
values.put("apellido", wrapper.getApellido());
values.put("telefono", wrapper.getTelefono());
values.put("direccion", wrapper.getDireccion());
db.insert("personas", null, values);
Para finalizar se recomienda crear una clase que herede de la clase SQLiteHelper para
realizar las rutinas de relación y actualización de la versión de la base.
121
2.2.4.8.14BroadcastReciever
Este componente de Android le proporciona a los desarrolladores la capacidad de
responder a eventos que son lanzados sin un receptor explícito. Generalmente útiles
para responder a eventos del sistema. Este componente es válido mientras dure el
método onRecieve() que es el encargado de recibir el intento y gestionarlo.
Para que este receptor sea visible por Android se debe declarar en el archivo
AndroidManifest,xml.
2.2.4.8.14.1 Ejemplo del BroadcastReciever incluido en el proyecto
Esta aplicación muestra mediante un mensaje el nombre de la acción que se ejecuta
cuando se cambia la configuración del Modo Avión del teléfono.
Clase de Java: BroadcastReceiverExample.xml
package android.com.proyecto.componentes;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
publicclass BroadcastRecieverExample extends BroadcastReceiver {
@Override
publicvoid onReceive(Context _context, Intent _intent) {
Toast.makeText(_context, _intent.getAction(), Toast.LENGTH_SHORT).show();
}}
122
Archivo AndroidManifest.xml
<receiverandroid:name=".componentes.BroadcastRecieverExample">
<intent-filter>
<actionandroid:name="android.intent.action.AIRPLANE_MODE"/>
</intent-filter>
</receiver>
Salida por pantalla
GRÁFICO NO. 28
RECEPTOR DE DIFUSIÓN
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: Un broadast receiver es un componente de Android que reacciona ante eventos del sistema o
definidos por el desarrollador, en el gráfico se aprecia que ante el evento de cambiar el modo avión del
dispositivo se presenta un mensaje informando la acción
123
2.2.4.8.15Servicios
Un servicio es un componente que nos proporciona Android para ejecutar acciones
que requieren un largo tiempo de vida y que no poseen interfaz de usuario. Se pueden
utilizar junto con una determinada actividad para realizar una tarea en conjunto, cabe
destacar que un servicio no posee un proceso propio para su ejecución sino que
forma parte de la aplicación donde ha sido definido.
Los servicios al igual que las actividades poseen un ciclo de vida:
onCreate(): método que se ejecuta cuando el servicio es creado.
onStart(): método que se ejecuta cada vez que se invoca el método
startService().
onDestroy(): método invocado cuando el servicio ya no es necesario y debe
ser destruido.
Adicionalmente los servicios se pueden ejecutar de manera local o de manera remota,
para el primer caso la interacción con las actividades se logra mediante la definición
de un objeto de la clase Binder, para el segundo caso es necesario hacer uso de una
interfaz remota AIDL(Android Interface Definition Language).
124
2.1.4.8.15.1 Ejemplo de servicio incluido en el proyecto
Esta pequeña aplicación utiliza un servicio para reproducir y detener un archivo en
formato mp3.
Archivo XML: service_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns: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="Música: Highway to Hell"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
>
<Button
android:id="@+id/btnReproducir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reproducir"
/>
<Button
android:id="@+id/btnDetener"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Detener"
/>
</LinearLayout>
</LinearLayout>
125
Clase de Java: ServiceExample.java
package android.com.proyecto.componentes;
import android.app.Service;
import android.com.proyecto.R;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
publicclass ServiceExample extends Service {
privatestaticfinal String ETIQUETA = "Mi Servicio";
MediaPlayer player;
@Override
public IBinder onBind(Intent intent) {
returnnull;
}
@Override
publicvoid onCreate() {
Toast.makeText(this, "Servicio creado", Toast.LENGTH_LONG).show();
Log.d(ETIQUETA, "onCreate");
//Creación del objeto MediaPlayer para la reproducción de un archivo de
música
player = MediaPlayer.create(this,R.raw.highwaytohell);
player.setLooping(false); //Para indicar si se cicla o no
}
@Override
publicvoid onDestroy() {
Toast.makeText(this, "Servicio detenido", Toast.LENGTH_LONG).show();
Log.d(ETIQUETA, "onDestroy");
player.stop();
}
@Override
publicvoid onStart(Intent intent, int startid) {
Toast.makeText(this, "Ejecutando el servicio... ",
Toast.LENGTH_LONG).show();
Log.d(ETIQUETA, "onStart");
player.start();
}}
126
Clase de Java: ServiceExampleActivity.java
Esta clase contiene la actividad que ejecuta el servicio.
package android.com.proyecto.componentes;
import android.app.Activity;
import android.com.proyecto.R;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
publicclass ServiceExampleActivity extends Activity {
privatestaticfinal String ETIQUETA = "Mi Actividad para mostrar el Servicio";
private Button btnReproducir;
private Button btnDetener;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.service_layout);
btnReproducir = (Button) findViewById(R.id.btnReproducir);
btnDetener = (Button) findViewById(R.id.btnDetener);
btnReproducir.setOnClickListener(new View.OnClickListener(){
@Override
publicvoid onClick(View v) {
Log.d(ETIQUETA, "onClick: Servicio ejecutándose");
Intent intento=new
Intent(getApplicationContext(),ServiceExample.class);
startService(intento);
}
});
btnDetener.setOnClickListener(new View.OnClickListener(){
@Override
publicvoid onClick(View v) {
Intent intento=new
Intent(getApplicationContext(),ServiceExample.class);
stopService(intento);}});}}
127
Salida por pantalla:
GRÁFICO NO. 29
SERVICIO
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: Para este ejemplo se utilizó un servicio que gestiona la reproducción de un archivo mp3
2.2.4.8.16Hilo (Thread)
Cuando se habla de hilos estamos hablando de subprocesos que se ejecutan en
segundo plano, en Android para su gestión, se requiere una instancia de la clase
Handler y solo puede existir una por actividad.
Para que el hilo se comunique con el objeto de esta clase se lo puede realizar
mediante dos mecanismos, enviando mensajes o a través de objetos Runnable.
128
En caso de utilizar mensajes el esquema que utiliza el sistema para su gestión es de
tipo cola. Entre los principales métodos tenemos:
sendMessage().-coloca inmediatamente el mensaje en la cola.
sendMessageAtFrontOfQueue().-coloca de manera inmediata el mensaje en
la cola asignándole la mayor prioridad para que se ejecute por delante de los
mensajes anteriores.
sendMessageDelayed().-coloca el mensaje en la cola después del tiempo
indicado.
2.2.4.8.16.1 Ejemplo de hilo incluido en el proyecto
Para la demostración del funcionamiento de los hilos, la aplicación que se muestra a
continuación presenta una barra de progreso que se actualiza cada 3 segundos por la
acción de uno de ellos.
Archivo XML: thread_example.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ProgressBar
android:id="@+id/myBar"style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
129
Clase de Java: ThreadExample.java
package android.com.proyecto.componentes;
import android.app.Activity;
import android.com.proyecto.R;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
publicclass ThreadExample extends Activity {
private ProgressBar progressBar;
//Creación del objeto Handler que permite la interacción con el hilo
Handler handler=new Handler() {
publicvoid handleMessage(Message msg) {
progressBar.incrementProgressBy(5);
}
};
booleanisRunning=false;
@Override
publicvoid onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.thread_example);
progressBar=(ProgressBar)findViewById(R.id.myBar);
}
publicvoid onStart()
{
super.onStart();
progressBar.setProgress(0);
//creación del objeto Thread
Thread t=new Thread(new Runnable()
{
@Override
publicvoid run() {
try{
for(int i=0;i<20 &&isRunning;i++)
{
//Dormimos el hilo 3 segundos y enviamos un mensaje al
objetoHandler para que incremente la barra de progreso
Thread.sleep(3000);
handler.sendMessage(handler.obtainMessage());
}
}catch(Exception e){}
}
});
isRunning=true;
t.start();
}
130
publicvoid onStop()
{
super.onStop();
isRunning=false; }}
Salida por pantalla
GRÁFICO NO.30
HILO (THREAD)
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis:El gráfico presenta una barra de progreso en acción, cada 5 segundos un hilo le indica a la
barra que debe avanzar
2.2.4.8.17Archivos (File)
Las clases que utiliza Android para la gestión de archivo son las propias del lenguaje
Java.
2.2.4.8.17.1 Ejemplo de archivos incluido en el proyecto
El ejemplo que se muestra a continuación es un navegador de archivos, el cual está
estructurado mediante el uso de la clase File. Además del constructor de la clase, los
métodos utilizados son:
131
isDirectory().-permite determinar si el archivo en cuestión es un directorio.
getPath().-devuelve una cadena de caracteres indicando la ruta absoluta del
archivo.
getParent().-devuelve una cadena de caracteres con el nombre del directorio
que contiene ese archivo.
getParentFile().-devuelve un objeto del tipo File que contiene el archivo
padre, es decir el directorio en donde se encuentra el archivo.
listFiles().-devuelve un arreglo de tipo File con todos los archivos ubicados en
ese directorio.
Archivo XML: item_view.xml
<?xmlversion="1.0"encoding="utf-8"?>
<TextViewxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Clase de Java: FileBrowser.java
package android.com.proyecto.componentes;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.com.proyecto.R;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
132
publicclass FileBrowser extends ListActivity {
ArrayList<String>ls_archivos=new ArrayList<String>();
privatefinalstaticintOPTION_RETROCEDER=0;
privatefinalstaticintOPTION_SALIR=1;
File lf_temp;
File lf_temp2;
@Override
publicvoid onCreate(Bundle icicle) {
super.onCreate(icicle);
this.getFiles(new File("/").listFiles());
}
@Override
protectedvoid onListItemClick(ListView l,View v, int position,long id)
{
int li_columna_seleccionada=(int)id;
if(li_columna_seleccionada==0)
{
if(lf_temp2!=null)
{
if(lf_temp2.isDirectory())
{
if(!lf_temp2.getPath().equals("/")){
lf_temp2=lf_temp2.getParentFile();
getFiles(lf_temp2.listFiles());}
}
else
{
if(!lf_temp2.getParent().equals("/")){
lf_temp2=lf_temp2.getParentFile().getParentFile();
getFiles(lf_temp2.listFiles());
}
}
}
}
else
{
try{
lf_temp=new File(ls_archivos.get(li_columna_seleccionada));
lf_temp2=lf_temp;
if(lf_temp.isDirectory())
{
getFiles(lf_temp.listFiles());
}
else
{
AlertDialog.Builder alert=new
AlertDialog.Builder(FileBrowser.this);
133
alert.setMessage("Archivo seleccionado: " + lf_temp.getName());
alert.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
@Override
publicvoid onClick(DialogInterface dialog, int which) {
try {
Intent myIntent=new
Intent(android.content.Intent.ACTION_VIEW,Uri.parse("file://"+lf_temp.getAbsolutePath()));
startActivity(myIntent);
} catch (Exception e) {
e.printStackTrace();
}
}
});
alert.create().show();
}}
catch(Exception e)
{
e.printStackTrace();
}
}
}
privatevoid getFiles(File[] files){
try{
if(files==null)
{
Toast.makeText(getApplicationContext(),"No tiene permiso para acceder a este directorio",
Toast.LENGTH_LONG).show();
}
else
{
ls_archivos=new ArrayList<String>();
ls_archivos.add("..");
for(File file : files){
ls_archivos.add(file.getPath());
}
ArrayAdapter<String> fileList = new ArrayAdapter<String>(this,R.layout.item_view,
ls_archivos);
setListAdapter(fileList);
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
134
Salida por pantalla
GRÁFICO NO. 31
NAVEGADOR DE ARCHIVOS
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis:En la imagen de la pantalla capturada se muestra la funcionalidad del navegador de archivos,
al acceder un directorio se presenta el listado de archivos y en la parte superior la opción para
retroceder en el árbol de directorios “..”
2.2.4.8.18Navegador WebKit
WebKit es
un framework para
aplicaciones
que funciona como
base para
el navegador web Safari de Apple y que se encuentra disponible para Android. El
navegador de Android es lo suficientemente complejo que cuenta con su propia
librería, android.webkit, y permite mostrar información HTML y utilizar todas las
características de navegación embebidas en nuestra aplicación.
135
2.2.4.8.18.1 Ejemplo del navegador WebKit incluido en el proyecto
El pequeño ejemplo muestra una caja de texto en la cual se debe ingresar la URL a
buscar y un botón que al dar clic realiza la acción de búsqueda.
Archivo XML: webkit_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns: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="wrap_content"
android:layout_height="wrap_content"
android:text="URL:"
/>
<EditText
android:id="@+id/edtUrl"
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:text="Aceptar"
/>
<WebView
android:id="@+id/wvWeb"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
136
Clase de Java: WebViewExample.java
package android.com.proyecto.widgets;
import android.R.color;
import android.app.Activity;
import android.com.proyecto.R;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
publicclass WebViewExample extends Activity {
private Button btnAceptar;
private EditText edtUrl;
private WebView myWebView;
private String _url;
/** Called when the activity is first created. */
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webkit_layout);
btnAceptar=(Button)findViewById(R.id.btnAceptar);
edtUrl=(EditText)findViewById(R.id.edtUrl);
myWebView=(WebView)findViewById(R.id.wvWeb);
myWebView.setBackgroundColor(color.black);
myWebView.getSettings().setJavaScriptEnabled(true);
btnAceptar.setOnClickListener(new OnClickListener()
{
@Override
publicvoid onClick(View v) {
if(edtUrl.getText().toString().equals(""))
{
Toast.makeText(getApplicationContext(), "Ingrese una
URL", Toast.LENGTH_SHORT).show();
}
else
{
try
{
_url=edtUrl.getText().toString();
if(!_url.substring(0,6).equals("http://"))
{
_url="http://" + _url;
}
myWebView.loadUrl(_url);
}
catch(Exception e)
{
137
e.printStackTrace();
}
}
}
});
}
}
Salida por pantalla
GRÁFICO NO. 32
NAVEGADOR WEBKIT
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: Android permite a los desarrolladores hacer uso del navegador webkit en sus aplicaciones,
tal como se aprecia en el gráfico
138
2.2.4.8.19Multimedia
Android basa su soporte multimedia haciendo uso de la plataforma multimedia de
código abierto openCORE, desarrollada por la corporación PacketVideo Corporation.
Android utiliza las funcionalidades de openCORE envolviéndolas en un API fácil de
usar por los desarrolladores. Entre las bondades que proporciona tenemos:
Interfaces
para
terceros
y
los
códecs
multimedia
de
hardware,
dispositivos de entrada y salida, y el contenido de las políticas.
Medios de reproducción, streaming, descarga y reproducción progresiva,
incluyendocontenedores 3GPP, MPEG-4, AAC30, y MP3.
Codificadores y decodificadores de video, incluyendo MPEG-4, H.26331y
AVC(H.26432) y JPEG.
Codecs de idioma, incluyendo AMR-NB y AMR-WB33.
Codecs de audio, incluyendo MP3, AAC y AAC +.
Medios de grabación, incluyendo 3GPP, MPEG-4 y JPEG.
Videoconferencia basada en el estándar 324-M.
30
Ver su definición en el Anexo 1: Glosario
Ver su definición en el Anexo 1: Glosario
32
Ver su definición en el Anexo 1: Glosario
33
Ver su definición en el Anexo 1: Glosario
31
139
A continuación se muestra un cuadro más detallado con la información de los
formatos que soporta:
CUADRO NO. 5
FORMATOS MULTIMEDIA SOPORTADOS EN LA PLATAFORMA
Tipo
Formato
Codificador
Decodificador
Tipos de archivos soportados
LC AAC / LTP
X
3GPP (.3 gp) y MPEG-4 (.
Mp4,. M4a).No tienen soporte
de primas AAC (. Aac)
HE-AAC34v1
(AAC +)
X
HE-AACv2
(mejorado AAC +)
X
AMR-NB
Audio
X
3GPP (.3 gp)
AMR-WB
X
3GPP (.3 gp)
MP3
X
MP3 (. Mp3)
X
Tipo 0 y 1 (. Mid,. XMF.
Mxmf).También RTTTL / RTX
(. RTTTL,. RTX), OTA (.
OTA) y iMelody (. Imy)
X
Ogg (. Ogg)
X
WAVE (. Wav)
X
JPEG (. Jpg)
GIF
X
GIF (. Gif)
PNG
X
PNG (. Png)
BMP
X
BMP (. Bmp)
X
3GPP (.3 gp) y MPEG-4 (.
Mp4)
3GPP (.3 gp) y MPEG-4 (.
Mp4)
3GPP (.3 gp)
MIDI
X
35
Ogg Vorbis36
PCM / WAVE
JPEG
Imagen
H.263
Vídeo
37
X
X
H.264 AVC
X
MPEG-4 SP38
X
Elaboración: Traducido de la fuente
Fuente: Página oficial de Android: http://developer.android.com/guide/appendix/media-formats.html
34
Ver su definición en el Anexo 1: Glosario
Ver su definición en el Anexo 1: Glosario
36
Ver su definición en el Anexo 1: Glosario
37
Ver su definición en el Anexo 1: Glosario
38
Ver su definición en el Anexo 1: Glosario
35
140
2.2.4.8.19.1 MediaPlayer
La
clase
MediaPlayer
permite
reproducir
archivos
multimedia
como
recursos de las aplicaciones, pueden estar almacenados en archivos locales,
proveedores de contenidos, e incluso obtenerlos desde una dirección URL de la red.
2.2.4.8.19.1.1 Reproducción de archivos de audio
En el ejemplo demostrativo de cómo funciona un Servicio se realizó la reproducción
de un archivo con formato MP3. Lo primero que se debe realizar es crear un objeto
pasándole como parámetros el contexto y la fuente de donde se va a obtener la
información. Como se muestra a continuación:
player = MediaPlayer.create(this,R.raw.highwaytohell);
Para ejecutar el archivo se usa el método start() y para detenerlo el método stop();
2.2.4.8.19.1.2Reproducción de archivos de video
Para reproducir un archivo de video existen dos maneras, en ambos casos se debe
especificar la superficie en donde se va a visualizar.
1. Usando la vista VideoView.
2. A través de la clase MediaPlayer pero utilizando el objeto surface para
encapsularlo y poder presentarlo al usuario.
141
2.2.4.8.19.1.3 Grabación de audio y video
Las acciones de grabar audio y video en Android sonadministradas por la clase
MediaRecorder. Para utilizarla se debe dar los permisos necesarios en el archivo de
configuración AndroidManifest.xml:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
Luego es importante el orden en que se realizan las acciones para que la aplicación se
pueda ejecutar y actuar de manera adecuada. Los pasos se describen a continuación:
Crear el objeto MediaRecoreder: MediaRecorder myMediaRecorder = new
MediaRecorder()
Indicar
la
fuente
de
entrada
para
la
grabación:
myMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
Definir el formato de salida:
myMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAUL
T);
Especificar la codificación de audio y video, velocidad de fotogramas, tamaño
de salida:
myMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAUL
T);
142
Seleccionar un archivo de salida:
myMediaRecorder.setOutputFile("/sdcard/arhivo_salida.mp4");
Prepararse para la grabación, iniciar el proceso y terminarlo.
 myMediaRecorder.prepare();
 myMediaRecorder.start();
 myMediaRecorder.stop();
2.2.4.8.19.2Ejemplo incluido en el proyecto
Esta pequeña aplicación permite reproducir un archivo de video y enviar una
notificación cuando ha finalizado.
Archivo XML: multimedia_layout.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="14px"
android:text="Video Oficial Android 1.6"
android:layout_gravity="center_horizontal"
/>
<VideoViewandroid:id="@+id/VideoView01"
android:layout_width="176px"
android:layout_height="144px"
/>
<LinearLayout
android:orientation="horizontal"
android:gravity="center_horizontal"
143
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageButton
android:src="@drawable/play"
android:id="@+id/btn_reproducir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageButton
android:src="@drawable/pause"
android:id="@+id/btn_pausar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
Clase de Java
package android.com.proyecto;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.MediaController;
import android.widget.VideoView;
publicclass EjemploMultimedia extends Activity {
private ImageButton btn_reproducir;
private ImageButton btn_pausar;
private VideoView VideoView01;
private MediaController mediaController;
publicstaticfinalintnotification_id=1;
inticon = R.drawable.stop;
CharSequence tickerText = "Reproducción finalizada";
longwhen = System.currentTimeMillis();
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.multimedia_layout);
VideoView01=(VideoView)findViewById(R.id.VideoView01);
Uri path = Uri.parse("android.resource://android.com.proyecto/" + R.raw.official_video);
VideoView01.setVideoURI(path);
144
mediaController=new MediaController(this);
mediaController.setMediaPlayer(VideoView01);
VideoView01.setMediaController(mediaController);
VideoView01.requestFocus();
btn_reproducir=(ImageButton)findViewById(R.id.btn_reproducir);
btn_reproducir.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
VideoView01.start();}
});
btn_pausar=(ImageButton)findViewById(R.id.btn_pausar);
btn_pausar.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
VideoView01.pause();}
});
VideoView01.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
publicvoid onCompletion(MediaPlayer mp) {
Context context = getApplicationContext();
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager notificationManager = (NotificationManager)
getSystemService(ns);
CharSequence contentTitle = "Notificación";
CharSequence contentText = "El video que estaba reproduciendo se acabó!";
Intent notificationIntent = new Intent(getApplicationContext(),
EjemploMultimedia.class);
PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0,
notificationIntent, 0);
Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notificationManager.notify(notification_id, notification);}});}}
145
GRÁFICO NO. 33
REPRODUCCIÓN DE VIDEO
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: En Android la reproducción de video se la realiza haciendo uso de la clase MediaController,
en la imagen se aprecia el resultado de utilizarla
2.2.4.8.20Notificaciones
Como ya se ha mencionado previamente en este documento los teléfonos han
evolucionado, Android pensando en la interacción con el usuario se basa en un
concepto que no es nuevo pero que si lo ha mejorado para permitirle al teléfono
enviar notificaciones al usuario cuando un evento ha ocurrido, estas notificaciones
van desde presentar el evento en la barra de estado hasta emitir un sonido o hacer
vibrar el equipo. Es la tarea del desarrollador sacar provecho a esta característica.
146
Para definir una notificación se debe crear y utilizar un evento de la clase
Notification, y para administrarla se debe implementar un objeto de la clase
NotificationManager. Como el objeto creado en el ejemplo de reproducción de video:
inticon = R.drawable.stop; //Ícono a presentrase
CharSequence tickerText = "Reproducción finalizada"; //Mensaje
longwhen = System.currentTimeMillis(); //Hora
CharSequence contentTitle = "Notificación";
CharSequence contentText = "El video que es taba reproduciendo se acabó!";
Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notificationManager.notify(notification_id, notification);
El método setLatestEventInfo permite aumentar los detalles de la información que se
muestra cuando se expande el panel de notificaciones como sevisualiza en el Gráfico
No. 34.
147
GRÁFICO NO. 34
NOTIFICACIÓN DE FINALIZACIÓN DE REPRODUCCIÓN DEL VIDEO
Elaboración: Antonio Rodríguez
Fuente: Pantalla capturada del IDE
Análisis: Otra de las bondades de Android laconstituyen las notificaciones, mecanismo con el cual se
puede alertar al usuario que ha ocurrido un evento, para el ejemplo se muestra en la imagen que se ha
enviado una notificación cuando la reproducción del video llegó a su fin.
2.2.4.8.21Google Maps
Para terminar la explicación demostrativa de Android quiero hablar un poco sobre el
uso de este API, como se habrán dado cuenta en los ejemplos, para utilizar los
mapas se requiere importar la librería com.google.android.maps.
Cuando una aplicación contiene un elemento MapView esta solicita la información
del mapa a presentarse mediante Internet. Como parte de la solicitud que se envía a
Google Maps se incluye una clave que identifica al desarrollador.
148
Los pasos necesarios para generar esta clave única son:
1. Obtener la huella digital MD5 para el certificado de registro
Dirigirse a través de la ventana de comando hasta la carpeta bin
contenida
en
el
SDK
de
java:
cd:
“C:\Archivos
de
programa\Java\jdk1.6.0_18\bin”
Ejecutar el programa keytool con las siguientes opciones: keytool -list
-alias alias_name -keystore my- key.keystore, en donde my-key es el
nombre que se le dará a la clave.
Como resultado el programa nos solicitará ingresar una contraseña
para obtener la clave. Finalmente luego de generarla se visualizará en
la consola un mensaje como el aquí mostrado: Certificate fingerprint
(MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98
2. Registrar el certificado de la huella digital en el servicio de Google Maps
Cargar la siguiente página en el navegador: http://code.google.
com/android/maps-api-signup.html
Para realizar el registro se requiere tener una cuenta en Google, una
vez accesado se debe leer y aceptar los términos, pegar el certificado
de la huella digital en la casilla correspondiente y dar clic en generar.
Finalmente se presentará la clave para utilizar el API de Google Maps.
Esta clave debe incluirse en el elemento MapView tal como se muestra
a continuación:
<com.google.android.maps.MapView
149
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="example_Maps_ApiKey_String"/>
2.2.4.8.22Opciones avanzadas de Android
2.2.4.8.22.1 Acceso al Hardware
Android proporciona una serie de librerías que le permiten a los desarrolladores
accesar al hardware del Equipo sin tener que preocuparse por detalles de conexión o
código extenuante. Entre las principales librerías que cumplen este cometido
tenemos:
TelephonyManager.- proporciona acceso a la información acerca del
dispositivo y de los servicios telefónicos. Las aplicaciones hacen uso de esta
clase para determinar los estados y los servicios telefónicos, así como también
obtener información del proveedor de los servicios.
LocationManager.- clase que proporciona acceso a los servicios de
localización del sistema. Estos servicios permiten que las aplicaciones puedan
obtener actualizaciones periódicas de la situación geográfica del dispositivo.
150
MediaRecorder.- clase que
proporciona los métodos necesarios para la
grabación de audio y video.
SensorManager.- clase que proporciona el acceso a los diferentes sensores
incorporados en el equipo.En Android, los sensores son parte integral de la
experiencia del usuario. El listado de los sensores soportados por la
plataforma incluye:
 Acelerómetro
 Giroscopio
 Sensor de luz
 Campo magnético
 Orientación
 Presión
 Proximidad
 Temperatura
Librerías de comunicación para el manejo de las conexiones de red, bluetooth
y wifi.
 ConnectityManager.- clase que nos proporciona información de los
estados de la conexión de la red.
 Bluetooth.- protocolo de comunicaciones diseñado para corto alcance.
A partir de Android 2.1, sólo la comunicación encriptada es
compatible,
lo
que
significa
que
sólo
se
puede
151
formar conexiones entre los dispositivos vinculados. Las clases que
gestionan la interacción Bluetooth entre dispositivos son:

BluetoothAdapter.- representa el dispositivo Bluetooth local, es
decir,el dispositivo Android en el que se ejecuta la aplicación.

BluetoothDevice.- cada dispositivo remoto con el que nuestro
equipo se desea comunicar.

BluetoothSocket y BluetoothServerSocket.- la interfaz Bluetooth
Socket es similar a las clases de Java Socket y ServerSocke. Del
lado del servidor crear el método BluetoothServerSocket para crear
un objeto que este escuchando o sensando los otros dispositivos y
administrar la conexión cuando esta se realiza. Del lado del cliente
usar BluetoothSocket para permitir la interacción con el servidor.
 WifiManager.-como su nombre lo indica esta clase nos permite
gestionar los aspectos relacionados a la conexión Wifi. Entre las
opciones que nos facilita tenemos:

Lista de las redes configuradas.

Información de la red Wi-Fi activa, si es que existe alguna.

Definición
de
acciones
a
la
que
pueden
responder
BroadCastReceiver cuando ocurren cambios del estado de la WiFi.
152
Text to speech.- API incluido en Android desde la versión 1.6 y se utiliza para hacer
que las aplicaciones “hablen”.
2.3 FUNDAMENTACIÓN LEGAL
2.3.1Constitución del Ecuador, Título VII, Capítulo Primero, Sección primera
(Educación)
De acuerdo a la Constitución del Ecuador, Título VII (Régimen del buen vivir),
Capítulo Primero (Inclusión y equidad), Sección primera (Educación).
Art. 349.‐El sistema de educación superior tiene como finalidad la formación
académica y profesional con visión científica y humanista; la investigación
científica y tecnológica; la innovación, promoción, desarrollo y difusión de los
saberes y las culturas; la construcción de soluciones para los problemas del país,
en relación con los objetivos del régimen de desarrollo.
2.3.2Constitución del Ecuador, Título VII, Capítulo Primero, Sección octava
De acuerdo a la Constitución del Ecuador, Título VII (Régimen del buen vivir),
Capítulo Primero (Inclusión y equidad), Sección octava(Ciencia, tecnología,
innovación y saberes ancestrales).
153
Art. 386.‐Será responsabilidad del Estado:
1. Facilitar e impulsar la incorporación a la sociedad del conocimiento para
alcanzar losobjetivos del régimen de desarrollo.
2. Promover la generación y producción de conocimiento, fomentar la
investigacióncientífica y tecnológica, y potenciar los saberes ancestrales,
para así contribuir a larealización del buen vivir, al sumak kausay.
3. Asegurar la difusión y el acceso a los conocimientos científicos y
tecnológicos, elusufructo de sus descubrimientos y hallazgos en el marco
de lo establecido en laConstitución y la Ley.
4. Garantizar la libertad de creación e investigación en el marco del respeto
a la ética, lanaturaleza, el ambiente, y el rescate de los conocimientos
ancestrales.
5. Reconocer la condición de investigador de acuerdo a la Ley.
2.4 HIPÓTESIS A CONTESTARSE
¿Constituye Android una oportunidad de negocio?
¿Tiene oportunidades de consolidarse en el mercado mundial de teléfonos
inteligentes?
¿Proporciona mayores ventajas a los desarrolladores en comparación con la
competencia?
¿Es Android el futuro de la computación móvil y la oportunidad que
esperaban los desarrolladores para explotar sus aplicaciones?
154
2.5 VARIABLES DE LA INVESTIGACIÓN
Para demostrar las hipótesis descritas en el tópico anterior se utilizarán una serie de
variables que se han agrupado en función a comparaciones realizadas de las
funcionalidades de Android.
2.5.1 Análisiscomparativo de Android, Symbian OS y Windows Mobile
Para realizar el estudio comparativo entre estas plataformas se han considerado una
serie de criterios de comparación: criterios básicos, criterios principales, criterios
técnicos y criterios de interfaz de usuario.
Debido a las diferentes necesidades de los usuarios, la identificación de un sistema
operativo ideal no es posible, pero se puede realizar una aproximación de sus
preferencias basándose en las estadísticas de las características del mercado de
teléfonos móviles. En base a esta premisa se puede deducir que los siguientes
criterios
son importantes para un sistema operativo exitoso, cada uno con su
respectivo conjunto de variables a ser evaluadas.
155
2.5.1.1 Criterios básicos
2.5.1.1.1 Comparativa de los Mercados de Aplicaciones Móviles
Características principales de cada Tienda. La comparación se realizará en
base a tres criterios:
Interfaz de usuario.- debe considerarse:
 Si la aplicación cliente se encuentra pre-instalada en el
dispositivo o el usuario la debe instalar para poder realizar la
descarga del contenido de la tienda virtual.
 Forma de pago de los productos descargados.
Interfaz de desarrolladores.- debe considerarse:
 Si en el sitio se permite la descarga del SDK
 Si existe un portal propio para los desarrolladores
 El nivel de control para el registro de aplicaciones
Contenido y equipos objetivos.- debe considerarse:
 El tipo de contenido que el usuario del equipo se puede
descargar del sitio.
 El tipo de dispositivo a quienes están dirigidas las aplicaciones
Modelo de ingresos monetarios de cada tienda. Para la comparación se
considerará:
156
Modelo de reparto de ingresos.- cómo se distribuyen las ganancias
obtenidas por las ventas de las aplicaciones. Es decir, el porcentaje que
le corresponde al desarrollador, a la compañía y a la operadora.
Pago y facturación.- constituye el valor monetario que se debe
cancelar a la compañía dueña del sitio y por ende de la plataforma para
poder publicar y vender las aplicaciones en la tienda
Posición en el mercado mundial.- debido a lo joven de la plataforma y a su
recién ingreso en el mercado de teléfonos inteligentes ecuatoriano, se mostrará
las estadísticas de ventas por sistemas operativos a nivel mundial con el
objetivo de tener una visión de las proyecciones.
Estadísticas de las tiendas en línea.- finalmente se presentarán estadísticas
de los sitios con el propósito de demostrar el contenido que ofrece a los
usuarios. Específicamente se evaluará:
Proporción de aplicaciones pagadas vs las gratuitas
Precio promedio de las Aplicaciones
2.5.1.2Criterios principales
Portabilidad.-se
define
como
la
característica
que
posee
un software para ejecutarse en diferentes plataformas, el código fuente del
software es capaz de reutilizarse en vez de crearse un nuevo código cuando el
157
software pasa de una plataforma a otra. A mayor portabilidad menor es la
dependencia del software con respecto a la plataforma.En cuanto a sistemas
operativos para dispositivos móviles avanzados significa la posibilidad de
utilizar dicho sistema operativo en cada teléfono celular, sin importar su
marca o tipo.
Fiabilidad.- capacidad de un sistema para funcionar y mantener sus funciones
en circunstancias ordinarias, así como las circunstancias hostiles o
inesperadas, para un periodo de tiempo.
Conectividad.-en dispositivos móviles significa la posibilidad de conectarse
con otros dispositivos mediante el apoyo del sistema operativo, a través de
tecnologías como bluetooth o infrarrojos. El objetivo es realizar intercambio
de información.
Tamaño del Kernel (Núcleo).-el núcleo del sistema operativo proporciona el
acceso a los distintos elementos del hardware del dispositivo. Ofrece distintos
servicios a las capas superiores como son los drivers para el hardware, la
gestión de procesos, el sistema de archivos y el acceso y gestión de la
memoria. El tamaño del núcleo es un factor vital en los sistemas operativos
para dispositivos móviles ya que es cargado primero durante el proceso de
158
booteo (carga) y luego permanece en la memoria principal del sistema
operativo. Esto influye en la capacidad.
Seguridad.- la seguridad es el atributo de un sistema que lo protege de los
ataques y otras interferencias. En cuanto a sistemas operativos para
dispositivos móviles, significa las características del sistema operativo, con el
fin de que sea seguro en cualquier aspecto.
Características especiales.-constituyen los aspectos distintivos que lo
diferencian de los demás, para la comparativa se
contempla aquellas
prestaciones únicas de cada sistema operativo.
2.5.1.3Criterios técnicos
Administración de energía.- verificar si la plataforma posee mecanismos
para el ahorro de energía como medio para prolongar la duración de la carga
de la batería.
Multitarea.- capacidad para ejecutar varios procesos al mismo tiempo.
159
2.5.1.4 Criterios de Interfaz de usuario
División entre el sistema operativo e interfaz de usuario.-nivel de
dependencia del sistema operativo para la creación de interfaz de usuario de
las aplicaciones.
Personalización de la interfaz de usuario.-indicar el nivel de facilidad con
que el usuario puede personalizar la apariencia de la interfaz gráfica (frontend).
2.5.2 Comparativa de los SDKs de Android y Symbian OS
Las variables a evaluarse son:
Requerimientos del sistema.-características de hardware y de software que
deben poseer los equipos para que se puedan ejecutar cada uno de los
respectivos SDKs.
Ciclos de vida de las Aplicaciones.- diferentes estados por lo que una
aplicación o un programa pasa desde que es ejecutado hasta que finaliza.
160
Librerías.- una librería es una colección de subrutinas o clases que se utilizan
para desarrollar software. Las librerías contienen código y datos que
proporcionan servicios
a programas independientes. Esto permite el
intercambio y el cambio de código y datos de forma modular.
Almacenamiento persistente de datos.- tecnologías utilizadas en cada SDK
para almacenar información que perdure incluso cuando el dispositivo se
encuentra apagado.
Manejo de eventos.- un evento en programación es la acción que se genera
cuando el usuario de la aplicación interactúa con un elemento de la interfaz
gráfica. En la comparativa se evaluará como cada una de las plataformas
gestiona los eventos.
CAPITULO III
METODOLOGÍA
DISEÑO DE LA INVESTIGACIÓN
3.1 MODALIDAD DE LA INVESTIGACIÓN
Investigación bibliográfica o documental.- El presente trabajo se presenta como un
estudio de Android, en un mayor porcentaje se realizará una investigación
documental basándose en diversas fuentes bibliográficas que van desde libros,
páginas de internet y reportes. Sin embargo se realizarán una serie de ejemplos
demostrativos que servirán para presentar de manera práctica lo expuesto de manera
teórica. Además de la creación de cuatro aplicaciones que tiene como objetivo
principal el exponer el verdadero potencial que brinda la plataforma a los
desarrolladores y hacia donde orientarse para sacar el provecho a la misma.
3.1.1TIPO DE INVESTIGACIÓN
La investigación que se procederá a realizar para el desarrollo de este estudio se
presenta como una investigación de “comprobación de hipótesis” y de “acción”.
162
Para cumplir con los objetivos de este tipo de investigación se procederá a realizar
una:
Descripción de las características de Android y evaluación de los
componentes principales que proporciona la plataforma para el desarrollo de
aplicaciones, sustentado mediante pequeños programas.
Comparativa de las características y prestaciones con plataformas que operan
en el mismo mercado objetivo, así como su actual posición
y las
proyecciones a mediano plazo.
Comparativa práctica entre la codificación que se debe realizar para crear una
misma aplicación tanto para Symbian OS como para Android.
3.2 POBLACIÓN Y MUESTRA
Debido a las razones que ya se ha expuesto anteriormente sobre lo reciente de la
plataforma y a que en nuestro país recién hizo su arribo esta tecnología,como parte
del estudio se realizará una encuesta dirigida a personas que trabajan o han trabajado
desarrollando aplicaciones para teléfonos inteligentes. El propósito de dicha encuesta
es determinar primero, en qué plataforma han desarrollado, si tienen conocimiento
sobre Android, además de conocer las características que consideran ellos que una
163
plataforma para teléfonos inteligentes les debe brindar y hacia donde creen se va a
orientar el futuro de esta tecnología.
La población la constituyen los desarrolladores de aplicaciones para teléfonos
inteligentes de la ciudad de Guayaquil, no existe un registro estadístico del número
exacto de personas que realicen esta actividad. Sin embargo, se escogió una pequeña
muestra de 5 personas que trabajan en diferentes empresas para que contesten las
respuestas de acuerdo a su criterio y experiencia. Las personas encuestadas son:
Gregorio Zambrano, Líder de Proyectos. Empresa Corlasosa
Jorge Espinoza, Líder de Proyectos. Empresa Open Mind Technology
Jorge Morán, Desarrollador. Empresa Omtech
Orlando Rubio, Desarrollador. Empresa Banco de Guayaquil
Victor Indacochea, Analista-Programador. Empresa Open Mind Technology
164
3.3 OPERACIONALIZACIÓN DE VARIABLES
CUADRO No. 6
MATRIZ DE OPERACIONALIZACIÓN DE VARIABLES
Variables
Dimensiones
V.I
Sistemas
operativos
Análisis
comparativo
de Android, Symbian OS
Android, Symbian OS y y Windows Mobile
Windows
Mobile.
Debido a las diferentes
necesidades de los usuarios, la
identificación de un sistema
operativo ideal no es posible,
pero se puede realizar una
aproximación
de
sus
preferencias basándose en los
siguientes
criterios:
Básicos, Principales, Técnicos
y de Interfaz de Usuario
V.I
Comparativa de los SDKs de
Android y Symbian OS
Para realizar el análisis de un
SDK no es suficiente el
describir sus características de
manera teórica, es necesario el
desarrollar aplicaciones en el
aspecto práctico para obtener
una visión más clara
Indicadores
Técnicas y/o Instrumentos
Criterios básicos:
Textos
seleccionados,
Características principales de Bibliografía especializada y
cada Tienda, Modelo de encuestas
ingresos monetarios de cada
tienda, Posición en el
mercado
mundial
y
Estadísticas de las tiendas en
línea.
Criterios Principales:
Portabilidad,
Fiabilidad,
Conectividad, Tamaño del
Kernel,
Seguridad
y
Características especiales
Criterios Técnicos:
Administración de energía y
Multitarea
Criterios de Interfaz de
usuario:
División entre el sistema
operativo e interfaz de
usuario y Personalización
Plataformas Android y Requerimientos del sistema Textos
seleccionados,
Symbian OS
Ciclos de vida de las experimentación
Aplicaciones
Librerías
Almacenamiento persistente
de datos
Manejo de eventos
Elaboración: Antonio Rodríguez
Fuente: Antonio Rodríguez
165
3.4INSTRUMENTOS DE RECOLECCIÓN DE DATOS
Las técnicas de recolección de datos que se aplicarán en la investigación de este
proyecto son:
Documentales
Lectura científica.- para formar conocimientos relativos al tema de estudio se
utilizarán como instrumentos para obtener información la Internet, además de
la extensa bibliografía que se detalla más adelante en este documento.
De campo
La observación directa.-técnica utilizada para comprobar a través del
desarrollo de aplicaciones el funcionamiento y las características de los
componentes que nos brinda la plataforma Android.
La encuesta.-esta técnica se utilizará para tener principalmente una
perspectiva sobre las plataformas que utilizan los desarrolladores, lo que
conlleva a conocer la apertura que tienen en nuestro mercado. Como
instrumento se desarrollará un pequeño cuestionario de preguntas.
166
3.5PROCEDIMIENTOS DE LA INVESTIGACIÓN
El problema:
Ubicación del problema en un contexto
Situación conflicto nudos críticos
Causas y consecuencias del problema
Delimitación del problema
Formulación del problema
Evaluación del problema
Objetivos de la Investigación
Justificación o importancia de la investigación
Marco teórico:
Antecedentes del estudio.
Fundamentación teórica.
Fundamentación legal.
Hipótesis.
Listado y definición de las variables de la investigación.
Metodología:
Diseño de Investigación (Tipo de Investigación)
Población y Muestra
167
Resultado de la encuesta realizada
Instrumentos de recolección de datos
Operacionalización de variables, dimensiones e indicadores
Resultados de la encuesta realizada
Análisis comparativo del sistema operativo Android, Symbian OS y Windows Mobile
Listado de personas: Aplicación implementada utilizando el SDK de Android y el
SDK de Symbian OS
3.6RECOLECCIÓN DE LA INFORMACIÓN
Para obtener la información que ayudará a desarrollar el tema planteado se utilizarán
las técnicas que ya fueron mencionadas en el tópico “instrumentos de recolección de
datos”.
Para el caso de la encuesta dirigida a los desarrolladores de aplicaciones móviles de
Guayaquil, se contactará con las personas que forman parte de la muestra y se les
entregará el documento que posteriormente será tabulado.
3.7PROCESAMIENTO Y ANÁLISIS
Para realizar el análisis de los resultados del procesamiento de datos cuando sea
conveniente se seguirán los siguientes pasos:
168
Revisión de los instrumentos aplicados.
Tabulación de datos obtenidos
Diseño y elaboración de cuadros estadísticos con los resultados anteriores.
Elaboración de gráficos
3.8RESULTADO DE LA ENCUESTA REALIZADA
Pregunta 1:¿Con cuál de las siguientes plataformas ha desarrollado aplicaciones para
teléfonos celulares inteligentes?
Posibles respuestas: Symbian OS, Android, Blackberry, Windows Mobile, iPhone
Respuesta encuestados
Encuestado
Symbian
OS
1
2
3
4
5
Android
Blackberry
Windows
Mobile
x
x
iPhone
x
x
x
x
x
x
x
Tabulación
Symbian
OS
Android
Blackberry
Windows
Mobile
iPhone
2
0
2
5
0
169
GRÁFICO NO. 35
ENCUESTA: PLATAFORMAS OBJETIVO PARA EL DESARROLLO DE
APLICACIONES
5
4
3
2
1
0
Symbian OS
Android
Blackberry
Windows
Mobile
iPhone
Conclusión.- Todas las personas encuestadas han desarrollado para Windows
Mobile, mientras que en el otro extremo ninguno ha desarrollado aún para Android.
Pregunta 2: Tiene conocimiento sobre la plataforma para dispositivos móviles
"Android"
Posibles respuestas: Si, No, Poco
Respuesta encuestados
Encuestado
Si
1
2
3
4
5
X
No
X
X
X
X
Poco
170
Tabulación
Si
No
Poco
2
3
0
GRÁFICO NO. 36
ENCUESTA: NIVEL DE CONOCIMIENTO SOBRE ANDROID
4
3
2
1
0
Si
No
Poco
Conclusión.- A pesar de que Android aún no ingresa con fuerza en el mercado
podemos ver que si existe un conocimiento y expectativa sobre la plataforma.
Pregunta 3: Ordene de manera ascendente las características más importantes que
ud. considera debe brindar una plataforma para teléfonos inteligentes
Respuestas a ordenar: Seguridad, eficiencia, tiempos de respuestas óptimos, accesos
al hardware del dispositivo, soporte multimedia
171
Respuesta encuestados
Encuestado
Seguridad
Eficiencia
Tiempos de
respuestas
óptimos
Soporte
multimedia
1
Acceso al
hardware
del
dispositivo
2
1
5
4
2
2
1
3
4
5
3
4
3
2
1
5
4
2
1
3
5
4
5
5
4
1
2
3
3
GRÁFICO NO. 37
ENCUESTA: ORDEN DE IMPORTANCIA DE LAS CARACTERÍSTICAS
QUE DEBE POSEER UNA PLATAFORMA PARA TELÉFONOS
INTELIGENTES
6
5
4
Encuestado 1
3
Encuestado 2
2
Encuestado 3
1
Encuestado 4
Encuestado 5
0
Seguridad Eficiencia Tiempos de Acceso al Soporte
respuestas hardware multimedia
óptimos
del
dispositivo
Conclusión.- Como se puede apreciar en la gráfica existe diversidad de criterios
respecto al orden de importancia que le da cada encuestado a las diferentes
características que debe poseer un sistema operativo para teléfonos inteligentes. Se
puede concluir mencionando que Android está diseñado para proporcionar todas estas
características en conjunto con los dispositivos en los que se ejecuta.
172
Pregunta 4: Según su criterio: ¿Cuál es el futuro de los dispositivos móviles,
especialmente de los teléfonos inteligentes?
Respuesta encuestados
1. Se va a tender al cloud computing accedido desde smartphones.
2. La conectividad y transparencia a varios dispositivos de manera transparente
ya sea cualquiera su operadora.
3. Tendrán más aceptación mientras se siga innovando en tecnología como en la
actualidad, ya que su uso en la vida diaria es imprescindible.
4. Pues el futuro ya lo estamos viviendo porque este se ha convertido como
nuestra única herramienta en todas las áreas en la que se desenvuelve un ser
humana iniciando en lo personal pasando por lo familiar y terminado en lo
profesional, se puede decir que hoy en día una persona que no use para nada
un teléfono es alguien que no aporta mucho a la sociedad.
5. El futuro es muy bueno con la llegada de teléfono con oficina móvil, da más
agilidad en las tareas diarias de los ejecutivos y estar conectado a la red un
24x7.
Conclusión: El futuro de la los teléfonos inteligentes es la computación ubicua.
173
3.9ANÁLISIS COMPARATIVO DEL SISTEMA OPERATIVO ANDROID,
SYMBIAN OS Y WINDOWS MOBILE
3.9.1 Criterios básicos
3.9.1.1 Comparativa de los merados de aplicaciones móviles
Las tiendas de aplicaciones móviles, MAS por sus siglas en inglés – Mobile
Application Store -
son tiendas en línea donde los usuarios pueden descargar
aplicaciones para sus teléfonos móviles. Este mercado constituye un flujo de ingresos
muy rentable para las empresas propietarias de las plataformas y a su vez para los
desarrolladores de las aplicaciones.
3.9.1.1.1 Tiendas de Aplicaciones Móviles
Ovi de Nokia
Ovi es el nombre del "concepto paraguas" de Nokia para sus servicios
en Internet. Basado en un servicio de escritorio personal ofrece un panel
personalizado donde los usuarios pueden compartir fotos con sus amigos,
comprar música, acceder a servicios de terceros como el sitio de
fotos Flickr de Yahoo, y por supuesto adquirir aplicaciones para sus móviles.
174
Android Market
Android Market es un sistema de distribución open source y de contenido
abierto que le permite a los consumidores buscar, comprar, bajar e instalar
diversos tipos de contenido como juegos, música, noticias, mapas, etc.
Los desarrolladores pueden hacer que sus aplicaciones estén disponibles en
estaplataforma que tiene características similares de retroalimentación y del
sistema de calificación de YouTube mediante tres pasos básicos:
1. Registrarse como desarrollador en el sitio
2. Subir las aplicaciones y describirlas de manera detallada
3. Publicarlas para que sean visibles por los usuarios finales
Windows MarketPlace for Mobile
Windows Marketplace for Mobile es un servicio de Microsoft para su
plataforma Windows Mobile que permite a los usuarios navegar y descargar
aplicaciones que han sido desarrollados por terceros. La aplicación está
disponible para utilizar directamente en los dispositivos Windows Mobile 6.5,
y en los ordenadores personales. Se anunció en el evento “Mobile World
Congress 2009”, y entró en funcionamiento el 6 de octubre del mismo año,
con un número inicial de 246 aplicaciones.
175
CUADRO NO. 7
CARACTERÍSTICAS PRINCIPALES DE CADA TIENDA
Elaboración: Antonio Rodríguez Andrade
Fuente: Research2Guidance, reporte de febrero del 2010: “Smartphone Application
Store
Comparison”.http://www.docstoc.com/docs/33502524/Mobile-Application-Store-Comparison-Tables
CUADRO NO. 8
MODELO DE INGRESOS MONETARIOS DE CADA TIENDA
Elaboración: Antonio Rodríguez Andrade
Fuente: Research2Guidance, reporte de febrero del 2010: “Smartphone Application
Store
Comparison”. http://www.docstoc.com/docs/33502524/Mobile-Application-Store-Comparison-Tables
176
3.9.1.1.2 Posición en el mercado mundial
Si nos fijamos en el Cuadro No. 8 se puede observar que durante el primer cuarto del
año 2010 Symbian OS continúa como líder del mercado mundial de teléfonos
inteligentes y Android se ubica en la cuarta posición por delante de Windows Mobile,
pero si analizamos las cifras comparadas con el mismo lapso de tiempo del año
anterior se puede deducir que el único sistema operativo que ha tenido un aumento en
las preferencias de los usuarios finales es Android, tanto así que hasta el año pasado
se ubicaba en el quinto lugar y hoy ha logrado escalar una posición.
CUADRO NO. 9
VENTAS DE TELÉFONOS INTELIGENTES POR SISTEMA OPERATIVO
(EN MILES)
Compañía
Symbian
Research In Motion
iPhone OS
Android
Microsoft Windows Mobile
Linux
Otros SO
Total
Primer cuarto 2010
Porcentaje
Unidades
del
mercado
24,069.8
44.3
10,552.6
19.4
8,359.7
15.4
5,214.7
9.6
3,706.0
6.8
1,993.9
3.7
404.8
0.7
54,301.4
100.0
Elaboración: Traducido de la fuente
Fuente: Gartner, reporte de mayo del 2010
Primer cuarto 2009
Porcentaje
Unidades
del
mercado
17,825.3
48.8
7,533.6
20.6
3,848.1
10.5
575.3
1.6
3,738.7
10.2
2,540.5
7.0
445.9
1.2
36,507.4
100
177
3.9.1.1.3 Estadísticas de las tiendas en línea
GRÁFICO NO. 38
PROPORCIÓN DE APLICACIONES PAGADAS VS LAS GRATUITAS
Elaboración: Antonio Rodríguez
Fuente: Distimo39, reporte junio del 2010: “Apple App Store, BlackBerry App World, Google
Android Market,Nokia Ovi Store, Palm App Catalog and Windows Marketplace”
Google Android Market tiene el mayor número de aplicaciones gratuitas (57%) y
Windows Marketplace for Mobile tiene el menor número (22%). Este número
elevado en las cifras de Google Android Market puede estar influenciado porque
hasta el momento solo desarrolladores de 9 países están autorizados para cobrar por
sus aplicaciones.
39
Distimo es una compañía dedicada al análisis de las tiendas de aplicaciones y el mercado en que se
desenvuelven. Fuente: http://www.distimo.com
178
GRÁFICO NO. 39
PRECIO PROMEDIO DE LAS APLICACIONES
Elaboración: Antonio Rodríguez
Fuente: Distimo, reporte junio del 2010: “Apple App Store, BlackBerry App World, Google Android
Market,Nokia Ovi Store, Palm App Catalog and Windows Marketplace”
En cuanto al precio de las aplicaciones pagadas se puede apreciar en la gráfica que las
aplicaciones más baratas son las desarrolladas para dispositivos Nokia (Symbian OS)
y son distribuidas a través de su tienda en línea Ovi.
3.9.1.1.4 Participación de las empresas fabricantes de equipos en el mercado de
teléfonos inteligentes
Kevin Restivo, analista senior de IDC en la publicación de mayo del presente año
lista las empresas que mayor participación poseen en el mercado mundial de los
dispositivos inteligentes durante el primer cuarto del 2010:
179
En primer lugar de preferencia de los usuarios Nokia se mantiene como el
proveedor líder en todo el mundo. Además de la introducción de varios
nuevos modelos, Nokia anunció su primer modelo Symbian ^ 3, el N8.
En segunda posición se encuentra Research In Motion, ser el proveedor
número dos en todo el mundo se debe alcontinuo crecimiento de su popular
dispositivo BlackBerry. La clave de su éxito fueron su BlackBerry Curve
8520 y BlackBerry Bold 9700, los cualestuvieron una fuerte acogida por parte
de los desarrolladores. Recientemente la compañía dio a conocer su nuevo
sistema operativo, el BlackBerry 6.0, que promete una interfaz de usuario más
suave y más interactiva.
Apple ha
duplicado sus ventas
en comparación hace un año, es más,
recientementese presentó la actualización del sistema operativo, el que
permite realizar múltiples tareas, correo electrónico mejorado, iBooks para los
consumidores, y el iAd, una plataforma de publicidad móvil, para los
desarrolladores.
HTC registró un crecimiento de dos dígitos altos para comenzar el año,
impulsados principalmente por su estable crecimiento de los productos con
Android como el héroe. La empresa no muestra signos de ralentización,
180
después de haber anunciado varios nuevos dispositivos, incluyendo el primer
teléfono WiMAX Android, el EVO 4G, que empezará a finales de este año.
Motorola, que remontó en el espacio de teléfonos móviles en el cuarto
trimestre de 2009, siguió con un nuevo hito en su corta historia de la
navegación dispositivos Android. Ahora que el DROID y CLIQ (conocido
como el Milestone y DEXT, respectivamente, fuera de los Estados Unidos)
tienen un cuarto lleno de disponibilidad, la empresa siguió con seis
dispositivos adicionales. La compañía espera lanzar 20 modelos nuevos de
Android durante este año.
3.9.2 Criterios principales
Para realizar esta comparación cada sistema operativo será evaluado numéricamente,
al final de cada evaluación se otorgará un punto al primer lugar, que es el sistema
operativo que cumpla con la mayoría de los requisitos, medio punto para el segundo
lugar y cero puntos para el que se encuentra en último lugar. Cuando se haya cubierto
cada uno de los aspectos se realizará una conclusión donde se visualizarán a manera
de resumen el resultado de cada uno de los criterios evaluados. El número de puntos
mostrará qué sistema operativo es "el mejor" en comparación con los demás.
181
3.9.2.1 Portabilidad
Symbian OS es un sistema operativo que se utiliza en una gran cantidad de teléfonos
inteligentes y sobre todos en equipos Nokia, gracias a que su arquitectura es
estandarizada. Además, una ventaja la constituye el hecho de que la compañía
convirtiese la plataforma en un producto opensource, del otro lado, el hecho de que
sus aplicaciones no sólo pueden ser creadas utilizando el lenguaje Java lo ponen por
detrás de Android.
Windows Mobile también se puede ejecutar en diferentes plataformas con diferentes
características. Lamentablemente Windows Mobile también tiene varias aplicaciones
que son específicas del hardware, y por lo tanto no es portable.
La plataforma Android es un sistema basado en Linux y tiene la gran ventaja de que
este sistema operativo puede utilizarse en diferentes plataformas. El acceso abierto
ayudará a recopilar una gran cantidad de experiencia que le será más fácil en el futuro
para acceder a otras secciones. El hecho de que Android es basado en el estándar de
programación de lenguaje Java, que también se utiliza para la aplicación desarrollo,
subraya la importancia de la conservación para esta plataforma.
Como resultado Android consigue un punto, el sistema operativo Symbian OS recibe
medio punto y Windows Mobile cero puntos.
182
Total hasta el momento: Symbian OS = 0.5
Windows Mobile = 0
Android = 1
3.9.2.2 Fiabilidad
Un factor determinante a la hora de estimar si un sistema operativo móvil es confiable
lo constituye el tiempo que se encuentra en el mercado, claro que esto no significa
que los dispositivos nunca presentan fallas, sino que permite conocer el grado de
estabilidad en que se encuentran.
Symbian OS y Windows Mobile ya tienen un tiempo considerable en el mercado,
ambas plataformas son estables. Por el otro lado se encuentra Android, aunque su
ingreso al mercado de los dispositivos móviles es reciente cuenta con el respaldo de
trabajar con un kernel basado en Linux, y este ya ha existido durante más de una
década y ha demostrado que es estable y muy confiable.
Estudios demuestran que los sistemas operativos basados en Linux tienen un 99.9 %
de fiabilidad, ya que tienen un rango de “fuera de línea o servicio” que oscila entre 30
minutos y una hora al año, mientras que los sistemas operativos basados en Microsoft
Windows tienen cerca de 5 horas al año que están fuera de línea o servicio.
Hoy en día se emplea con frecuencia en servidores web o aplicaciones similares que
requieren un alto grado de fiabilidad. Con estas premisas me atrevo a decir que
183
Android no se ubicará detrás de Symbian OS y Windows Mobile en cuanto a
fiabilidad.
Debido a que el sistema operativo Symbian y Windows Mobile controlan la mayor
parte del mercado y Android es Basado en Linux voy a dar a cada sistema operativo
un punto, ya que las diferencias desde mi punto de vista no son considerables.
Total hasta el momento: Symbian OS = 1,5
Windows Mobile = 1
Android = 2
3.9.2.3 Conectividad
Sabemos que todo teléfono inteligente puede interactuar con otros equipos para el
intercambio de información y que aunque siempre tenemos la opción de utilizar un
cable como medio para alcanzar este propósito, con el tiempo las preferencias de los
usuarios cambian y la necesidad de movilidad
requiere de mecanismos que
proporcionen una conexión inalámbrica, justo la comparativa se va a centrar en los
mecanismos que cada sistema operativo móvil nos proporciona.
La conexión inalámbrica puede ser de área amplia, como la conexión a Internet, o de
área personal que incluye infrarrojos y enlaces bluetooth. El sistema operativo debe
constar de las aplicaciones que están diseñadas para soportar todos los requisitos, así
como multitareas y los protocolos de comunicación más importantes. También tiene
184
que proporcionar un rico conjunto de API, que son interfaces de código fuente para
apoyar las solicitudes de servicios que deben figurar en ella, para garantizar que las
aplicaciones puedan beneficiarse plenamente de las posibilidades de conectividad
actuales y facilitar su adaptación al sacar provecho de nuevos protocolos como su
aplicación.
Symbian OS tiene funciones de telefonía GSM, Bluetooth, infrarrojos y WI-FI. EL
API del sistema operativo Symbian permite un desarrollo que se dirige a todas estas
características y categorías.
Windows Mobile cuenta con tecnología GSM, Bluetooth, Infrarrojos y WI-FI, por lo
que su API proporciona a los desarrolladores capacidades para trabajar con cada una
de estas tecnologías.
Android posee funciones de telefonía GSM, Bluetooth, EDGE (técnica para aumentar
la velocidad de datos en GSM Mobile de red), 3D (normas móviles de tercera
generación), y WI-FI, desde el punto de vista de las comunicaciones corporativas y
empresariales Android posee dispositivos preparados para redes de datos
HSDPA/WCDMAlo que le confiere una clara ventaja competitiva. Todos los
desarrolladores tienen el mismo acceso al marco de las API utilizado por las
aplicaciones principales.
185
Sistema
Operativo
Android
Symbian
OS
Windows
Mobile
Bluetooth
EDGE
GSM
3D
Wi-Fi
Infrarrojos
X
X
X
X
X
X
X
X
X
X
X
X
X
Cabe recalcar que Android tiene algunas ventajas en cuanto a conectividad en
comparación con los otros dos sistemas operativos, por lo que se le otorgara a
Android 1 punto y a los otros dos sistemas medio punto cada uno.
Total hasta el momento: Symbian OS = 2.
Windows Mobile = 1.5
Android = 3
3.9.2.4 Tamaño del Kernel
Un factor de evaluación de uso frecuente para comparar el tamaño del Kernel es el
“footprint“, que es la cantidad de memoria utilizada por el sistema operativo. Para
una clasificación significativa tenemos que encontrar el sistema operativo con el
menor impacto de "footprint" que a su vez maximiza el rendimiento del sistema
operativo.
186
Cantidad de Memoria
Mínima
Android
Symbian
250 KB
200 KB
Windows
Mobile
300 KB
Todos los datos anteriores se aplican a una instalación con las funciones básicas y
mínimas posibles. Como resultado Symbian OS necesita menos memoria que la que
Android necesita, así mismo Android necesita menos memoria que Windows Mobile.
Así
consigue
un
punto
Symbian,
Android
consigue
medio
punto
y
Windows Mobile cero puntos.
Total hasta la fecha: Symbian OS = 3.5
Windows Mobile = 2
Android = 3.5
3.9.2.5 Seguridad
Symbian OS ofrece una nueva plataforma de arquitectura de seguridad la cual
proporciona una plataforma con la capacidad de defenderse contra los programas
maliciosos o mal aplicados. La arquitectura consta de dos componentes de alto nivel:
"Gestión de certificados" y "Criptografía". Estos dos módulos constituyen la base de
una serie de componentes de alto nivel que incluyen el control de Gestión de
certificados de elemento del panel, instalación de software y comunicaciones seguras.
Windows Mobile también tiene su propio modelo de seguridad. Contiene una
combinación de políticas de seguridad, roles y certificados a la dirección de
configuración, acceso remoto y ejecución de la aplicación.
187
Android es un sistema multiproceso, donde cada aplicación (y partes del sistema)
funciona como su propio proceso. La mayoría de la seguridad entre las aplicaciones y
el sistema se aplica en el nivel de proceso a través de estándares de los servicios de
Linux, tales como identificadores de usuario y grupo que se asignan a las
aplicaciones. Otros elementos de seguridad de segundo plano, se proporcionan a
través de un "permiso", mecanismo que fuerza las restricciones en las operaciones
específicas que un proceso determinado puede realizar.
El sistema de seguridad de Android está diseñado para impedir que las aplicaciones
se interrumpan entre sí, excepto por los permisos que se declaran de forma explícita
que necesitan para capacidades adicionales no previstas por el recinto de seguridad de
base. El sistema maneja las solicitudes de permisos de diversas maneras,
normalmente de forma automática permitiendo o rechazando sobre la base de los
certificados o preguntando al usuario. Los permisos necesarios por la aplicación se les
declara estáticamente en esa solicitud, por lo que se puede conocer por adelantado en
el momento de la instalación y no va a cambiar después de eso.
Cada plataforma tiene su propio modelo de seguridad que cubre las acciones más
importantes relativas a la instalación de software, la comunicación segura, etc. Esto
los hace iguales y los resultados en un punto para cada sistema operativo.
Total hasta el momento: Symbian OS = 4.5
Windows Mobile = 3
Android = 4.5
188
3.9.2.6 Características especiales
Esta sección trata de las funciones o aplicaciones que están diseñadas para hacer que
el sistema sea único.
Windows Mobile tiene, debido a su destacada posición en el mercado de las
computadoras, la ventaja de que la sincronización entre el PC y el teléfono celular es
muy fácil. Symbian OS sin embargo, en mi opinión, no tiene ninguna característica
especial que debe ser mencionada. La comunicación con el Internet y el ordenador
personal desempeñará un papel importante en el futuro con respecto a las plataformas
móviles.
La plataforma móvil Android tiene ventajas significativas en este caso. El nuevo
navegador integrado, basado en el motor WebKit de código abierto permite acceder a
páginas web a través de Internet del mismo modo que a través de la PC. También la
máquina virtual Dalvik optimizada para dispositivos móviles, es una característica
que permite a cada aplicación ejecutarse en su propio proceso. Esto es muy
importante para la estabilidad y fiabilidad.
El punto más fuerte de Android es su Plataforma de Código Abierto. La comunidad
de software abierto es una de las mayores comunidades que han liderado la industria
y su presencia hace que la tecnología sea mejor. Android está basado en el kernel de
189
Linux mientras que Windows Mobile está basado en Windows CE. La plataforma
abierta garantiza la innovación continua y la equidad en el producto. Grandes grupos
de apoyo siempre estarán presentes para ayudar a los clientes a entender sus
problemas y darles soluciones a los mismos.
3.9.3 Clasificación basada en otros criterios
Esta sección contiene una lista con otros criterios que ayudan a clasificar las tres
plataformas móviles que estamos analizando. Dividí los criterios en 2 grupos
diferentes que son "criterios técnicos" y "criterios de interfaz de usuario". El usuario
puede utilizar estas para personalizar su elección de un sistema operativo para su
dispositivo móvil.
3.9.3.1 Criterios técnicos
Android
Symbian OS
Windows Mobile
Administración de energía
X
X
X
Multitarea
X
X
X
3.9.3.2 Criterios de interfaz de usuario
División entre el sistema operativo
y la interfaz de usuario
Android
Symbian OS
Windows
Mobile
Si
Si
Si
190
Personalización
Posible
Casi Imposible
Casi Imposible
Conclusión
En este capítulo la plataforma Android, Symbian OS y Windows Mobile se
compararon con respecto a los criterios principales para un sistema operativo para
móviles. Cada criterio se explica en detalle y se aplica a los tres sistemas operativos.
Al final de cada criterio de clasificación se les dio un puntaje de uno a cero. El mejor
sistema operativo en relación con el criterio tiene un punto, el segundo consiguió
medio punto y el tercero tiene cero puntos. La suma total de puntos añadidos para
cada sistema operativo mostrará cuál de ellos es el "mejor" en relación con los
criterios principales.
La siguiente tabla muestra detalladamente los resultados:
CUADRO NO. 10
RESULTADO COMPARATIVA CRITERIOS PRINCIPALES
Android
Symbian OS
Windows Mobile
Portabilidad
1
0,5
0
Confiabilidad
1
1
1
Conectividad
1
0,5
0,5
0,5
1
0
1
1
1
Tamaño del Kernel (Núcleo)
Seguridad
191
Características Especiales
Resultado
1
0
0,5
5,5
4
3
En cuanto a los criterios principales de la nueva plataforma móvil Android consigue
más puntos. Es el único verdaderamente "sistema abierto" que hace la gran diferencia
en mi opinión. También la característica especial como el navegador de Internet y la
máquina virtual Dalvik desempeñan un papel importante en esta comparación.
Normas en la conectividad, portabilidad y seguridad son más o menos logrados por
todos los sistemas operativos de la misma manera. Con respecto a los criterios
técnicos como administración de energía y multitarea los tres sistemas operativos
tienen un buen desempeño, y en base a los criterios de interfaz de usuario Android es
mucho más abierto en cuanto a personalización.
Como nos podemos dar cuenta Android tiene muchas más características que lo
hacen ver como el sistema operativo ideal para nuestros teléfonos móviles.
192
3.10LISTADO
DE
PERSONAS:
APLICACIÓN
IMPLEMENTADA
UTILIZANDO EL SDK DE ANDROID Y EL SDK DE SYMBIAN OS
Para realizar el análisis de un SDK no es suficiente el describir sus características de
manera teórica, es necesario el desarrollar aplicaciones en el aspecto práctico para
obtener una visión más clara.
3.10.1 ¿Por qué comparar Symbian OS y Android mediante la creación de una
aplicación?
La razón por la que escogí Symbian OS para realizar la comparación con Android es
que ambos productos proporcionan la misma funcionalidad, operan en el mismo
mercado y están dirigidos al mismo grupo objetivo de consumidores.
Otra razón para realizar la comparativa con Symbian OS es la posibilidad de
desarrollar aplicaciones móviles utilizando Java 2 Micro Edition (J2ME), que es el
ambiente de desarrollo de Java para aplicaciones que se ejecutan en dispositivos
móviles. Al igual que en Android, Symbian utiliza Java debido a la posibilidad de
crear un único programa portable a muchos dispositivos con características de
hardware diferentes.
193
3.10.2 Requerimientos del sistema para instalar los SDKs respectivos
Ninguno de los SDKs necesita de características adicionales del equipo en donde se
está desarrollando la aplicación para poder ejecutarlos. Entre las principales
diferencias que existen entre ambos SDKs tenemos:
El SDK de Android se puede ejecutar en una computadora con un procesador
más lento y con menor requerimiento de memoria.
Ambos necesitan de Java, específicamente el entorno de ejecución de Java
versión 5 o superior. Sin embargo, para poder finalizar la instalación del SDK
de Symbian OS es necesario instalar un paquete adicional que contenga el
programa Perl.
El SDK de Android se puede instalar en la mayoría de los sistemas operativos
más utilizados por los usuarios: Windows, Mac y Linux, mientras que el SDK
de Symbian OS sólo se puede instalar en una computadora que tenga como
sistema operativo Windows.
A continuación se muestran dos cuadros comparativos entre los SDKs de Android y
Symbian O.S, el primero de ellos nos proporciona información sobre los
requerimientos mínimos de hardware necesarios para poder instalar los SDKs,
mientras que el segundo proporciona información de los requerimientos de software.
194
CUADRO NO. 11
REQUERIMIENTOS MÍNIMOS DE HARDWARE PARA INSTALAR LOS
SDK
Android
S60
200 MHz
1 GHz (Requerimiento
mínimo del IDE y el
sistema
operativo:
Procesador de 500 MHz)
Memoria
32 MB RAM y 32 MB Flash
512
MB
RAM
(Requerimiento mínimo
del IDE y el sistema
operativo: 128 MB)
Espacio libre en
disco duro
600MB para el paquete base
del SDK
2 GB
Procesador
CUADRO NO. 12
REQUERIMIENTOS MÍNIMOS DE SOFTWARE PARA INSTALAR LOS
SDK
Sistemas
operativos
Android
Windows XP o Vista
Mac OSX 10.4.8 o superior
(Sólo arquitectura X86)
Linux
JDK 5 ó JDK 6
S60
Microsoft Windows 2000 SP4
Microsoft Windows XP SP2
Microsoft Windows Vista
Java Runtime Versión 1.5.0 o
superior
Software adicional
Active Perl Versión 5.6.1 o
superior
Eclipse 3.2 o superior, plugins Eclipse 3.2 o superior y
JDT, WST y ADT
EclipseME versión 1.7.7 o
Herramientas de
superior
desarrollo
Apache Ant 1.6.5 o superior
NetBeans IDE con el paquete
de movilidad 5.5 o superior
195
3.10.3 Instalación
Previamente en este documento se describió el proceso de instalación y configuración
de Android.
Para configurar el entorno de desarrollo de aplicaciones para Symbian OS se
necesitan Eclipse como el IDE de desarrollo, el entorno de ejecución de Java (JRE:
Java Runtime Environment) y Active Perl. Las siguientes versiones de las
herramientas
mencionadas
anteriormente
son
las
más
utilizadas:
Symbian SDK: S60 3 era. Edición
JRE: jre1.6.0_01
Eclipse: Eclipse 3.3.2
Plugin para Eclipse: EclipseME
Active Perl: versión 5.6.1
Symbian ofrece diferentes tipos de SDK en función del teléfono celular.
1. UIQ (User Interface Quartz).- desarrollada por UIQ Technology y usada
principalmente por Sony-Ericsson y Motorola.
196
2. MOAP (Mobile Oriented Applications Platform).- usada por algunos
móviles 3G de NTT-Docomo.
3. La plataforma S60 (Serie 60 User Interface).- se encuentra actualmente
entre las plataformas para smartphone más utilizadas en el mundo y la
cual va a ser objeto de comparación en este estudio.
Adicionalmente Symbian está trabajando en sus SDK para la Serie 80 y Serie 90 de
sus dispositivos.
3.10.4 Descripción de la aplicación
Para una comparación útil en el proceso de desarrollo se ha realizado una pequeña
aplicación que corre de igual manera en ambas plataformas y que hace uso de las
principales funcionalidades que nos facilitan los SDKs. Los criterios a ser evaluados
consisten en:
Interfaz de usuario
Visualización de información
Ingreso de información
Manejo de eventos
Almacenamiento persistente de datos
197
Listado de personas es una aplicación que nos permite manipular información básica
de las personas, realizar ingresos, consultar y eliminar su información.
Las siguientes imágenes muestran como se visualiza la aplicación para cada una de
las plataformas:
Al iniciar la aplicación por primera vez se presentará la pantalla sin información, sólo
mostrando el título de la misma, en este caso “Listado de Personas”.
GRÁFICO NO. 40
ANDROID: PANTALLA INICIAL
GRÁFICO NO. 41
SYMBIAN OS: PANTALLA INICIAL
Para ambos casos se ha implementado un menú de opciones dotado de cuatro
acciones: Agregar persona, Mostrar datos, Eliminar persona y Salir. Para el caso de
Symbian OS el primer elemento del menú se presenta de manera automática en la
pantalla por lo que opté en colocar primero el botón de salir.
198
GRÁFICO NO. 42
ANDROID: MENÚ DE OPCIONES
GRÁFICO NO. 43
SYMBIAN OS: MENÚ DE OPCIONES
La opción de agregar persona como su nombre lo indica, permite ingresar un nuevo
registro con información de la persona y guardarlo utilizando el mecanismo de
almacenamiento persistente de cada una de los SDK.
GRÁFICO NO. 44
GRÁFICO NO. 45
ANDROID: AGREGAR PERSONA SYMBIAN OS: AGREGAR PERSONA
199
En caso de no cumplir con alguna de las validaciones establecidas la aplicación
mostrará por pantalla un mensaje alertando el problema ocurrido.
GRÁFICO NO. 46
ANDROID:
CUADRO DE DIÁLOGO
GRÁFICO NO. 47
SYMBIAN OS:
CUADRO DE DIÁLOGO
Para mostrar el contenido completo de la información de cada persona ingresada se
deberá seleccionar la misma en la lista que se presenta y dar clic en la opción del
menú “Mostrar datos”.
´
200
GRÁFICO NO. 48
ANDROID: MOSTRAR DATOS
GRÁFICO NO. 49
SYMBIAN OS: MOSTRAR DATOS
Finalmente tenemos la opción de “Eliminar persona” que permite eliminar la persona
seleccionada de la lista y del almacenamiento persistente de datos.
3.10.5 Ciclo de vida de una aplicación en Android y Symbian OS
El ciclo de vida de una aplicación en Android es controlado en su mayor parte por el
sistema, y al igual que el ciclo de vida de una actividad (tema tratado anteriormente
en este documento) una aplicación es creada, los procesos que ejecuta son iniciados,
los eventos disparados, cuando corresponde
aplicación es destruida.
los procesos son detenidos y la
201
En cambio, el modelo de desarrollo de aplicaciones ampliamente utilizado en la
plataforma S60 se basa en MIDlets. Un MIDlet (nombre que recibe una aplicación
MIDP -Mobile Information Device Profile- para continuar con el esquema usado para
denominar los applets y los servlets) es un programa en Java que hereda de la clase
abstracta MIDlet ubicada en el paquete javax.microedition.midlet.
Los MIDlets tienen un ciclo de vida específico, que se refleja en los métodos y el
comportamiento de esta clase, la misma que puede pasar por los siguientes estados:
Cuando un MIDlet está a punto de ser ejecutado se crea una instancia del
mismo. El constructor se ejecuta y el MIDlet queda en estado pausado.
Cuando el administrador de la aplicación llama el método startApp(), el
MIDlet cambia al estado de activo.
Mientras el MIDlet se encuentre activo el administrador de la aplicación
puede suspender su ejecución invocando el método pauseApp(). Un MIDlet
puede ponerse a sí mismo en estado de pausa utilizando el método
notifyPaused().
Como es de suponerse el administrador de la aplicación puede cambiar de este
último estado a activo invocando el método startApp().
Finalmente el administrador de la aplicación puede terminar la ejecución del
MIDlet llamando al método destroyApp(). Una aplicación puede destruirse a
sí misma invocando el método notifyDestroyed().
202
GRÁFICO NO. 50
CICLO DE VIDA DE UNA APLICACIÓN EN SYMBIAN
constructor
destroyApp()
Pausado
startApp()
pauseApp()
Ciclo de Vida de un MIDlet
Activo
destroyApp()
Destruido
Elaborado por: Antonio Rodríguez
Fuente: Libro Beginning J2ME: From Novice to Professional, pag. 30
Análisis: En la figura se presentan los estados por los que puede pasar una aplicación en Symbian OS
durante su ciclo de vida
3.10.6 APIs
Los APIs de Android ya fueron descritos anteriormente en este documento, por lo
tanto haré una pequeña descripción del API incluido en el SDK de Symbian OS.
MIDP provee de la funcionalidad base requerida para el desarrollo de una aplicación
móvil. Incluye la interfaz de usuario, conexiones de red, almacenamiento de datos y
administración del ciclo de vida. Toda esta funcionalidad la proporciona el entorno de
ejecución de Java y un conjunto robusto de APIs.
203
MIDP utiliza los paquetes núcleos de CLDC (Connected Limited Device
Configuration): java.lang, java.io, java.util y javax.microedition.io, adicionando tres
paquetes:
1. javax.microedition.lcdui.- proporciona soporte para la creación de interfaces
de usuario.
2. javax.microeditions.midlet.- define aplicaciones MIDP y se encarga de
gestionar la interacción de las aplicaciones con el entorno en que se ejecutan.
3. Javax.microeditions.rms.- proporciona mecanismos para el almacenamiento y
la manipulación de datos de manera persistente.
Existen APIs adicionales que incrementan y mejoran las funcionalidades que se
pueden lograr programando MIDlets, sin embargo los descritos previamente son
relevantes ya que serán utilizados para realizar los ejemplos comparativos.
3.10.7 Comparación práctica de los APIs
3.10.7.1 Interfaz de Usuario: Presentación de elementos en una lista
Android
Para presentar una lista de elementos en la pantalla se necesitan las siguientes
clases:
204
android.app.ListActivity
android.widget.SimpleCursorAdapter
El código para implementar la lista es el siguiente:
El objeto personasCursor que se presenta en la línea 1 es de tipo cursor y
se llena con los elementos que devuelve el método obtenerPersonas() que
realiza la consulta a la base de datos.
Para presentar estos elementos en la vista, se debe crear un objeto del tipo
Adapter, tal como se aprecia en la línea 3, que recibe como parámetros el
contexto de la aplicación, el layout o contenedor que proporciona el
esquema de la interfaz de usuario a visualizarse, un arreglo de Strings que
indica el nombre de las columnas y un arreglo de enteros que identifican
los elementos (widgets) creados a través de un archivo XML.
205
Symbian OS
Para presentar una lista de elementos en la pantalla se necesitan las siguientes
clases:
javax.microedition.lcdui.List
javax.microedition.rms.RecordStore
javax.microedition.lcdui.Display
El código para implementar la lista es el siguiente:
En la línea 2 del código anterior se aprecia que se ha creado un arreglo de
caracteres para almacenar la información de las personas que devuelve el
método obtenerPersonas(). Adicionalmente en la línea 4 se crea un objeto
Display que será el encargado de mostrar la lista generada en la línea 5 en la
interfaz de usuario.
Conclusión
Presentar elementos en la GUI en forma de lista es un proceso sencillo, como
resultado de la comparación dos aspectos que le dan la ventaja a Android
206
corresponden primero, al hecho de que en esta plataforma se puede separar la
creación de la vista y la lógica que la maneja mediante el uso de archivos
XML. El segundo punto es que en Android no se requiere el recorrer la lista
elemento por elemento para obtenerlos.
3.10.7.2 Manejos de Eventos: Reaccionar al dar clic a una opción del menú
Android
Clases requeridas:
android.view.menu
android.view.menu.item
La codificación necesaria para la implementación de los menús comprende:
207
Los métodos onCreateOptionsMenu() y onMenuItenSelected() se ejecutan
automáticamente cuando la aplicación se inicia. El primero permite definir los
elementos del menú, en la línea 6 se puede observar que se ha creado la
opción de “Eliminar persona”. El segundo método contiene las acciones
definidas por el desarrollador y que se ejecutan cuando el usuario la
selecciona, para el ejemplo de eliminar a la persona, en la línea 10 se puede
comprobar que se hace el llamado al método eliminarPersona() para que
borre su información de la base de datos.
Symbian OS
Clases requeridas:
javax.microedition.lcdui.Command
javax.microedition.lcdui.CommandListener
208
El código para la creación de los menús es el siguiente:
Lo primero que se debe hacer para crear el menú de opciones en Symbian OS
es definir los objetos de tipo Command40, en la línea 1 se aprecia la creación
40
Un objeto command es algo que el usuario puede invocar, se puede pensar en él como un botón.
209
del objeto cmdEliminar, luego en el método startApp, que es un método
predefinido de un Midlet que se invoca cada vez que se ejecuta el mismo, se
agrega el nuevo elemento a la lista. Adicionalmente se debe agragar a un
CommandListener,
que
es
el
encargado
de
ejecutar
el
método
CommandAction cuando se presiona la opción “Eliminar persona”, esto se
puede visualizar en la línea 8. Finalmente, es en el método CommandAction
donde se especifican las acciones a ejecutar por cada opción del menú.
Conclusión
Los APIs de las dos plataformas proporcionan una manera estandarizada para
el manejo de los eventos, para el caso de Android se usa un manejador propio
de la actividad, en Symbian se utiliza un objeto del tipo Listener; pero en
ambos casos son ellos los que reaccionan automáticamente cuando el botón es
seleccionado.
3.10.7.3Ingreso de datos
Android
Para el ingreso de datos en Android se puede hacer uso de la clase:
android.widget.EditText
La codificación utilizada se muestra a continuación:
210
Archivo XML con la definición de los elementos de la pantalla:
Fragmento de código donde se atacha la vista con el onjeto en Java
Como ya se ha mencionado previamente en este estudio, en Android los
objetos de la interfaz gráfica generalmente se crean en un arhivo XML y son
utilizados en el lenguaje Java cuando el programa está en ejecución. En la
codificación utilizada se puede observar que el primer bloque corresponde al
archivo XML, en donde se hace referencia principalmente al objeto de tipo
EditText, al cual se le estableció como identificador la palabra “nombre”.
211
En el archivo java se crea un objeto del mismo tipo, tal como se aprecia en la
línea 1, y se lo atacha al elemento definido en el archivo XML mediante las
instrucciones escritas en la línea 5.
Symbian
En esta plataforma las clases requeridas para el ingreso de información
utilizadas en el ejemplo demostrativo son:
javax.microedition.lcdui.Form
javax.microedition.lcdui.TextField
El código desarrollado es el siguiente:
Para presentar un campo de ingreso de información se debe primero crear un
objeto del tipo Form, que define el marco de la ventana y sobre el cual se van
a presentar los elementos, en la línea 1 de la codificación se creó el objeto
frmPersona.
Luego, en la línea cuatro se creó un objeto TextField que se traduce como caja
de texto y que es el encargado de recibir la información. Para atachar este
212
objeto a la formacuando esta se pinta se lo realiza con el método append de la
clase Form.
Conclusión
Si nos fijamos en las líneas de código requeridas para el ejemplo en cada uno
de los APIs pareciera que en Android es más compleja la creación de un
campo de entrada. Sin embargo, el uso de un archivo XML permite tener una
mejor abstracción de programación en capas, que como ya se ha mencionado
antes puede resultar más beneficioso.
3.10.7.4 Almacenamiento persistente de datos
Android
Clases utilizadas:
android.database.sqlite.SQLiteDatabase
android.database.Cursor
213
A continuación se muestra la codificación utilizada para la gestión de la base
de datos y su interacción:
La base de datos SQLite incluida en el API de Android proporciona métodos
predefinidos para la administración de las típicas operaciones sobre la base.
Como se puede observar en la línea 3, para crear la base de datos del ejercicio
expuesto se invoca el método openOrCreateDatabase que recibe como
parámetros el nombre de la base, el modo de apertura y un objeto de tipo
214
Factory, que para el ejemplo es nulo. La sentencia execSQL definida en la
línea 5 se utiliza para ejecutar la creación de los objetos de la base de datos.
Para realizar la inserción de un registro se debe crear primero un objeto del
tipo ContentValues, al que se le pasa el contenido de las columnas, para
finalmente ingresarlas mediante el método insert mostrado en la línea 26 del
código.
En la línea 30 se muestra como se elimina un registro mediante el _id y para
las consultas se hace uso del método rawQuery que devuelve los registros
consultados a un objeto tipo Cursor.
Symbian OS
Clases utilizadas:
javax.microedition.rms.RecordStore
215
La codificación desarrollada se muestra a continuación:
216
En la línea 1 se muestra la creación de un objeto RecordStore, al cual se le
asigna un nombre y un valor booleano para indicar si debe ser creado en caso
de que no exista.
Para insertar información en este medio de almacenamiento persistente se la
debe transformar a un arreglo de bytes, por lo que se hace uso de los objetos
ByteArrayOutputStream y DataOutputStream, como se observa en las líneas 6
y 7 del código previamente mostrado.
En caso de que la operación sea eliminar un registro, se debe usar el método
deleteRecord(int pos), donde el parámetro que recibe es la posición del mismo
en el RecordStore.
Finalmente para las consultas se debe realizar la operación contraria a la
inserción, si se desea obtener un solo registro lo que se obtiene como salida es
un String, si son varios se obtiene un arreglo de String, como se visualiza en
las líneas 47 y 67 respectivamente.
Conclusión
Ambos APIs proporcionan métodos para gestionar el almacenamiento de
datos persistente, sin embargo, cuando se usa un RecordStore, que es el caso
de Symbian se requiere más esfuerzo, es necesario realizar conversiones de
manera explícita para que la información se almacene como arreglos de bytes.
CAPÍTULO IV
MARCO ADMINISTRATIVO
4.1 CRONOGRAMA
Según lo establecido en las fechas de presentación de sustentaciones se determina el siguiente cronograma, con la finalidad de
definir los puntos de control del proyecto a desarrollarse.
218
219
220
221
222
223
4.2 PRESUPUESTO
4.2.1 EGRESOS
EGRESOS
DÓLARES
Suministros de oficina y computación
12.00
Computadora y servicios de Internet
120.00
Transporte
8.50
Refrigerio
17.00
Empastado, anillado de tesis de grado
50.00
TOTAL………………………………………
207.50
4.2.2 INGRESOS
El monto de los gastos a los que se debe incurrir para la elaboración del presente
proyecto va a ser cubierto en su totalidad por financiamiento propio.
CAPÍTULO V
5.1 CONCLUSIONES Y RECOMENDACIONES
5.1.1 CONCLUSIONES
El objetivo principal de este estudio consistía en evaluar la plataforma, hacer uso de
sus prestaciones, determinar cuáles son sus ventajas y desventajas frente a otras
plataformas que tienen el mismo mercado objetivo y por ende se ubican en el mismo
campo en el que se encuentra Android.
Para la consecución de este objetivo este documento ha sido dividido en cuatro
secciones, en el Marco Teórico se realizó una introducción a la plataforma y cómo
desarrollar aplicaciones para ella, orientado principalmente a que sirva como una guía
para que cualquier persona interesada en crear aplicaciones tenga una base en donde
obtener información.
Luego, en el Capítulo III se realizó una comparativa teórica que contrastaba Android
con Symbian OS y Windows Mobile. Symbian OS actualmente es un producto 100%
open source mientras que Windows Mobile continua siendo un producto propietario,
justamente fue esta una de las razones principales de utilizarlos en la comparación.
225
También se comparó Android con Symbian OS de manera práctica, se evaluaron sus
SDKs y cómo es el proceso de creación de una aplicación en ambas plataformas.
Finalmente se desarrollaron 3 aplicaciones considerables que muestran el potencial de
la plataforma Android y lo que cualquier desarrollador puede lograr usando el API
robusto que viene incluido en ella:
Ventajas principales
Plataforma abierta.- El hecho de que cualquier persona tenga la posibilidad de
utilizar y modificar el código de Android para ajustarlo a sus necesidades trae
consigo varios beneficios:
 Desde un punto de vista macro, cualquier empresa puede utilizar Android
y personalizar el producto que quiere vender. Los consumidores seriamos
los beneficiados al no existir un monopolio, como los creados por
empresas propietarias de ciertos productos.
 Para el caso de las personas con conocimiento en programación las
posibilidades son muy amplias. Entre las características disponibles para
ser explotadas se encuentran: sensores, servicios de localización, Google
Maps, entre otros.
226
Diversidad de productos objetivos.- La instalación de Android es posible en
cualquier teléfono inteligente, y no sólo está limitado a ellos, más adelante se
mostrarán en que otros dispositivos ya se encuentra instalado como su sistema
operativo.
Android Market.- Tienda virtual que ha tenido un notable y rápido
crecimiento, en comparación con sus contrincantes proporciona el mayor
número de aplicaciones gratuitas.
Trato igualitario de las aplicaciones nativas y las desarrolladas por terceros.Android no hace diferencias entre sus aplicaciones, la plataforma permite
accesar al hardware del equipo y explotar todo su potencial.
Lenguaje de programación Java.- Java es un lenguaje de programación
ampliamente utilizado y difundido. El principal beneficio que se obtiene al
utilizar este lenguaje es la portabilidad.
Dalvik.- Máquina virtual basada en registros y que ha sido optimizada para un
nivel bajo de requerimiento de memoria.
Base de datos real.- Android incluye SQLite como base de datos para que
pueda ser utilizada por los desarrolladores en sus aplicaciones.
227
Emulador potente.- Android incluye en su SDK un emulador con un diseño
moderno y fácil de utilizar. Proporciona un medio para probar y simular el
comportamiento de las aplicaciones como si estuviesen instaladas en un
equipo real.
Desventajas
Tiempo en el medio.-Android a nivel mundial a pesar de tener poco tiempo en
el mercado ha logrado escalar posiciones y competir con las plataformas
líderes en el mercado de los dispositivos móviles. Sin embargo, en nuestro
país recientemente arribo el primer equipo que ejecuta este sistema operativo,
se trata de Pulse de Huawei, el cual fue introducido por la operadora Movistar.
A pesar de las notables ventajas que proporciona el hecho de ser una
plataforma open source, la seguridad se ve afectada. Es responsabilidad de los
desarrolladores el crear aplicaciones seguras para sus clientes. En internet se
puede encontrar un estudio hecho por la empresa ISEC Partners41en donde se
establecen una serie de mecanismos para construir aplicaciones seguras. El
mismo
se
puede
encontrar
en:
https://www.isecpartners.com/.../iSEC_Securing_Android_Apps.pdf
41
ISEC Partners es una empresa líder en seguridad para aplicaciones móviles, web y cliente/servidor.
Fuente: https://www.isecpartners.com/
228
Finalmente quiero concluir respondiendo a la hipótesis central que se definió
inicialmente en este documento: ¿Es Android el futuro de la computación móvil?
A continuación presento una lista de diferentes equipos que no son teléfonos celulares
y en los que Android se ejecuta:
Tablet/Slate PCs.- el listado es amplio, SmartQ-V5, SmartQ-V7,
M16
aPad/Iped,M800 aPad/iPed, Orphan iRobot M003 aPad/iPed, E7001, Mastone
Lifepad 3G I850, FlatPad A10,LePad, M001, M003, Dell Streak/Mini5,
JAND700, ODROID-T, zenPAD, WebStation, Gentouch78, EeePad, Archos
5, Archos 7, 1& 1 SmartPad.
E-Readers.- tenemos los equipos nook, eDGe y Alex.
Netbooks. -existen Aspire One D250y Odroid-S
Vehículos.- Chevrolet Volt será el primer vehículo en tener integrado Android
junto con el sistema de seguridad OnStar de General Motors. El objetivo es
que Android permita buscar el auto vía GPS, utilizar reconocimiento de voz
para preguntar direcciones a Google Maps, asi como controlar diversas
funciones
del
auto.
229
Fuente:http://online.wsj.com/article/SB10001424052748704314904575251140310
072962.html?mod=WSJ_Tech_LEFTTopNews
Cada vez son más los tipos de equipos de los que Android forma parte, sabemos que
al poseer un sistema común la integración entre ellos es más transparente y es justo el
fin de la computación ubicua, un entorno
en donde las personas puedan vivir
interactuando con la tecnología sin notar su presencia.
5.1.2 RECOMENDACIONES
Como resultado del desarrollo de la investigación se puede concluir que Android es
en este momento una plataforma robusta y que proporciona un número elevado de
prestaciones y posibilidades tanto para los desarrolladores de aplicaciones como para
los otros tipos de usuarios de dispositivos móviles, específicamente pare el caso de
teléfonos inteligentes en este estudio.
La única limitante que considero existe, de manera temporal, es que recién se está
comercializando equipos que tienen instalado este sistema operativo en el Ecuador,
razón por la cual aun esta tecnología no es muy conocida en nuestro medio. Sin
embargo, después de la lectura de este documento estoy convencido que muchas
personas estarán interesadas en probar Android por lo cual el procedimiento a seguir
230
es descargar las herramientas, instalarlas y apoyarse en la información que tienen aquí
disponible y la que se encuentra en la Internet.
BIBLIOGRAFÍA
LIBROS
Ableson Frank, Collins Charlie, Sen Robi (2009). Unlocking Android: A
developers guide. Estados Unidos: Manning Publications Co.
De Jode Martin (2004). Programming Java 2 Micro Edition for Symbian OS: A
developer's guide to MIDP 2.0. Estados Unidos: Wiley.
DiMarzio J.F. (2008). Android: A programmers’s guide. Estados Unidos: McGrawHill.
Gail Rahn Frederick (2010). Beginning Smartphone Web Development: Building
Javascript, CSS, HTML and Ajax-Based Applications for iPhone, Android, Palm Pre,
Blackberry, Windows Mobile and Nokia S60. Estados Unidos; Apress
Haseman Chris (2008). Android Essentials. Estados Unidos: Apress.
Hammer Carol (2007). Creating Mobile GamesUsing JavaTM ME Platform to Putthe
Fun into Your Mobile Deviceand Cell Phone. Estados Unidos: Apress.
Li Sing, Knudsen Jonathan (2005). Beginning J2ME: From Novice to Professional.
Estados Unidos: Apress.
Kreibich Jay A (2010). Using SQLite. Estados Unidos: O'Reilly Media
Murphy Mark L.(2008). The Busy Coder's Guide to Android Development. Estados
Unidos: CommonsWare.
Murphy Mark L. (2010). Beggining Android 2: Begin the journey toward your own
successful Android 2 applications. Estados Unidos: Apress.
Owens Michael (2006). The Definitive Guide to SQLite. Estados Unidos: Apress.
RogersRick, Lombardo John, Mednieks Zigurd, Meike Blake (2009). Android
Application Development. Estados Unidos: O’Reilly Media
Rusty Harold Elliotte (2001). Processing XML with Java: A guide to SAX, DOM,
JDOM, JAXP, and TrAX. Estados Unidos: Addison-Wesley.
DIRECCIONES WEB
Android
Developers.
Android
API
Levels.
Extraido
desde:
http://developer.android.com/guide/appendix/api-levels.html
Android
Developers.Android
Supported
Media
Formats.
Extraido
desde:http://developer.android.com/guide/appendix/media-formats.html
Android
Developers.
What
is
Android?
Disponible
en:
Extraido
de:
http://developer.android.com/guide/basics/what-is-android.html
Android
Developers.System
Requirements.
http://developer.android.com/sdk/requirements.html
Distimo (junio de 2010). Apple App Store, BlackBerry App World, Google Android
Market,Nokia Ovi Store, Palm App Catalog and Windows Marketplace. Reporte
disponible para descargarse en: http://www.distimo.com/
Dot Com Infoway. Android by 2012, A study on present and future of Google's
Android.
Estudio
disponible
en:
http://www.dotcominfoway.com/attachments/268_White-paper-Android-by-2012.pdf
IDC, nota de prensa (Enero de 2010).IDC Says Android Will Be the #2 Mobile
Operating
System
by
2013.
Disponible
en:
http://www.idc.com/getdoc.jsp?containerId=prUS22176610
IDC, nota de prensa (Mayo de 2010).Worldwide Converged Mobile Device
(Smartphone) Market Grows 56.7% Year Over Year in First Quarter of 2010, Says
IDC. Disponible en: http://www.idc.com/getdoc.jsp?containerId=prUS22333410
ISEC partners (octubre de 2008).DEVELOPING secure mobile applications for
Android.An introduction to making secure Android applications. Disponible en:
https://www.isecpartners.com/.../iSEC_Securing_Android_Apps.pdf
Gartner, nota de prensa (Febrero de 2010).Gartner Says Worldwide Mobile Phone
Sales to End Users Grew 8 Per Cent in Fourth Quarter 2009; Market Remained Flat
in 2009. Disponible en:http://www.gartner.com/it/page.jsp?id=1306513
Gartner, nota de prensa (Mayo de 2010).Gartner Says Worldwide Mobile Phone
Sales
Grew
17
Per
Cent
in
First
Quarter
2010.
Disponible
en:http://www.gartner.com/it/page.jsp?id=1372013
Matos
Victor.
Android
Application’s
Life
Cycle.
Disponible
en:
http://www.slideshare.net/peterbuck/microsoft-powerpoint-androidchapter03lifecycle
Morrish Jim (abril de 2010). Smartphones forecast to grow to 26% of handsets by
2014.
Disponible
en:http://www.analysysmason.com/Research/Content/ViewPoints/RDMY0smartphones-forecast-OS-Apr2010/?journey=3710,3686
Open Hanset Alliance. Página oficial: http://www.openhandsetalliance.com
Research2Guidance (febrero de 2010). Smartphone Application Store Comparison.
Disponible en: http://www.docstoc.com/docs/33502524/Mobile-Application-StoreComparison-Tables
Rubin
Andy
(mayo
de
2007).Where’s
my
Gphone?
Disponible
en:
http://googleblog.blogspot.com/2007/11/wheres-my-gphone.html
Rubin Andy (septiembre de 2009).The future of mobile. Disponible en:
http://googleblog.blogspot.com/2008/09/future-of-mobile.html
Redación Conatel.Celulares e Internet, en una carrera sin trabas en Ecuador.
Disponible
en:http://www.conatel.gov.ec/site_conatel/index.php?option=com_content&view=arti
cle&id=595:celulares-e-internet-en-una-carrera-sin-trabas-encuador&catid=46:noticias-articulos&Itemid=184
Redacción INEC.Tecnologías de la información y Comunicaciones en el Ecuador.
Disponible
en:
http://www.inec.gov.ec/c/document_library/get_file?folderId=954942&name=DLFE34202.pdf
Spectrum (febrero 2008), Thoughts on Google Android. Estudio disponible en:
http://www.spectrumdt.com/documents/SDTAndroidTechnicalWhitePaper_001.pdf
Wikipedia.
Android
(operating
system).Disponible
http://en.wikipedia.org/wiki/Android_(operating_system)
en:
ANEXOS
ANEXO 1. Glosario
1. ACC (Advanced Audio Coding): Codificación de audio avanzado:Es un
formato de audio digital comprimido con pérdida. Fue diseñado con el fin de reemplazar
al MP3. Para un mismo número de impulsos por segundo (bitrate) y un mismo tamaño
de archivo MP3, el formato AAC es más estable y tiene más calidad, produciendo un
sonido más cristalino.
2. AMR-WB: El formato de audio (Adaptive Multi Rate - WideBand o AMR-WB)
es un formato de muy baja calidad de audio, se usan en melodías de móviles como
sonido "reales".
3. API (Application Programming Interface - Interfaz de Programación de
Aplicaciones): Grupo de rutinas (conformando una interfaz) que provee un
sistema operativo, una aplicación o una biblioteca, que definen cómo invocar
desde un programa un servicio que éstos prestan. En otras palabras, una API
representa un interfaz de comunicación entre componentes software.
4. AVRCP (Audio/Video Remote Control Profile): El perfil AVRCP proporciona
una interfaz estándar para controlar a distancia televisores, equipos de alta
fidelidad o cualquier otro equipo electrónico y permitir así, que un único control
remoto o cualquier otro tipo de mando controle todo el equipo de audio y vídeo al
que el usuario tiene acceso.El perfil AVRCP indica cómo controlar las
características de transferencia continua de archivos de imagen y sonido, entre
otras las funciones de pausa, stop, play de la reproducción y el control del
volumen, así como otras funciones de control remoto.También permite
extensiones específicas del fabricante.
5. A2DP(Advanced Audio Distribution Profile): Distribución de audio avanzada.
Define cómo se puede propagar un stream de audio (mono o estéreo) entre
dispositivos a través de una conexión Bluetooth. El perfil A2DP establece los
protocolos y procedimientos que realizarán la distribución del contenido de audio
de alta calidad en modo mono o estéreo a través de los canales ACL.
6. Framework:Un framework, en el desarrollo de software es una estructura de
soporte definida en la cual otro proyecto de software puede ser organizado y
desarrollado.
7. GUIs (Graphical User Interface - Interfaz gráfica de usuario): Sistema de
interacción entre el ordenador y el usuario, caracterizado por la utilización de
iconos y elementos gráficos en su concepción. Es un paso más allá de los
interfaces basados en caracteres, que sólo incluían líneas de texto para introducir
comandos y conocer las respuestas del sistema.
8. HE-AAC (High-Efficiency Advanced Audio Coding - Codificador avanzado de
audio de alta eficiencia): Es un formato de compresión de audio digital de muy
alta calidad (muy superior al MP‐3). Sus ventajas se manifiestan, sobre todo, para
audio multicanal (5.1 y 7.1) aunque también puede aplicarse para canales de audio
mono y estéreo.
9. H.263: es un estándar de códec de vídeo diseñado originalmente como un formato
de baja calidad comprimido para videoconferencias. Fue desarrollado por la UITT Video Expertos Codificación Group (VCEG) en un proyecto que termina en
1995/1996 como un miembro de la familia H.26x de codificación de vídeo
estándares en el dominio de la UIT-T.
10. H.264/AVC (Advanced Video Coding): es un estándar para la compresión de
vídeo.
11. IDE (Integrated Development Environment - Entorno integrado de desarrollo).
Aplicación compuesta por un conjunto de herramientas útiles para un
programador.
Un entorno IDE puede ser exclusivo para un lenguaje de programación o bien,
poder utilizarse para varios. Suele consistir de un editor de código, un compilador,
un
debugger
y
un
constructor
de
interfaz
gráfica
GUI.
Muchos entornos IDE vienen en paquetes SDK.
12. JDT (Java Developer Tools - Herramientas para desarrolladores de Java): El
proyecto JDT proporciona la herramienta plug-ins que implementan un IDE Java
de apoyo para el desarrollo de cualquier aplicación Java, incluyendo los plug-ins
de Eclipse.
13. Kernel (Núcleo): Es la parte fundamental de un sistema operativo. Es el software
encargado de gestionar los recursos del sistema.
14. Middleware: Es un módulo intermedio que actúa como conductor entre
sistemas permitiendo a cualquier usuario de sistemas de información comunicarse
con varias fuentes de información que se encuentran conectadas por una red.
Desde un punto de vista amplio una solución basada en productos middleware
debe permitir conectar entre sí a una variedad de productos procedentes de
diferentes proveedores. De esta forma se puede separar la estrategia de sistemas
de información de soluciones propietarias de un sólo proveedor.
15. MIDIS: Es un formato de sonido de muy pequeño tamaño. Los midis tienen
menos calidad que los wav o mp3. Sin embargo su tamaño es mucho menor, lo
que hace que no consuman casi memoria. Esto hace que los midis sean ideales
para las músicas de fondo del juego.
16. MPEG-4 SP: es una técnica de compresión de vídeo desarrollada por MPEG.
Pertenece al estándar ISO/IEC MPEG-4. Es un estándar de compresión basado en
la Transformada de coseno discreta (DCT), similar a estándares anteriores como
MPEG-1 y MPEG-2.
17. OGG VORBIS: es un códec de audio perceptivo de fines generales previsto para
permitir
flexibilidad
máxima
del
codificador,
permitiéndole
escalar
competitivamente sobre una gama excepcionalmente amplia de calidad/bitrates.
18. PCM/WAVE: es un formato de audio digital normalmente sin compresión de
datos, desarrollado y propiedad de Microsoft y de IBM que se utiliza para
almacenar sonidos en el PC, admite archivos mono y estéreo a diversas
resoluciones y velocidades de muestreo, su extensión es “.wav”.
19. PIM (Personal Information Management): Sistema avanzado de gestión del
organizador del teléfono móvil. Permite programar el calendario y sincronizarlo
con PC y PDA.
20. SAP (Service Acces Point -Punto de Acceso al Servicio): Interfaz física a través
de los cuales los niveles de orden más bajo en el modelo OSI proveen servicios a
los de mayor orden.
21. SDK (Software development kit - Kit de desarrollo de software): Es un conjunto
de herramientas y programas de desarrollo que permite al programador crear
aplicaciones para un determinado paquete de software, estructura de software,
plataforma de hardware, sistema de computadora, consulta de videojuego, sistema
operativo o similar.
22. Smartphones (Teléfono inteligente): Son pequeños dispositivos que integran
funcionalidades de teléfono móvil con las funcionalidades más comunes de un
PDA. Los Smartphones funcionan como teléfonos móviles y además permiten a
los usuarios almacenar información, enviar y recibir mensajes e E-mail e instalar
programas.
23. SMS(ShortMessage Service - Servicio de mensaje corto): Es un servicio de
mensajería por teléfonos celulares. Con este sistema se puede enviar o recibir
mensajes entre celulares y otros dispositivos electrónicos, e incluso utilizando
internet.
24. SSL (Secure Sockets Layer): Es un proceso que administra la seguridad de las
transacciones que se realizan a través de Internet. Se basa en un proceso de
cifrado de clave pública que garantiza la seguridad de los datos que se envían a
través de Internet. Su principio consiste en el establecimiento de un canal de
comunicación seguro (cifrado) entre dos equipos (el cliente y el servidor) después
de una fase de autenticación.
25. Teclado QWERTY:El término QWERTY se refiere al tipo de Teclado por la
forma en que se distribuyen sus letras. Las teclas en la fila superior debajo de los
números forman la palabra QWERTY al leerlas de izquierda a derecha. De aquí
proviene su nombre.
26. WAP
(Wireless
Application
Protocol)
-
Protocolo
de
aplicaciones
inalámbricas): Esun estándar seguro que permite que los usuarios accedan a
información de forma instantánea a través de dispositivos inalámbricos como
PDAs, teléfonos móviles, walkie-talkies y teléfonos inteligentes (smartphones).
27. Widgets:Componente con el cual un usuario interactúa en una interfaz gráfica.
Son ejemplos de widget las ventanas, cajas de texto, checkboxs, listbox, entre
otros.
Son utilizados por los programadores para hacer aplicaciones con interfaces
gráficas (GUI).
28. XML(Extensible Markup Language) - Lenguaje de marcado ampliable o
extensible): es una especificación/lenguaje de programación desarrollada por el
W3C. XML es una versión de SGML, diseñado especialmente para los
documentos de la web. Permite que los diseñadores creen sus propias etiquetas,
permitiendo la definición, transmisión, validación e interpretación de datos entre
aplicaciones y entre organizaciones.
ANEXO 2. Código fuente de la aplicación “Listado de Personas” implementada
utilizando el SDK de Android.
package android.com.proyecto.ejemplocomparativo;
import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.OnItemClickListener;
publicclass PantallaPrincipal extends ListActivity {
privatestaticfinalintCREAR_ACTIVIDAD = 0;
privatestaticfinalintAGREGAR_ID = Menu.FIRST+1;
privatestaticfinalintMOSTRAR_ID = Menu.FIRST+2;
privatestaticfinalintELIMINAR_ID = Menu.FIRST+3;
privatestaticfinalintSALIR_ID = Menu.FIRST+4;
privatelongtemp_id=0;
private DatabaseHelper dbh;
private Cursor personasCursor=null;
ListView myLv;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dbh=new DatabaseHelper(this);
dbh.open();
listarPersonas();
}
/*Métodoquelistalaspersonasingresadasenla base dedatos*/
publicvoid listarPersonas()
{
personasCursor = dbh.obtenerPersonas();
startManagingCursor(personasCursor);
ListAdapter adapter=new SimpleCursorAdapter(this,
R.layout.row, personasCursor,
new String[] {"_id","datos"},
newint[] {R.id._id,R.id.nombre});
setListAdapter(adapter);
myLv=getListView();
myLv.setOnItemClickListener(new OnItemClickListener() {
publicvoid onItemClick(AdapterView<?> parent, View view,
int position, long id) {
temp_id=id;
}
});
}
/*Métodoparacrearlasopicionesdelmenú*/
publicboolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, AGREGAR_ID, Menu.NONE, "Agregar
persona")
.setAlphabeticShortcut('a');
menu.add(Menu.NONE, MOSTRAR_ID, Menu.NONE, "Mostrar
datos")
.setAlphabeticShortcut('m');
menu.add(Menu.NONE, ELIMINAR_ID, Menu.NONE, "Eliminar
persona")
.setAlphabeticShortcut('e');
menu.add(Menu.NONE, SALIR_ID, Menu.NONE, "Salir")
.setAlphabeticShortcut('s');
return(super.onCreateOptionsMenu(menu));
}
/*Métodoparaindicarlasaccionesquedeberealizarcada
elementodelmenú*/
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
caseAGREGAR_ID:
agregarPersona();
return(true);
caseMOSTRAR_ID:
mostrarPersona();
return(true);
caseELIMINAR_ID:
dbh.eliminarPersona(temp_id);
listarPersonas();
returntrue;
caseSALIR_ID:
finish();
return(true);
}
return(super.onOptionsItemSelected(item));
}
/*Métodoqueinvocalaactividadenlacualseagregauna
persona*/
privatevoid agregarPersona() {
Intent i = new Intent(this, AgregarPersonaScreen.class);
startActivityForResult(i,CREAR_ACTIVIDAD);
}
/*Métodoqueinvocalaactividadenlacualsemuestrala
informaióndelapersonaseleccionada*/
privatevoid mostrarPersona() {
Intent i = new Intent(this, MostrarPersonaScreen.class);
System.out.println("Sale: " + temp_id);
i.putExtra("_id", temp_id);
startActivityForResult(i,CREAR_ACTIVIDAD);
}
}
package android.com.proyecto.ejemplocomparativo;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
publicclass AgregarPersonaScreen extends Activity {
private EditText nombre;
private EditText apellido;
private EditText cedula;
private EditText telefono;
private EditText direccion;
private Button btnAceptar;
privatestaticfinalintALERTA_NOMBRE=0;
privatestaticfinalintALERTA_APELLIDO=1;
privatestaticfinalintALERTA_CEDULA=2;
private DatabaseHelper dbh;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.persona);
dbh = new DatabaseHelper(this);
dbh.open();
nombre=(EditText)findViewById(R.id.nombre);
apellido=(EditText)findViewById(R.id.apellido);
cedula=(EditText)findViewById(R.id.cedula);
telefono=(EditText)findViewById(R.id.telefono);
direccion=(EditText)findViewById(R.id.direccion);
btnAceptar=(Button)findViewById(R.id.btnAceptar);
btnAceptar.setOnClickListener(new View.OnClickListener() {
@Override
publicvoid onClick(View v) {
boolean avanzar=true;
if((nombre.getText().toString().equals("") ||
nombre.getText().toString()==null)&&avanzar==true)
{
avanzar=false;
showDialog(ALERTA_NOMBRE);
}
if((apellido.getText().toString().equals("") ||
apellido.getText().toString()==null)&&avanzar==true)
{
avanzar=false;
showDialog(ALERTA_APELLIDO);
}
if((cedula.getText().toString().equals("") ||
cedula.getText().toString()==null)&&avanzar==true)
{
avanzar=false;
showDialog(ALERTA_CEDULA);
}
if(avanzar==true)
{
/*Llamadaalmétododela base
dedatosparaingresarunanuevapersona*/
dbh.crearPersona(nombre.getText().toString(),
apellido.getText().toString(),
cedula.getText().toString(),
telefono.getText().toString(),
direccion.getText().toString());
dbh.close();
setResult(RESULT_OK);
finish();
}
}
});
}
/*Métodoparagestionarlasalertasdemensajequesepresentan*/
@Override
public Dialog onCreateDialog(int id) {
switch(id) {
case (ALERTA_NOMBRE) :
AlertDialog.Builder alerta1 = new AlertDialog.Builder(this);
alerta1.setTitle("Ingreso de persona");
alerta1.setMessage("El nombre de la persona es obligatorio");
alerta1.setPositiveButton("Aceptar",
new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog,
int whichButton) {}});
return alerta1.create();
case (ALERTA_APELLIDO) :
AlertDialog.Builder alerta2 = new AlertDialog.Builder(this);
alerta2.setTitle("Ingreso de persona");
alerta2.setMessage("El apellido de la persona es obligatorio");
alerta2.setPositiveButton("Aceptar",
new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog,
int whichButton) {}});
return alerta2.create();
case (ALERTA_CEDULA) :
AlertDialog.Builder alerta3 = new AlertDialog.Builder(this);
alerta3.setTitle("Ingreso de persona");
alerta3.setMessage("El número de cédula de la persona es
obligatorio");
alerta3.setPositiveButton("Aceptar",
new DialogInterface.OnClickListener() {
publicvoid onClick(DialogInterface dialog,
int whichButton) {}});
return alerta3.create();
}
returnnull;
}
}
package android.com.proyecto.ejemplocomparativo;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
publicclass MostrarPersonaScreen extends Activity {
private TextView nombre;
private TextView apellido;
private TextView cedula;
private TextView telefono;
private TextView direccion;
private Button btnAceptar;
private Intent extras;
private Cursor personaCursor;
private DatabaseHelper dbh;
private String ls_nombre, ls_apellido;
@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.persona);
Long s=getIntent().getLongExtra("_id",0);
dbh = new DatabaseHelper(this);
dbh.open();
/*Invocacióndelmétodoqueobtienelosdatosdelapersona*/
personaCursor=dbh.obtenerPersona(s);
personaCursor.moveToFirst();
nombre=(TextView)findViewById(R.id.nombre);
apellido=(TextView)findViewById(R.id.apellido);
cedula=(TextView)findViewById(R.id.cedula);
telefono=(TextView)findViewById(R.id.telefono);
direccion=(TextView)findViewById(R.id.direccion);
btnAceptar=(Button)findViewById(R.id.btnAceptar);
btnAceptar.setVisibility(4);
nombre.setEnabled(false);
apellido.setEnabled(false);
cedula.setEnabled(false);
telefono.setEnabled(false);
direccion.setEnabled(false);
nombre.setText(personaCursor.getString(1));
apellido.setText(personaCursor.getString(2));
cedula.setText(personaCursor.getString(3));
telefono.setText(personaCursor.getString(4));
direccion.setText(personaCursor.getString(5));
}
}
package android.com.proyecto.ejemplocomparativo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
publicclass DatabaseHelper {
privatestaticfinal String DATABASE_NAME="PersonasDB";
privatestaticfinal String TABLE_NAME="personas";
publicstaticfinal String ROWID = "_id";
publicstaticfinal String NOMBRE="nombre";
publicstaticfinal String APELLIDO="apellido";
publicstaticfinal String CEDULA="cedula";
publicstaticfinal String TELEFONO="telefono";
publicstaticfinal String DIRECCION="direccion";
privatestaticfinal String CREAR_BD ="CREATE TABLE IF NOT EXISTS "
+ TABLE_NAME +
" (_id integer primary key autoincrement, nombre text not " +
" null, apellido text not null, cedula text not null, " +
" telefono text, direccion text);";
private SQLiteDatabase personasDB = null;
privatefinal Context myCtx;
/*Constructor delaclase*/
public DatabaseHelper(Context context) {
this.myCtx=context;
}
/*Métodoquecreala base o abrelaconexiónsiyaestá
creada*/
public DatabaseHelper open() throws SQLException {
try {
personasDB =
myCtx.openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE, null);
personasDB.execSQL(CREAR_BD);
} catch (SQLException ex) {
thrownew SQLException("No se puede crear la base");
}
returnthis;
}
/*Métodoparacerrarlaconexiónconla base dedatos*/
publicvoid close() {
personasDB.close();
}
/*Métodoparainsertarunregistroenlatablapersonas*/
publiclong crearPersona(String nombre, String apellido, String cedula, String
telefono, String direccion)
{
ContentValues personasValues = new ContentValues();
personasValues.put(NOMBRE, nombre);
personasValues.put(APELLIDO, apellido);
personasValues.put(CEDULA, cedula);
personasValues.put(TELEFONO, telefono);
personasValues.put(DIRECCION, direccion);
returnpersonasDB.insert(TABLE_NAME, null,
personasValues);
}
/*Métodoparaeliminarunregistrodelatablapersonas*/
publicboolean eliminarPersona(long id) {
returnpersonasDB.delete(TABLE_NAME, "_id" + "=" + id, null) > 0;
}
/*Métodoparaobtenertodaslaspersonasalmacenadasenlatabla,
formateadosdeunamaneradeterminada*/
public Cursor obtenerPersonas() {
returnpersonasDB.rawQuery("SELECT _id ,nombre||' '||apellido ||'.
Ced: '||cedula datos "+
"FROM personas ORDER BY _id",
null);
}
/*Métodoparaconsultarlainformacióndeunasolapersona*/
public Cursor obtenerPersona(long rowId) throws SQLException {
returnpersonasDB.rawQuery("SELECT * "+
"FROM personas where _id= " + rowId + ";",
null);
}
}
Código fuente de la aplicación “Listado de Personas” implementada utilizando
el SDK de Symbian OS.
package symbian.com.proyecto.ejemplocomparativo;
import java.io.IOException;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;
public class PantallaPrincipal extends MIDlet implements CommandListener
{
Display display = null;
List personas = null;
SymbianDB db = null;
int numeroPersonas=0;
RecordStore rs = null;
AgregarPersonaScreen a;
// Definición de los elementos del menú
static
final
Command
cmdSalir
=
new
Command("Salir",
Command.CANCEL, 0);
static final Command cmdAgregar = new Command("Agregar
persona",Command.SCREEN,1);
static final Command cmdMostrarInfo= new Command("Mostrar datos",
Command.SCREEN,2);
static final Command cmdEliminar = new Command("Eliminar
persona",Command.SCREEN, 3);
String currentMenu = null;
// Constructor de la clase, apertura del record store.
public PantallaPrincipal() throws RecordStoreFullException,
RecordStoreNotFoundException, RecordStoreException {
rs = RecordStore.openRecordStore("PersonasDB", true);
}
//Al iniciarse la aplicación se cargan las personas en la pantalla
public void startApp() throws MIDletStateChangeException{
db = new SymbianDB();
try {
numeroPersonas = rs.getNumRecords();
String[] listaPersonas = new String[numeroPersonas];
listaPersonas = db.obtenerPersonas(numeroPersonas, rs);
display = Display.getDisplay(this);
personas = new List("Listado de Personas", Choice.IMPLICIT);
for (int i = 0; i < numeroPersonas; i++) {
personas.append(listaPersonas[i], null);
}
personas.addCommand(cmdAgregar);
personas.addCommand(cmdMostrarInfo);
personas.addCommand(cmdEliminar);
personas.addCommand(cmdSalir);
personas.setCommandListener(this);
display.setCurrent(personas);
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
public void pauseApp() {
display = null;
personas = null;
}
public void destroyApp(boolean unconditional) {
notifyDestroyed();
}
//Definición de las acciones que debe realizar cada elementodel menú
public void commandAction(Command c, Displayable d)
{
String label = c.getLabel();
if (label.equals("Salir")) {
destroyApp(true);
}
else if (label.equals("Agregar persona")) {
display = Display.getDisplay(this);
display.setCurrent(new AgregarPersonaScreen(this,rs));
}
else if (label.equals("Mostrar datos")) {
try{
String[] datos=new String[5];
Integer.toString(db.obtenerRecordId(rs,this.personas.getString(
this.personas.getSelectedIndex())));
display = Display.getDisplay(this);
display.setCurrent(new
MostrarPersonaScreen(this,rs,Split.split(db.obtenerPersona(db.obtener
RecordId(rs,this.personas.getString(
this.personas.getSelectedIndex())), rs),"/")));
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else if (label.equals("Eliminar persona")){
try {
db.eliminarPersona(db.obtenerRecordId(rs,
this.personas.getString(this.personas.getSelectedIndex())), rs);
} catch (RecordStoreNotFoundException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
startApp();
} catch (MIDletStateChangeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void deleteRS() throws RecordStoreNotFoundException,
RecordStoreException{
RecordStore.deleteRecordStore("PersonasDB");
}
}
package symbian.com.proyecto.ejemplocomparativo;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDletStateChangeException;
import java.io.IOException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;
import javax.microedition.rms.InvalidRecordIDException;
public class AgregarPersonaScreen extends Canvas implements CommandListener{
Form frmPersona = new Form ("Agregar Persona");
TextField tfNombre = new TextField ("Nombre", "", 30, TextField.ANY);
TextField tfApellido = new TextField ("Apellido", "", 30, TextField.ANY);
TextField tfCedula = new TextField ("Cédula", "", 30, TextField.NUMERIC);
TextField tfTelefono = new TextField ("Teléfono", "", 30,
TextField.NUMERIC);
TextField tfDireccion = new TextField ("Dirección", "", 30, TextField.ANY);
public PantallaPrincipal localTest;
public Display display;
private SymbianDB db;
RecordStore localRS = null;
public
static
final
Command
cmdSalir
=
new
Command("Salir",Command.BACK, 0);
public
static
final
Command
cmdAgregar
=
new
Command("Agregar",Command.SCREEN, 1);
//Constructor de la clase, agregando opciones del menú
public AgregarPersonaScreen(PantallaPrincipal test, RecordStore rs) {
localRS = rs;
localTest = test;
display = Display.getDisplay(test);
frmPersona.addCommand(cmdSalir);
frmPersona.addCommand(cmdAgregar);
frmPersona.setCommandListener(this);
}
//Método para dibujar la pantalla
protected void paint(Graphics g) {
frmPersona.append(tfNombre);
frmPersona.append(tfApellido);
frmPersona.append(tfCedula);
frmPersona.append(tfTelefono);
frmPersona.append(tfDireccion);
display.setCurrent(frmPersona);
}
//Método que gestiona los eventos de cada elemento del menú
public void commandAction(Command command, Displayable displayable) {
boolean avanzar=true;
String label = command.getLabel();
if (label.equals("Salir")) {
try {
localTest.startApp();
} catch (MIDletStateChangeException e) {
e.printStackTrace();
}
}
else if (label.equals("Agregar")) {
if(tfNombre.getString().equals("")||tfNombre==null)
{
avanzar=false;
Alert
a=new
Alert("Agregar
Personas","Debe
ingresar
el
nombre.",null,null);
display.setCurrent(a);
}
if(tfApellido.getString().equals("")||tfApellido==null)
{
avanzar=false;
Alert
a=new
Alert("Agregar
Personas","Debe
ingresar
el
apellido.",null,null);
display.setCurrent(a);
}
if(tfCedula.getString().equals("")||tfCedula==null)
{
avanzar=false;
Alert a=new Alert("Agregar Personas","Debe ingresar el número de
cédula.",null,null);
display.setCurrent(a);
}
if(avanzar==true)
{
db = new SymbianDB(); //Creación de un nuevo RecordStore
//Método que almacena la información en el RecordStore
db.crearPersona(tfNombre.getString(),tfApellido.getString(),tfCedula.
getString(),
tfTelefono.getString(), tfDireccion.getString(), localRS);
try {
localTest.startApp();
} catch (MIDletStateChangeException e) {
e.printStackTrace();
}
}
}
}
}
package symbian.com.proyecto.ejemplocomparativo;
import java.util.Vector;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreNotOpenException;
import java.io.IOException;
import javax.microedition.rms.InvalidRecordIDException;
public class MostrarPersonaScreen extends Canvas implements CommandListener{
Form frmPersona = new Form ("Datos Persona");
TextField
tfNombre
=
new
TextField
("Nombre",
"",
30,
TextField.ANY|TextField.UNEDITABLE);
TextField tfApellido = new TextField ("Apellido", "", 30,
TextField.ANY|TextField.UNEDITABLE);
TextField
tfCedula
=
new
TextField
("Cédula",
"",
30,
TextField.NUMERIC|TextField.UNEDITABLE);
TextField tfTelefono = new TextField ("Teléfono", "", 30,
TextField.NUMERIC|TextField.UNEDITABLE);
TextField tfDireccion = new TextField ("Dirección", "", 30,
TextField.ANY|TextField.UNEDITABLE);
public PantallaPrincipal localTest;
public Display display;
private SymbianDB db;
RecordStore localRS = null;
public
static
final
Command
cmdSalir
=
new
Command("Salir",Command.BACK, 0);
public static final int posNombre =0;
public static final int posApellido =1;
public static final int posCedula =2;
public static final int posTelefono =3;
public static final int posDireccion =4;
//Constructor de la clase, se indica la información que contienen los
//elementos de la GUI
public MostrarPersonaScreen(PantallaPrincipal test, RecordStore rs, Vector
datos)
{
localRS = rs;
localTest = test;
display = Display.getDisplay(test);
frmPersona.addCommand(cmdSalir);
frmPersona.setCommandListener(this);
tfNombre.setString((String)datos.elementAt(posNombre));
tfApellido.setString((String)datos.elementAt(posApellido));
tfCedula.setString((String)datos.elementAt(posCedula));
tfTelefono.setString((String)datos.elementAt(posTelefono));
tfDireccion.setString((String)datos.elementAt(posDireccion));
}
//Método que dibuja la pantalla con los elementos definidos
protected void paint(Graphics g) {
frmPersona.append(tfNombre);
frmPersona.append(tfApellido);
frmPersona.append(tfCedula);
frmPersona.append(tfTelefono);
frmPersona.append(tfDireccion);
display.setCurrent(frmPersona);
}
//Método que especifia las acciones que realizan los elementos del menú
public void commandAction(Command command, Displayable displayable) {
String label = command.getLabel();
if (label.equals("Salir")) {
try {
localTest.startApp();
} catch (MIDletStateChangeException e) {
e.printStackTrace();
}
}
}
}
package symbian.com.proyecto.ejemplocomparativo;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.InvalidRecordIDException;
import javax.microedition.rms.RecordComparator;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordFilter;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotOpenException;
public class SymbianDB {
protected void startApp() throws MIDletStateChangeException {}
protected void pauseApp() {}
//Método que cierra la conexión con el RecordStore
protected void destroyApp(RecordStore rs) throws MIDletStateChangeException
{
try
{
rs.closeRecordStore();
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
//Método que permite guardar información en el RecordStore
public RecordStore crearPersona(String nombre,String apellido, String cedula,
String telefono,String direccion, RecordStore rs)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream outputStream = new DataOutputStream(baos);
try {
outputStream.writeUTF(nombre);
outputStream.writeUTF(apellido);
outputStream.writeUTF(cedula);
outputStream.writeUTF(telefono);
outputStream.writeUTF(direccion);
}
catch (IOException e)
{
e.printStackTrace();
}
byte[] b = baos.toByteArray();
try
{
rs.addRecord(b, 0, b.length);
}
catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (RecordStoreFullException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
return rs;
}
//Método que elimina la información de la persona almacenada enel RecordStore
public void eliminarPersona(int id, RecordStore rs){
try {
rs.deleteRecord(id);
rs.enumerateRecords((RecordFilter)null, (RecordComparator)null, true);
} catch (RecordStoreNotOpenException e) {
e.printStackTrace();
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
}
//Método que devuelve todos los registros almacenados en el RecordStore
public String[] obtenerPersonas(int numeroPersonas, RecordStore rs) throws
RecordStoreNotOpenException, RecordStoreException, IOException,
NullPointerException
{
String[]
personasArray
=
new
String[rs.enumerateRecords(null,
null,true).numRecords()];
RecordEnumeration
re
=
rs.enumerateRecords((RecordFilter)null,(RecordComparator) null, true);
int i = 0 ;
while (re.hasNextElement())
{
byte[] persona = re.nextRecord();
ByteArrayInputStream bais = new ByteArrayInputStream(persona);
DataInputStream dis = new DataInputStream(bais);
personasArray[i]= dis.readUTF()+" " +dis.readUTF()+". Ced: " +
dis.readUTF();
i++;
}
return personasArray;
}
//Método que devuelve la información de una persona específica almacenada
//en el RecordStore
public
String
obtenerPersona(int
id,
RecordStore
rs)
throws
RecordStoreNotOpenException, IOException
{
byte[] b = null;
try {
b = rs.getRecord(id);
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
ByteArrayInputStream bais = new ByteArrayInputStream(b);
DataInputStream dis = new DataInputStream(bais);
String
datos
=
dis.readUTF()+"/"+dis.readUTF()+"/"+dis.readUTF()+"/"+dis.readUTF()+"/"+
dis.readUTF();
return datos;
}
public String obtenerColumna(int id, int columna, RecordStore rs){
String nombre = null;
String apellido = null;
String cedula= null;
String telefono=null;
String direccion=null;
String rpta=null;
byte[] b = null;
try {
b = rs.getRecord(id);
} catch (InvalidRecordIDException e) {
e.printStackTrace();
} catch (RecordStoreException e) {
e.printStackTrace();
}
ByteArrayInputStream bais = new ByteArrayInputStream(b);
DataInputStream dis = new DataInputStream(bais);
try {
nombre = dis.readUTF();
apellido = dis.readUTF();
cedula = dis.readUTF();
telefono=dis.readUTF();
direccion=dis.readUTF();
} catch (IOException e) {
e.printStackTrace();
}
switch(columna)
{
case 1:
rpta=nombre;
case 2:
rpta=apellido;
case 3:
rpta=cedula;
case 4:
rpta=direccion;
case 5:
rpta=telefono;
}
return rpta;
}
public int obtenerRecordId(RecordStore rs, String registro) throws
InvalidRecordIDException, RecordStoreException, IOException
{
int recordID = 1;
boolean found = false;
String ls_cedula=registro.substring(registro.indexOf("Ced: ")+5);
RecordEnumeration re = rs.enumerateRecords((RecordFilter)null,
(RecordComparator) null, false);
re.keepUpdated(true);
while (re.hasNextElement() && found == false)
{
byte[] nextRec = re.nextRecord();
ByteArrayInputStream bais = new ByteArrayInputStream(nextRec);
DataInputStream dis = new DataInputStream(bais);
String nombre = dis.readUTF();
String apellido=dis.readUTF();
String cedula=dis.readUTF();
if (cedula.equalsIgnoreCase(ls_cedula))
{
found = true;
if (re.hasNextElement() == true){
re.nextRecord();
recordID = re.previousRecordId();
} else if (re.hasPreviousElement() == true){
re.previousRecord();
recordID = re.nextRecordId();
}
}
}
return recordID;
}
public void eliminarRS(String nombre) throws RecordStoreNotOpenException,
RecordStoreException{
RecordStore.deleteRecordStore(nombre);
}
}
package symbian.com.proyecto.ejemplocomparativo;
import java.util.Vector;
/*Clase que simula el comportamiento de la clase split*/
public class Split {
public static Vector split(String cadena, String separador){
Vector items = new Vector();
int pos = 0;
pos = cadena.indexOf(separador);
while(pos >= 0){
items.addElement(cadena.substring(0,pos).trim());
cadena = cadena.substring(pos + separador.length());
pos = cadena.indexOf(separador);
}
items.addElement(cadena);
return items;
}
}

Documentos relacionados