Manual 2015-I 05 - Desarrollo de Aplicaciones Móviles I (0557) v2.pdf

April 21, 2019 | Author: Richard Valencia Rojas | Category: Android (Operating System), Mobile App, Areas Of Computer Science, Computing, Tecnología
Share Embed Donate


Short Description

Download Manual 2015-I 05 - Desarrollo de Aplicaciones Móviles I (0557) v2.pdf...

Description

DESARROLLO DE APLICACIONES MÓVILES I

DESARROLLO DE APLICACIONES MÓVILES I

CARRERAS PROFESIONALES

2

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

3

Índice Presentación Red de contenidos UNIDAD 1. ANDROID: INTRODUCCIÓN A LA PLATAFORMA 1.1 Plataforma Android 1.1.1 Introducción a Android, versiones 1.1.2 Características y Arquitectura Android. 1.1.3 Máquina virtual Dalvik Virtual Machine y ART 1.1.4 Open Handset Alliance 1.1.5 Creación de emuladores

05 07 09 09 11 13 15 17 17

1.2 IDE Android Studio 1.2.1 Android Studio características y funciones. 1.2.2 Creando la primera aplicación Hola Mundo. 1.2.3 Controles básicos Button, EditText, TextView 1.2.4 Depuración de código en Android. Resumen de la unidad

18 19 23 25 29 31

UNIDAD 2. ANDROID: COMPONENTES

32 34 35 35 43

2.1 Fundamentos de aplicaciones Android 2.1.1 Arquitectura de la plataforma Android. 2.1.2 Estructura de un proyecto Android. 2.1.3 Que es un Gradle 2.2 Componente de una pantalla: Views y ViewGroups 2.2.1 Componente de una pantalla: Views y ViewGroups 2.2.2 Distribución de los ViewGroups: LinearLayout, AbsoluteLayout, TableLayout, Relative Layout, FrameLayout y ScrollView. 2.2.3 Widgets 2.2.4 Controles básicos Android

44 44

2.3 Componente Activity e Intent: definición y características 2.3.1 Activity 2.3.2 Ciclo de vida de la clase activity 2.3.3 Introducción a los Intent . 2.3.4 Funcionalidad y uso de Intents 2.3.5 Resolviendo problemas de pantalla.

56 56 58 60 61 63

2.4 Orientación del dispositivo 2.4.1 Adaptación de la interface de usuario a la orientación del dispositivo 2.4.2 Manejar cambios en la orientación del dispositivo.

66 67 68

2.5 Diálogos y notificaciones 2.5.1 Notificaciones Toast 2.5.2 Notificaciones en la barra de estado. 2.5.3 Diálogos personalizados basados en clases.

69 70 71 73

UNIDAD 3. PERSISTENCIA DE DATOS EN ANDROID 3.1 Acceso a recursos y archivos 3.1.1 Tipos de recursos en Android 3.1.2 Almacenamiento privado y compartido. 3.1.3 Grabar y cargar datos de Preferencias de Usuario. 3.1.4 File, FileOutputStream, OutputStreamWriter, PrintWriter 3.1.5 Environment uso de métodos básicos para acceso a recursos. 3.2 Persistencia de Datos usando SQLite 3.2.1 Introducción a adaptadores de datos

CIBERTEC

45 51 51

84 85 86 88 89 91 94 94

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

3.2.2 3.2.3 3.2.4 3.2.5

4

Introducción a SQLite Gestión de bases de datos con SQLite. Uso del componente SQLiteOpenHelper. La clase ContentValues Mantenimiento de datos Insert, Update, Delete rawQuery

96 98 99 100

3.3 Aplicando el Modelo Vista controlador con SQLite 3.3.1 Clases de acceso a datos basados en el modelo vista controlador.

102

UNIDAD 4. NETWORKING EN ANDROID 4.1 Consumiendo servicios web 4.1.1 SOAP (Simple Object Access Protocol) Mensajes SOAP, Estructura 4.1.2 Uso del protocolo HTTP para consumir web services. 4.1.3 Obtención de data de archivos XML. 4.1.4 Clases de acceso a web services 4.1.5 Thead Manejando hilos

104 106 108 115 117

UNIDAD 5. Servicios basados en localización 5.1 Manejo de fragments 5.1.1 ¿Qué es Fragment? 5.1.2 Creating a Fragment, administrar Fragments,Flagment class 5.1.3 Eventos fragment, Aaplicación fragment 131 5.1 Servicios basados en localización 5.1.1 Utilizar Google Maps en la aplicación. 5.1.2 Obtención de la localización (coordenadas) del dispositivo. 5.1.3 Google Maps 5.1.4 Activar las API de Google Maps.

129 132

137 138 139 140

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

145 147 148 149

UNIDAD 7. MULTIMEDIA Y PUBLICACIÓN 7.1 Audio, Video y Uso de Dispositivos visuales 7.1.1 Componente Media Player. Definición, características y aplicaciones. 151 7.1.2 Visualización de videos usando la vista Video. 152 7.1.3 Gráficos 2D y Aplicaciones Multimedia. 154 7.1.4 Grabación de audio y video: Uso de Intents para grabar video. 155 7.1 Publicación en Google Play 7.1.1 Google Play 7.1.2 Generación de APK firmado con el certificado digital. 7.1.3 Publicación de la aplicación.

156 157 158

Bibliografía del curso

159

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

5

Presentación El Taller de Desarrollo de Aplicaciones Móviles I es un curso que pertenece a la línea de programación y desarrollo de aplicaciones siendo un curso de especialidad sólo en la carrera de Computación e Informática. Permite al alumno iniciarse en la programación de dispositivos móviles bajo el entorno Android Studio que ha sido optimizado para dispositivos móviles con sistema operativo Android. El manual para el curso ha sido diseñado bajo la modalidad de unidades de aprendizaje, las que se desarrollan durante semanas determinadas. En cada una de ellas, hallará los logros, que debe alcanzar al final de la unidad; el tema tratado, el cual será ampliamente desarrollado; y los contenidos, que debe desarrollar, y ejercicios necesarios para poner en práctica los conceptos desarrollados en clase. Por último, encontrará las actividades que deberá desarrollar en cada sesión, que le permitirán reforzar lo aprendido en la clase. El curso es práctico y consiste en un taller de programación. En la primera parte del curso, se revisan las características del sistema operativo Android así como las funcionalidades básicas con el fin de familiarizar al participante con la forma de trabajo y la arquitectura de aplicaciones bajo el sistema operativo Android y la relación que existe con las aplicaciones y/o servicios de google (Google Apps). Luego, se desarrollan aplicaciones que permitan el manejo del dispositivo móvil para ingresar, procesar y presentar información haciendo uso de las clases que proporciona la plataforma de desarrollo Android, luego se desarrollara persistencia de datos locales como almacenamiento en con disco,labases de datos y en la nube vía web soap, rest. Se concluye publicación desqlite aplicaciones haciendo usoservices, de los servicios de google vía google play.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

CARRERAS PROFESIONALES

6

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

7

Red de contenidos

DESARROLLO DE APLICACIONES MÓVILES I

Unidad 1

Android: Introducción a la plataforma

Unidad 2

Unidad 3

Android: Componentes

Networking en Android

Persistencia de datos en Android

CIBERTEC

Unidad 4

Unidad 5

Unidad 6

Servicios basados en localización

Unidad 7

Multimedia y publicación

Servicios

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

CARRERAS PROFESIONALES

8

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

9

UNIDAD

1 Introducción a la plataforma LOGRO DE LA UNIDAD DE APRENDIZAJE Al término de la unidad, el alumno elabora aplicaciones haciendo uso del entorno de desarrollo Android Studio.

TEMARIO 1.3 Plataforma Android 1.3.1 1.3.2 1.3.3 1.3.4

Introducción a Android, versiones Características y Arquitectura Android. Máquina virtual Dalvik Virtual Machine y ART Open Handset Alliance

1.3.5 Creación de emuladores

1.4 IDE Android Studio 1.4.1 1.4.2 1.4.3 1.4.4

Android Studio características y funciones. Creando la primera aplicación Hola Mundo. Controles básicos Button, EditText, TextView Depuración de código en Android.

ACTIVIDADES PROPUESTAS  



Los alumnos identifican la arquitectura del sistema operativo android. Los alumnos hacen uso del IDE principal de desarrollo Android Studio. Los alumnos crean la primera aplicación en Android y reconocen la diferencia entre un activity, layout ylas vistas básicas.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

CARRERAS PROFESIONALES

10

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

11

1.1. INTRODUCCIÓN A LA PLATAFORMA 1.1.1. Plataforma Android Android es un sistema operativo móvil basado en el kernel 2.6 de Linux Android fue desarrollado para dispositivos móviles, tabletas, relojes, televisores automóviles, actualmente es uno de los sistemas operativos más utilizados en el planeta. Inicialmente fue desarrollado por Andy Rubin figura 1, quien funda la compañía Android inc en estados unidos en Palo Alto, posterior a ello google adquiere completamente la compañía en el año 2005 posterior a ello se crea en grupo de empresas asociadas que patrocina Android como plataforma libre para dispositivos móviles y otros. La decisión de estudia el desarrollo de aplicaciones para esta plataforma es que tiene el mayor potencial del mercado ya que no solo está orientado a dispositivos móviles sino a una aplica gama de dispositivos con el soporte de google a continuación se presenta una imagen de los dispositivos Figura 1: Andy Rubin Fuente: http://es.wikipedia.org/wiki/Andy_Rubin que soportan Android figura 2.

Figura 2: Dispositivos que soportan Android Fuente: http://www.android.com/

Android está basado en capas que permiten administrar las funciones básicas de cualquier equipo móvil, en primer lugar tiene aplicaciones estándares como administrador de contactos, administrador de aplicaciones administrador de drivers, administrador de mensajes, administrador de archivos, álbum de fotos, administrador de llamadas configuración todo controlado desde tupor cuenta para cualquier instalación de aplicación se debe realizar mediodedeGmail googlegoogle; play. Debajo de ello se encuentran las librerías nativas para acceso a bases de datos, administración de recursos, drivers de audio, administrador de sistema, webkit navegador web nativo, etc. Por el lado de la máquina virtual se encuentra Virtual Dalvik y Art que es una de las mejoras que fueron creadas en octubre del año 2014, después de ello se tiene el kernel del sistema operativo tal como se puede apreciar en el gráfico que se presenta a continuación.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

12

Figura 3: Dispositivos que soportan Android Fuente.- Tomado de http://source.android.com/source/index.html

Qué es una Aplicación Android? Una aplicación desarrollada en Android es un programa que posee una o varias funciones hacen útil para unque motivo. equivalentes adesarrolladas cualquier programa específicas hecho paraque PClocon la diferencia tieneSon funcionalidades para el celular. Uno de los limitantes es el tamaño de pantalla y teclado aunque las últimas versiones de sistemas operativos tienen soporte para conectar teclado USB. Por otro lado cualquier aplicación se debe instalar por medio de Google Play, sin embargo se puede instalar una aplicación configurando instalar aplicaciones de fuentes no seguras. Por otro lado la plataforma Android tiene una gran cantidad de aplicaciones con más de 700 mil aplicaciones que se pueden descargar, muchas de ellas gratuitas.

Figura 4: Programas posibles para instalar en el celular Fuente.- Tomado de http://www.androidexperto.com

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

13

1.1.2 Características y Arquitectura Android Una aplicación desarrollada en Android es un programa que posee una o varias funciones específicas que lo hacen útil para un motivo. Son equivalentes a cualquier programa. El sistema operativo Android, al igual que los propios teléfonos móviles, ha evolucionado rápidamente, acumulando una gran cantidad de versiones, desde la 1.0 para el QWERTY HTC G1, hasta la 4.0 que acaba de salir al mercado.

Entre las principales características tenemos:  framework de aplicación que habilita la reutilización y reemplazo de componentes 

máquina virtual dalvik optimizada para móviles



navegador integrado basado en webkit



gráficos optimizados poruna librería gráfica 2d propia; gráficos 3d basados en la especificación opengl es 1.0



sqlite para almacenamiento de datos estructurados



soporte para gran variedad de archivos multimedia (mpeg4,h.264, mp3, aac,



amr, jpg, png, gif) Telefonía gsm



Bluetooth, edge, 3g y wifi (4g, wimax,)



Cámara, gps, compás, acelerómetro



Entorno de desarrollo completo incluyendo emulador, herramientas de depuración, profiling de memoria y rendimiento y plugin para el ide eclipse

Competidores comunes 

Apple



RIM



o Blackberry Microsoft

o

 

iPhone OS

o Windows Mobile 6.5 Phone 7 Series Symbian Foundation o Symbian OS Palm o WebOS

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

14

Cupcake: Android Versión 1.5 Características: Widgets, teclado QWERTY virtual, copy & paste, captura de vídeos y poder subirlos a YouTube directamente.

Donut: Android Versión 1.6 Características: Añade a la anterior la mejoría de la interfaz de la cámara, búsqueda por voz, y navegación en Google Maps.

Eclair: Android Versión 2.0/2.1 Características: Mejoras en Google Maps, salvapantallas animado, incluye zoom digital para la cámara, y un nuevo navegador de internet.

Froyo: Android Versión 2.2 Características: Incluye hostpot Wifi, mejora de la memoria, más veloz, Microsoft Exchange y video-llamada.

Ginger Bread: Android Versión 2.3 Características: Mejoras del consumo de batería, el soporte de vídeo online y el teclado virtual, e incluye soporte para pagos mediante NFC2

Honey Comb: Android Versión 3.0/3.4 Características: Mejoras para tablets, soporte Flash y Divx, integra Dolphin, multitarea pudiendo cambiar de aplicación dejando las demás en espera en una columna, widgets y homepage personalizable.

Ice Cream Sandwich: Android Version 4.0 Características: Multiplataforma (tablets, teléfonos móviles y notebooks), barras de estado, pantalla principal con soporte para 3D, widgets redimensionables, soporte USB para teclados, reconocimiento facial y controles para PS3.

Android - 4.4 KitKat Android - 5.0 Lollipop Introduce la nueva plataforma en base de diseño, el nuevo concepto de Diseño Material (Material Design) y es la primera versión que integra Android Runtime (ART) de manera predeterminada.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

15

1.1.3 Máquina virtual Dalvik Virtual Machine y ART

Dalvik Virtual Machine Dalvik es la máquina virtual que utiliza la plataforma para dispositivos móviles Android. Dalvik ha sido diseñada por Dan Bornstein con contribuciones de otros ingenieros de Google. La Máquina Virtual Dalvik (DVM) permite ejecutar aplicaciones programadas en Java. La DVM no afirma ser una máquina virtual de java (JVM) debido a que le ocasionaría problemas de licenciamiento, sin embargo cumple ese propósito. La mayoría de los programas escritos en Java 5 pueden correr sobre la DVM. DVM sacrifica la portabilidad que caracteriza a Java para poder crear aplicaciones con un mejor rendimiento y menor consumo de energía, estas dos características son extremadamente importantes en dispositivos móviles, debido a que la capacidad de las baterías en estos dispositivos es limitada. DVM está optimizada para requerir poca memoria y está diseñada para permitir ejecutar varias instancias de la máquina virtual simultáneamente, delegando en el sistema operativo subyacente el soporte de aislamiento de procesos, gestión de memoria e hilos.

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

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

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

16

embargo, la herramienta dx incluida en el SDK de Android permite transformar los archivos Class de Java compilados por un compilador Java al formato de archivos Dex. El nombre de Dalvik fue elegido por Bornstein en honor a Dalvík, un pueblo de Eyjafjörður, Islandia, donde vivieron antepasados suyos. Fuente: http://es.wikipedia.org/wiki/Dalvik

Android Runtime (ART) Esta máquina virtual permite que las aplicaciones se compilen en código nativo, lo cual ayuda a que las aplicaciones se carguen más rápido y que traiga el soporte de procesadores de 64 bits. Google dice que con ART se estima que el desempeño mejore cuatro veces.







Android Lollipop te permite configurar rápidamente tu nuevo dispositivo. Usando NFC, podrás migrar tus cuentas con sólo unir tu nuevo dispositivo con el viejo. En el Nexus 6 y Nexus 9, el comando de voz de O " K Google" funciona hasta cuando la pantalla está apagada. Permitirá restablecer la configuración de fábrica y borrar todos los datos de manera remota, especialmente diseñado para esas ocasiones en las que perdemos los teléfonos o nos lo roban.













Los nuevos dispositivos vienen con la encriptación automática activa para proteger tu información en el caso de que te roben o pierdas el dispositivo. Menor latencia en la entrada de sonido permite que la música y los apps de comunicaciones ofrezcan una mejor experiencia con mayor fluidez. Soporte de accesorios de sonido a través de USB. Funciones de fotografía profesional, incluyendo la captura completa de cuadros a cerca de 30 cuadros por segundo, soporte de formatos Bayer RAW y YUV, control del sensor, lente y flash individualmente por cada cuadro, y la captura de metadata como modelos de ruido e información óptica. Protocolo más eficiente en el consumo de energía para buscar dispositivos de Bluetooth LE y los contadores (beacons). Soporte para 15 nuevos idiomas para incrementar el soporte a más de 68 idiomas.

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

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

17

1.1.4 Open Handset Alliance Es una alianza de empresas de manera comercial para patrocinar el desarrollo de Android hay 84 compañías que patrocinan el producto en beneficio de continuar mejorando la plataforma Android. Algunos de sus miembros son Google, HTC, Dell, Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG, T-Mobile, Nvidia y Wind River Systems.

Figura 4: Lista de empresas open HandSet Alliance Fuente.- Tomado de http://2.bp.blogspot.com/

1.1.5 Creación de emuladores Para iniciar en el desarrollo de aplicaciones móviles con Android es necesario tener un emulador. Un emulador es una aplicación que simula ser un equipo físico para ello debemos hacer uso del administrador de máquinas virtuales. Para ello se debe hacer clic en el administrador de máquinas virtuales

En la pantalla se debe elegir una de los dispositivos y posterior a ello se debe descargar los drivers y/o librerías que sean necesarios.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

18

Para más detalles debes continuar con el material de la practica dirigida N° 1

Tema 2: IDE Android Studio Android Studio, es el IDE (Entorno de desarrollo integrado) que utilizaremos para crear nuestras aplicaciones es un ide mejorado al que se tenia de eclipse, esta basado en IntelliJ IDEA de JetBrains para facilitar la generación de código para los desarrolladores de android esta disponible para plataforma windows, MAC O/S y linux. Para descargar el ide android studio puedes ingresar al siguiente link: http://developer.android.com/sdk/index.html Lo más resaltante de androidstudio es la ayuda integrada

Figura 9: Intelligent code editor

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

19

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

1.2.1 Android Studio características y funciones. 

Sistema de construcción de código basado en JetBrains flexible.



Construir variantes y generación de archivos apk múltiple.



Plantillas de código para ayudarle a construir características de la aplicación comunes.



editor de diseño Rich con soporte para arrastrar y soltar de edición tema. Herramientas de pelusa para atrapar el rendimiento, facilidad de uso,



Capacidades ProGuard y aplicación de firma.



El soporte integrado parala plataforma de nube Google, por lo que es fácil de



compatibilidad de versiones, y otros problemas.

integrar Google Cloud Mensajería y App Engine. 

Soporte para construcción basada en Gradle.



Consola de desarrollador: consejos de optimización, ayuda para la traducción,



Renderización en tiempo real.



Soporte para programar aplicaciones para Android Wear.

estadísticas de uso.



Herramientas Lint para detectar problemas de rendimiento, usabilidad, compatibilidad de versiones, y otros problemas.



Refactorización especifica de Android y arreglos rápidos.



Plantillas para crear diseños comunes de Android y otros componentes.

El entorno de desarrollo está preparado para crear cualquier tipo de aplicación en Android, entre ellos podemos tener para televisor, teléfonos, reloj, google glass y/o Google Claud. Como podemos apreciar en el siguiente gráfico:

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

20

Figura 5: Soporte a aplicaciones por android studio

1.2.2 Creando la primera aplicación Hola Mundo. Ingresar a Android Studio y luego dar clic en el menú File/New Proyect Application Name: Semana 01 Controles Company Domain: SolucionesMoviles Proyect Location: C:\AppsMoviles_5toCiclo

Dar click en Next Seleccionar el API y el dispositivo donde se ejecutará de la aplicación: Seleccionar la plantilla para las pantallas inicialmente vamos a seleccionar un diseño en blanco.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

21

Dar click en next En la siguiente pantalla se debe considerar la siguiente información: Activity Name: Nombre de clase que se relaciona a la pantalla (layout) Layout Name: Nombre de diseño de pantalla Title: título de la pantalla el que aparece cuando se ejecuta la aplicación Menú Resource Name: el nombre de archivo xml de menú asociado al layout.

Dar click en finalizar para completar el asistente. El proyecto que se crea

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

22

Donde A: Archivos del proyecto B: Diseño de pantalla en XML C: Vistas de Text (XML) y Design (Diseño). Visa de diseño de pantalla En esta vista se puede apreciar el desarrollo de la aplicación en Android donde cada rectángulo es una sección de apoyo de diseño de la aplicación.

Dónde:

A: de pantalla controles(Layout) B: Cuadro Diseño de C: Vista esquema de controles D: Vista propiedades de controles. Hasta aquí nos quedamos con el ejercicio de crear la primera aplicación en Android Studio (Semana 01 Controles), a continuación vamos a revisar los principales

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

23

controles y sus propiedades para completar el desarrollo de nuestra primera aplicación.

1.2.3 Controles básicos Burton, Edites, TextView Los controles más básicos que tenemos en Android son sin duda Burton, Edites y textview los cuales nos permitirán crear una aplicación básica como por ejemplo un login o un mantenimiento de datos. En esta primera parte vamos a revisar en forma preliminar los controles básicos que muestran lo siguiente:

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



TextView.- es un control etiqueta que permite mostrar textos de solo lectura en la pantalla. Para más detalles de los atributos y/o métodos puedes visitar la página oficial de Android ingresando a: http://developer.android.com/reference/android/widget/TextView.html Definir el control por código XML



Edites.- es un control que permite ingresar datos está sujeto a aplicarle estilos (Patrones) para mejorar el uso del mismo. Para más detalles de los atributos y/o métodos puedes visitar la página oficial de Android ingresando a: http://developer.android.com/reference/android/widget/EditText.html

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

24

Definir el control por código XML



Burton.- Botones de acción permite involucrar eventos comunes como click con el fin de que el usuario pueda realizar una tarea. Definir el control por código XML

Para más detalles de los atributos y/o métodos puedes visitar la página oficial de Android ingresando a: http://developer.android.com/reference/android/widget/Button.html

Diseño de pantalla login Para continuar con el ejercicio desarrollado anteriormente realizar los siguiente

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

25

Agregar los siguientes controles 1 1 2 2 2 Se debe agregar en el siguiente orden 1. Primero borrar todos los controles existentes 2. Agregar el layout LinnerLayout (Vertical) 3. Agregar 1 large text 4. Agregar un Plain TextView (Plain TextView) 5. Agregar el control EditText (Plain Text) 6. Hacer el mismo procedimiento para los dos controles 7. Posterior a ellos agregar los controles Botones de comando. Para cambiar las propiedades dar doble click en el control.

Donde Text es el texto a mostrarse e id es el nombre del control que se utilizara en el código.

Finalmente el diseño de los controles quedará como se muestra:

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

26

En la vista texto (código XML) quedará como se muestra:

Finalmente al ejecutar la aplicación se muestra lo siguiente:

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

29

1.4.5 Depuración de código en Android. La depuración es una facilidad del IDE de Android Studio con el objetivo de hacer seguimiento al código fuente y verificar algún error no esperado, limpiar el programa, etc. Según Wikipedia la definición de depuración de programas es el proceso de identificar y corregir errores de programación. En inglés se le conoce como debugging, es que se asemeja a la eliminación debichos (bugs), manera en que se conoce informalmente a los errores de programación. Se dice que el término bug proviene de la época de los ordenadores de válvula termoiónica, en los cuales los problemas se generaban por los insectos que eran atraídos por las luces y estropeaban el equipo. Ejecutar en modo depuración:

Agregar punto de interrupción para comenzar a ejecutar paso a paso

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

30

Menú con todas las opciones de depuración.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

31

Resumen 1. El sistema operativo Android está basado en el núcleo del sistema operativo Android 2.6 y su creador es Andy Ruby. 2. Android es uno de los mejores sistemas operativos para dispositivos móviles por excelencia. 3. Las características del dispositivo móvil son basados en estándares abiertos. 4. La Open Handset Alliance es una estrategia comercial de apoyo mutuo para mejorar la plataforma de estándares abiertos del sistema operativo móvil Android. 5. Android Studio es la herramienta más sofisticada para crear aplicaciones basadas en Android. 6. La depuración busca ubicar errores en el código de nuestra aplicación y es una facilidad del IDE con el fin de corregir errores de código o limpiar el programa.

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

o

CIBERTEC

Recursos y documentación de la librería Android: https://developer.android.com/index.html Introducción a la plataforma Android: http://www.ibm.com/developerworks/ssa/library/os-androiddevel/#resources

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

32

UNIDAD

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

TEMARIO 2.1 Fundamentos de aplicaciones Android

2.1.1 2.1.2 2.1.3 2.1.4

Arquitectura de la plataforma Android. Estructura de un proyecto Android. Archivos básicos, recursos, iconos. Ciclo de vida de un Activity. Componente Activity: definición y características.

2.1.5 de recursos, 2.1.6 Uso Configuración delacceso archivoadeString.XML. manifiesto. 2.2 Componente de una pantalla: Views y ViewGroups

2.2.1 Componente de una pantalla: Views y ViewGroups. 2.2.2 Distribución de los ViewGroups: LinearLayout, AbsoluteLayout, TableLayout, Relative Layout, FrameLayout y ScrollView. 2.2.3 Controles ImageView, ImageButton, Spinner, Checkbox, ProgressBar. 2.3 Componente Intent: definición y características

2.3.1 2.3.2 2.3.3 2.3.4

Uso de Intents para gestionar Actividades. Resolviendo colisión de Intent Filter. Invocación a otras aplicaciones usando Intents. Uso del PendingIntent y notificaciones.

2.4 Orientación del dispositivo

2.4.1 Adaptación de la interface de usuario a la orientación del dispositivo. 2.4.2 Manejar cambios en la orientación del dispositivo. 2.4.3 Diseño de interface de usuario con Views avanzados: ListView. 2.5 Diálogos y notificaciones

2.5.1 2.5.2 2.5.3 2.5.4

Dialog Window y Progress Dialog. Diálogos personalizados basados en clases. Toast, formatos, uso de estilos. Menús, fuentes.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

33

ACTIVIDADES PROPUESTAS   

  

Los alumnos identifican la arquitectura de las aplicaciones en Android. Los alumnos identifican y usan los distintos diseños de pantalla. Los alumnos identifican los principales controles a utilizar para desarrollar una aplicación básica. Los alumnos identifica y manejan el ciclo de vida de las activitys. Los alumnos identifican y hacen uso de los controles básicos. Los alumnos programan los eventos de botones de comando en una aplicación Android.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

34

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

2.1.1. Plataforma Android La plataforma Android es la más utilizada en la actualidad, por ello es muy importante estar de acorde con los avances de la tecnología, el año que paso se consideró uno de los años en el que la plataforma Android se consagro en el mercado como uno de los sistemas operativos más revolucionarios del mercado por ello en esta sección vamos a hacer un comparativo con los competidores más cercanos como son iPhone de Apple y Windows pone de Microsoft. El siguiente grafico presenta

Figura 9: Lista de plataformas moviles en competencia según Garnert Fuente.- Tomado de http://www.androidcurso.com/index.php/

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

35

Por otro lado es importante dentro de la comparación revisar la cuota de mercado de cada una de las plataformas en el año 2014. Podemos destacar la desaparición de la plataforma Symbian de Nokia, el declive continuo de BlackBerry, el estancamiento de la plataforma de Windows, que parece que no despega, y el afianzamiento de la cuota de mercado de Apple en torno al 20%. Finalmente, cabe señalar el espectacular ascenso de la plataforma Android, que en cinco años ha alcanzado una cuota de mercado en torno al 85%

Figura 10: cuota de mercado de las plataformas movile según Garnert Fuente.- Tomado de http://www.androidcurso.com/index.php/

2.1.2. Estructura de un proyecto en Android Cuando creamos un proyecto en Android Studio se presenta tal como se muestra en la figura 11, en la parte izquierda, podemos observar todos los elementos creados inicialmente para el nuevo proyecto Android, sin embargo por defecto lo vemos agrupados en idea, app, gradle. Para entender mejor la estructura del proyecto vamos a cambiar momentáneamente la forma en la que Android Studio nos la muestra. Para ello, pulsaremos sobre la lista desplegable situada en la parte superior izquierda, y cambiaremos la vista de Figura 11: Estructura de un proyecto en android CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

36

proyecto a “Project”.

Figura 12: Vista proyecto

Al cambiar la vista, los mismos archivos se presentan de otra manera como se observa en la siguiente figura:

En los siguientes contenidos se describirá los elementos principales de esta estructura. Lo primero que debemos distinguir son los conceptos de proyecto y módulo. La entidad proyectoes única, y engloba a todos los demás elementos. Dentro de un proyecto podemos incluir varios módulos, que pueden representar aplicaciones distintas, versiones diferentes de una misma aplicación, o distintos componentes de un sistema (aplicación móvil, aplicación servidor, librerías). En la mayoría de los casos, trabajaremos con un proyecto que contendrá un sólo módulo correspondiente a nuestra aplicación principal. Por ejemplo en este caso que estamos creando tenemos el proyecto “AppsMoviles_5toCiclo” que contiene al módulo “app” que contendrá todo el software de la aplicación de ejemplo.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

37

Figura 14: Vista proyecto/Modulo

A continuación describiremos los contenidos principales de nuestro módulo principal. Carpeta /app/src/main/java Esta carpeta contendrá todo el código fuente de la aplicación, clases auxiliares, etc. Inicialmente, Android Studio creará por nosotros el código básico de la pantalla (actividad o activity) principal de la aplicación, que recordemos que en nuestro caso era MainActivity, y siempre bajo la estructura del paquete java definido durante la creación del proyecto.

Figura 15: Vista proyecto/Clases

Carpeta /app/src/main/res/ Contiene todos los ficheros de recursos necesarios para el proyecto: imágenes, layouts, cadenas de texto, etc. Los diferentes tipos de recursos se pueden distribuir entre las siguientes subcarpetas: No todas estas carpetas tienen por qué aparecer en cada proyecto Android, tan sólo las que se necesiten. Iremos viendo durante el curso qué tipo de elementos se pueden incluir en cada una de ellas y cómo se utilizan. Como ejemplo, para un proyecto nuevo Android como el que hemos creado, tendremos por defecto los siguientes recursos para la aplicación:

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

Carpeta

/res/drawable/

/res/layout/

/res/anim/ /res/animator/ /res/color/ /res/menu/ /res/xml/ /res/raw/ /res/values/

38

Descripción Contiene las imágenes [y otros elementos gráficos] usados en por la aplicación. Para poder definir diferentes recursos dependiendo de la resolución y densidad de la pantalla del dispositivo se suele dividir en varias subcarpetas:  /drawable (recursos independientes de la densidad)  /drawable-ldpi (densidad baja)  /drawable-mdpi (densidad media)  /drawable-hdpi (densidad alta)  /drawable-xhdpi (densidad muy alta)  /drawable-xxhdpi (densidad muy muy alta :) Contiene los ficheros de definición XML de las diferentes pantallas de la interfaz gráfica. Para definir distintos layouts dependiendo de la orientación del dispositivo se puede dividir también en subcarpetas:  /layout (vertical)  /layout-land (horizontal)

Contienen la definición de las animaciones utilizadas por la aplicación. Contiene ficheros XML de definición de colores según estado. Contiene la definición XML de los menús de la aplicación. Contiene otros ficheros XML de datos utilizados por la aplicación. Contiene recursos adicionales, normalmente en formato distinto a XML, que no se incluyan en el resto de carpetas de recursos. Contiene otros ficheros XML de recursos de la aplicación, como por ejemplo cadenas de texto (strings.xml), estilos (styles.xml), colores (colors.xml), arrays de valores (arrays.xml), tamaños (dimens.xml), etc.

Figura 16: Vista proyecto/Recursos

Como se puede observar, existen algunas carpetas en cuyo nombre se incluye un sufijo adicional, como por ejemplo “values-w820dp”. Estos, y otros sufijos, se emplean para definir recursos independientes para determinados dispositivos según sus características. De esta forma, por ejemplo, los recursos incluidos en la carpeta

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

39

“values-w820dp” se aplicarían sólo a pantallas con más de 820dp de ancho, o los

incluidos en una carpeta llamada“values-v11” se aplicarían tan sólo a dispositivos cuya versión de Android sea la 3.0 (API 11) o superior. Al igual que lo s sufijos “-w” y “– v” existen otros muchos. Para referirse a otras características del terminal, puede consultarse la lista completa en la siguiente url: http://developer.android.com/guide/topics/resources/providing-resources.html Otro de los recursos creados por defecto cabe destacar los layouts, en nuestro caso sólo tendremos por ahora el llamado a “ ctivity_main.xml”, que contiene la definición de la interfaz gráfica de la pantalla principal de la aplicación. Si hacemos doble clic sobre este fichero Android Studio nos mostrará esta interfaz en su editor gráfico, y como podremos comprobar, en principio contiene los controles que agregamos en el primer ejercicio:

Figura 17: Vista Previa de la aplicación

Pulsando sobre las pestañas inferiores “Design” y “Text” podremos alternar entre el

editor gráfico (tipo arrastrar-y-soltar), mostrado en la imagen anterior, y el editor XML que se muestra en la imagen siguiente:

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

40

Figura 18: Vista código fuente

Durante el curso utilizaremos ambos casos, el más efectivo es vía código XML, ya que a veces el diseñador puede tener complicaciones o demorar dependiendo de la complejidad del diseño de pantalla.

Fichero /app/src/main/AndroidManifest.xml Contiene la definición en XML de muchos de los aspectos principales de la aplicación, como por ejemplo su identificación (nombre, ícono, etc.), sus componentes (pantallas, servicios, etc.), o los permisos necesarios para su ejecución. Veremos más adelante más detalles de este fichero. En el caso de nuestra aplicación creada se tiene el siguiente código en el archivo manifiesto.

Figura 19: Vista código XML archivo manifiesto

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

41

Fichero /app/build.gradle Contiene información necesaria para la compilación del proyecto, por ejemplo la versión del SDK de Android utilizada para compilar, la mínima versión de Android que soportará la aplicación, referencias a las librerías externas utilizadas, etc. Más adelante veremos también más detalles de este fichero. En un proyecto pueden existir varios ficheros build.gradle, para definir determinados parámetros a distintos niveles. Por ejemplo, en nuestro proyecto podemos ver que existe un fichero build.gradle a nivel de proyecto, y otro a nivel de módulo dentro de la carpeta /app. El primero de ellos definirá parámetros globales a todos los módulos del proyecto, y el segundo sólo tendrá efecto para el módulo correspondiente.

Carpeta /app/libs Puede contener las librerías Java externas (ficheros .jar) que utilice nuestra aplicación. Normalmente haremos referencia a dichas librerías en el fichero build.gradle descrito en el punto anterior, de forma que entren en el proceso de compilación de nuestra aplicación. Veremos algún ejemplo más adelante. Carpeta /app/build/ Contiene una serie de elementos de código generados automáticamente al compilar el proyecto. Cada vez que compilamos nuestro proyecto, la maquinaria de compilación de Android genera por nosotros una serie de ficheros fuente Java dirigidos, entre otras muchas al control de los recursos de la aplicación.Importante: que estos ficheros cosas, se generan automáticamente tras cada compilación deldado proyecto es importante que no se modifiquen manualmente bajo ninguna circunstancia.

Figura 20: Vista depuración

A destacar sobre todo el fichero que aparece desplegado en la imagen anterior, llamado “R.java”, donde se define la clase R. Esta clase R contendrá en todo momento una serie de constantes con los identificadores (ID) de todos los recursos de la aplicación incluidos en la carpeta /app/src/main/res/, de forma que podamos acceder fácilmente a estos recursos desde nuestro código a través de dicho dato. Así, por

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

ejemplo,

la

42

constante R.layout.activity_main contendrá

el

ID

del

layout

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

Vista Android El siguiente gráfico presenta un proyecto creado en Android Studio en la vista Android

Figura 21: Vista Android

Donde A: Archivo de manifiesto archivo xml de configuración de aplicaciones. B: Activity, Clase que se asocia con el diseño de pantalla (layout) C: Clase de prueba que permite hacer pruebas unitarias. D: Imágenes (iconos) de diferentes tamaños que se utilizará para cuando la aplicación se ejecute en un celular, Tablet, televisor etc. se cambia de imagen según el tamaño de la pantalla.

E: layout, Pantalla (s) que se tiene en el proyecto, todos los diseños de pantalla están basado en XML. F: Archivo xml con el cual se configura el menú para el diseño de pantalla principal. G: Archivo de recursos que almacena cadenas de arreglo, como puede ser el caso de países, estado civil,almacena sexo, etc.las variables o valores de String.XMl las propiedades de los controles que se utilizan para diseñar la aplicación.

H: Archivos de estilos, permite diseñar estilos que pueden ser utilizados de manera muy similar a una hoja de estilos en una página web.

CARRERAS PROFESIONALES

Figura 22: Vista Archivos de proyecto

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

43

¿Qué es un Gradle? Con el lanzamiento de Android Studio, también apareció un nuevo concepto llamado Gradle que da Excelentes mejoras para hacer que el desarrollo de una aplicación en Android sea más rápido. Gradle es un sistema de construcción avanzado, así como un set de herramientas de construcción avanzada que permite la creación de una lógica de construcción personalizada a través de plugins. Estas son algunas de sus características que hicieron elegir Gradle al equipo de Android: 

Buena estampación de la API permitiendo integración con el IDE.



Lenguaje específico del Dominio (DSL) para describir y manipular la lógica de



Muy flexible. Permite utilizar mejores prácticas pero no fuerza su propia manera



Incorpora gestor de dependencias a través de Maven y/o Ivy.



Los Plugins pueden exponer su propio DSL y su propia API para crear archivos

construcción. de hacer las cosas.

para su uso. 

Construye archivos basados en Groovy y permite la mezcla de elementos declarativos a través de la DSL y la utilización de código para manipular los elementos de la DSL para proporcionar lógica personalizada.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

44

2.6 Componente de una pantalla: Views y ViewGroups Componente de una pantalla: Views y ViewGroups La interfaz de usuario se define en un archivo XML que se almacena en la carpeta res/layout, cada una de las pantallas, se crea por código XML y estándares XML. También es posible diseñar una pantalla usando código Java, sin embargo puede resultar complejo y poco eficiente, por ello el IDE Android Studio facilita el diseño de pantallas, cada uno representando a un "subclase" específica de view. Se pueden crear pantallas de la misma manera que se diseñan páginas HTML. Cada archivo describe un layout (una pantalla) y cada layout a su vez puede contener otros elementos (vistas o controles). Para gestionar la interfaz de usuario, Android introduce los siguientes términos:

View Una view es un objeto cuya clase es android.view.View. Es una estructura de datos cuyas propiedades contienen los datos de la capa, la información específica del área rectangular de la pantalla y permite establecer el layout. Una view tiene: layout, drawing, focus change, scrolling, etc. La clase view es útil como clase base para los widgets, que son unas subclases ya implementadas que dibujan los elementos en la pantalla. Los widgets contienen sus propias medidas, pero puedes usarlas para construir tu interfaz más rápidamente. La lista de widgets que puedes utilizar incluye Text, EditText, InputMethod, MovementMethod, Button, RadioButton, CheckBox, y ScrollView.

Viewgroups Un viewgroup es un objeto de la clase android.view.Viewgroup, como su propio nombre indica, un viewgroup es un objeto especial de view cuya función es contener y controlar la lista de views y de otros viewgroups. Los viewgroups te permiten añadir estructuras a la interfaz y acumular complejos elementos en la pantalla que son diseccionados por una sola entidad. La clase viewgroup es útil como base de la clase layouts, que son subclases implementadas que proveen los tipos más comunes de los layouts de pantalla. Los layouts proporcionan una manera de construir una estructura para una lista de views.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

45

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

Figura 23: Jerarquía visual de Android Fuente: http://www.gitsinformatica.com/android.html

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

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

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

46

FrameLayout Éste es el más simple de todos los layouts de Android. Un FrameLayout coloca todos sus controles hijos alineados con su esquina superior izquierda, de forma que cada control quedará oculto por el control siguiente (a menos que éste último tenga transparencia). Por ello, suele utilizarse para mostrar un único control en su interior, a modo de contenedor (placeholder) sencillo para un sólo elemento sustituible, por ejemplo una imagen. Los componentes incluidos en un FrameLayout podrán establecer sus propiedades Android: layout_width y android:layout_height, que podrán tomar los valores “fill_parent” (para que el control hijo tome l a dimensión de su layout contenedor) o “wrap_content” (para que el control hijo tome la dimensión de su contenido).

Ejemplo:

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

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

47

Esta propiedad nos va a permitir dar a los elementos contenidos en el layout unas dimensiones proporcionales entre ellas. Esto es más difícil de explicar que de comprender con un ejemplo. Si incluimos en un LinearLayout vertical dos cuadros de texto (EditText) y a uno de ellos le establecemos un layout_weight=”1″ y al otro un layout_weight=”2″ conseguiremos como efecto que toda la superficie del layout quede

ocupada por los dos cuadros de texto y que además el segundo sea el doble (relación entre sus propiedades weight) de alto que el primero.

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

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

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I



48

android:stretchColumns. Indicará las columnas que pueden expandir para absorber el espacio libre dejado por las demás columnas a la derecha de la pantalla.



android:shrinkColumns. Indicará las columnas que se pueden contraer para dejar espacio al resto de columnas que se puedan salir por la derecha de la pantalla.



android:collapseColumns. Indicará las columnas de la tabla que se quieren ocultar completamente.

Todas estas propiedades del TableLayout pueden recibir una lista de índices de columnas separados por comas (ejemplo: android:stretchColumns=”1,2,3″) o un

asterisco para indicar que debe aplicar a todas las columnas (ejemplo: android:stretchColumns=”*”).

Otra característica importante es la posibilidad de que una celda determinada pueda ocupar el espacio de varias columnas de la tabla (análogo al atributo colspan de HTML). Esto se indicará mediante la propiedad android:layout_span del componente concreto que deberá tomar dicho espacio. Veamos un ejemplo con varios de estos elementos:

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

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

49

elemento X podremos indicar por ejemplo que debe colocarse debajo del elemento Y, y alineado a la derecha del layout padre. Veamos esto en el ejemplo siguiente:

Se debe asignar un id al LinearLayout, que usaremos posteriormente. También hemos creado un ImageView para mostrar un icono, y un TextView para mostrar el mensaje. El siguiente paso es inflar este layout desde el código: LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

71

R.layout.toast_layout ,(ViewGroup) findViewById(R.id.toastLayout)); Toast toast = new Toast(getApplicationContext()); toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); toast.setDuration(Toast.LENGTH_LONG); toast.setView(layout); toast.show();

Listo, al ejecutar la aplicación tendremos un Toast como este:

Para saber más acerca de los mensajes toast puede visitar: http://developer.android.com/guide/topics/ui/notifiers/toasts.html

Notificaciones en la barra de estado Este tipo de notificaciones muestran un icono en la barra de estado, cuando desplegamos esta barra, veremos el icono acompañado de un texto descriptivo indicando que ha pasado algo (Como que hemos recibido un nuevo mensaje, o un correo electrónico). Los pasos necesarios para crear este tipo de notificaciones son, usar el gestor de notificaciones del sistema (NotificationManager) y posteriormente crear un objeto Notification en el que configuraremos nuestra notificación. Vamos a ver cómo hacerlo. NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //Agregando el icono, texto y momento para lanzar la notificación

int icon = R.drawable.ok;

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

72

CharSequence tickerText = "Notification Bar"; long when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); Context context = getApplicationContext(); CharSequence contentTitle = "Notificación en barra"; CharSequence contentText = "Mensaje corto de la notificación"; //Agregando sonido

notification.defaults |= Notification.DEFAULT_SOUND; //Agregando vibración

notification.defaults |= Notification.DEFAULT_VIBRATE; Intent notificationIntent = new Intent(this, NotificacionesActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); mNotificationManager.notify(HELLO_ID, notification);

El resultado es el siguiente:

Al igual que los Toast, se puede crear un layout personalizado, para más información visita: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

73

Diálogos Los cuadros de dialogo personalizado permiten realizar operaciones como confirmación o ingresar algún dato en una ventana de dialogo existen varios tipos entre ellos tenemos: 

AlertDialog



ProgressDialog



DatePickerDialog



TimePickerDialog

Si necesitamos un Diálogo que no sea uno de los de arriba, podemos extender de la clase Dialog , y crear el nuestro propio. La clase Activity implementa métodos para gestionar los diálogos, son: 



onCreateDialog(int): Encargado de crear el diálogo. onPrepareDialog(int): Llamado justo antes de mostrarlo.



s howD ialog (i nt): Para mostrarlo.



dismissDialog(int):



removeDialog(int): cierra el dialogo eliminándolo por completo.

cierra el diálogo, guardando su estado.

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

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

74

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

Los dos últimos parámetros son para que el diálogo sea indeterminado, y para que se pueda cerrar con la flecha de “atrás” del terminal.

Diseño diálogos La clase principal que se usa para crear diálogos es la clase Dialog, pero no se recomienda usar de manera directa dicha clase. Lo recomendable es usar una de las siguientes subclases: AlertDialog: Un diálogo que puede mostrar un título, un máximo de tres botones, una lista de ítems o un layout personalizado. DatePickerDialog o TimePickerDialog: Un diálogo con una interfaz predefinida que permite al usuario seleccionar una fecha o una hora.

Estas clases definen el estilo y la estructura de tu diálogo, pero la clase DialogFragment será usada como contenedor del diálogo. Dicha clase

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

75

proporciona todos los controles que necesitamos para crear un diálogo y modificar su apariencia. La clase DialogFragment fue introducida en Android 3.0 (API 11), si usas una versión más antigua, podrás usar la clase DialogFragment, para ver más detalles ingresar al siguiente link: http://developer.android.com/tools/support-library/index.html La clase DialogFragment te asegura la correcta gestión de los eventos que puedan ocurrir, como por ejemplo pulsar el botón Atrás o rotar la pantalla. Además, usando dicha clase podemos reusar el interfaz de los diálogos como componente en un interfaz más grande. Ejemplo de AlertDialog (Diseño de pantalla)

El método que se debe agregar en la activity (MainActivity)

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

76

Código del botón de comando

Finalmente al ejecutar la aplicación y dar click en el botón de comando

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

77

Caso: Usando DialogFragment Agregar una clase llamada GenerarVentanaDialogo

El código es el siguiente:

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

78

Posterior a ello agregar un botón de comando en el layout principal

Código del botón de comando Dialogo Fragment

La funcionalidad en ejecución

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

79

MENÚS Los menús en las aplicaciones son algo que encontramos frecuentemente, de hecho, casi todos los terminales Android tienen un botón específico para desplegarlos. Se dispone de distintos tipo de menús: Options Menu El menú típico, que se despliega al pulsar la tecla menú, que se divide en dos grupos: Ic on menú Muestra un menú con iconos, 6 elementos como máximo. E xpanded Menu Se usa cuando hay más de 6 elementos, mostrando un elemento con la palabra ‘Más’.

Context Menu: Menús contextuales desplegados al realizar una pulsación larga en una View. S ubmenús : Menús desplegados al pulsar sobre un elemento de otro menú.

Options Menu Lo más simple y sencillo es definir los menús en XML, colocado en ./res/menu, para este ejemplo se ha definido el siguiente menú, que contiene dos elementos, un Acerca de y un Salir: < ?xml version="1.0" encoding="utf-8"?>

Detallaremos el código creado líneas arriba, comenzamos declarando el menú con la etiqueta, que contendrá todos sus elementos bajo la etiqueta, en este caso, también tenemos un submenú, que se declara igual que el menú principal.

Los atributos de cada elemento son su identificador, el icono a mostrar y el título. Para poder usar este menú, necesitamos inflarlo (Convertir el fichero XML en un objeto java), para hacer esto, hay que llamar a MenuInflater.inflate(), el código siguiente infla el fichero xml anterior en el método callback onCreateOptionsMenu(). @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.ejemplo_menu, menu);

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

80

return true; }

Ahora, tenemos que responder a las acciones del usuario cuando pulse algún elemento de nuestro menú, para ello vamos a sobrescribir el método onOptionsItemSelected() @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.AcercaDe: Toast.makeText( MenusActivity.this ,"Ejemplo Menú" ,Toast.LENGTH_LONG) .show(); return true; case R.id.quit: finish(); return true; default: return super.onOptionsItemSelected(item); } }

Context Menu Los menús contextuales son similares a los menús mostrados al hacer click con el botón derecho de un ratón en un PC, para crearlos, debemos sobrescribir el método onCreateContextMenu() , donde inflaremos el archivo xml. @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.ejemplo_menu, menú); }

Al igual que en los options menú, tenemos que responder a las acciones del usuario: @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.AcercaDe: Toast.makeText( MenusActivity.this ,"Ejemplo Menús App" ,Toast.LENGTH_LONG) .show(); return true; case R.id.Salir: finish(); return true; default:

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

81

return super.onOptionsItemSelected(item); } }

Pero este menú contextual no se va a mostrar, ya que tenemos que asociarlo para que se lance al realizar una pulsación prolongada sobre una view, en este caso un botón: final Button boton = (Button) findViewById(R.id.button1); registerForContextMenu(boton);

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

82

UNIDAD

3 PERSISTENCIA ANDROID

DE

DATOS

EN

LOGRO DE LA UNIDAD DE APRENDIZAJE Al término de la unidad, el alumno elabora aplicaciones que manejan recursos, archivos XML, y manejan bases de datos SQLite. TEMARIO 3.1 Acceso a recursos y archivos 3.1.1 Persistencia de datos: Files 3.1.2 Almacenamiento privado y compartido. 3.1.3 File, FileOutputStream, OutputStreamWriter, PrintWriter 3.1.4 Environment uso de métodos básicos para acceso a recursos. 3.1.5 Grabar y cargar datos de Preferencias de Usuario. 3.1.6 Leer XML Data usando SAX and W3C Parsers.

3.2 Persistencia de Datos usando SQLite 3.2.1 Introducción a SQLite 3.2.2 Gestión de bases de datos con SQLite. Uso del componente SQLiteOpenHelper. 3.2.3 Métodos y funciones comunes, Insert, Update, Delete, RawQuery, SQLExec

3.3 Aplicando el Modelo Vista controlador con SQLite 3.3.1 La clase ContentValues 3.3.2 Introducción a SQLite: cursores y contenedores de valores. 3.3.3 Clases de acceso a datos basados en el modelo vista controlador. 3.3.4 Buenas prácticas de bases de datos en SQLite 3.3.5 Creando un proyecto con acceso a bases de datos

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

83

Acceso a recursos y archivos Android al igual que otros sistemas operativos maneja un sistema de archivos basado en el núcleo del sistema operativo base Linux 2.6, por ello para acceder a los archivos y/o recursos del sistema operativo se debe indicar los permisos que debe tener la aplicación, además de ello se debe especificar el espacio de almacenamiento que se tendrá en la aplicación cuando se crea una máquina virtual en los dispositivos de prueba. A continuación se presenta un ejemplo de configuración de espacio de almacenamiento que se debe realizar al momento de configurar la máquina virtual.

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

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

Memoria Interna Android permite leer y escribir datos en ficheros de la memoria interna a través de los métodos habituales para trabajar con ficheros en Java. También nos permite hacer

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

84

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

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

Base de Datos SQLite Android provee soporte completo para base de datos de tipo SQLite. Se trata de un tipo de base de datos muy pequeña y ligera ya que está basada en ficheros, por eso es ampliamente utilizada en sistemas móviles. Para ayudarnos a gestionar la base de datos Android recomienda hacer uso de la clase de ayuda que nos proporciona SQLiteOpenHelper. En las clases de persistencia hicimos un recorrido completo sobre cómo usar una base de datos en Android. Desde los primeros pasos, creando las estructuras de datos y tablas, hasta la gestión de las mismas creando una clase que herede de SQLiteOpenHelper e implementando los métodos para gestionar nuestra base de datos: leyendo, guardando, actualizando y borrando registros en las tablas. Además de todo esto estudiamos buenas prácticas a la hora de trabajar con base de datos y tuvimos una aproximación a otra técnica para gestionarlas: los ORM. Esta técnica realiza un mapeo de las entidades relacionales de la base de datos a objetos.

Proveedor de contenido o Content Provider Un proveedor de contenidos permite compartir y tener acceso a información de otras aplicaciones. Se accede a ellos a través de sus Content URIs, que no son más que cadenas de texto al estilo de las direcciones web. Se implementan heredando de ContentProvider pero se accede a ellos a través de objetos ContentResolver. Su utilización es similar a la de una base de datos pero no tienen por qué brindar acceso a una base de datos. Entre los que probamos estaban el Contact Provider, Calendar Provider y Media Provider, que nos proporcionan acceso a información de contactos, calendario y multimedia respectivamente.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

85

Entre las clases más conocidas para manejar archivos tenemos las siguientes clases: • Para almacenar información en archivos Android presenta varias opciones

entre ellos tenemos: 

Shared Preferences Almacenar datos primitivos privadas en pares clave-valor



Internal Storage Guarde los datos privados en la memoria del dispositivo.



External Storage Guarde los datos públicos sobre el almacenamiento externo compartido.



SQLite Databases Guarde los datos estructurados en una base de datos privada. 

Network Connection Almacenar datos en la web con su propio servidor de red,



Content Provider Repositorio compartido globalmente compartida por todas las aplicaciones.

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

Ejemplo de creación de un archivo llamado prueba_int.txt en la memoria interna de modo privado.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

86

Siempre que se genera el archivo de modo privado se almacena en la siguiente ubicación: /data/data/nombre_package/files/nombre_fichero Para el ejemplo mostrado se almacena en: /data/data/ solucionesmoviles.archivos/files/prueba_int.txt

Shared Preferences 

getPreferences( ) Desde dentro de su actividad, a las preferencias específicas de la actividad de acceso



getSharedPreferences( ) Desde dentro de su actividad para acceder a las preferencias a nivel de aplicación



getDefaultSharedPreferences( ) En PreferencesManager, para obtener las preferencias compartidas que funcionan en concierto con el marco de la preferencia general de Android

Todos los métodos de preferencias getXXX devolver un objeto Preferencia cuyo contenido puede ser manipulado por un editor que permite putXxx... y... getXXX comandos para colocar los datos de entrada y salida del contenedor Preferencia

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

87

Ejemplo: Diseño de pantalla

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

88

Código fuente de la aplicación

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

89

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

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

90

Leer un archivo de disco

Para el siguiente ejemplo vamos a continuar con nuestro proyecto inicial creado, para ello vamos a agregar un botón nuevo que tenga de título grabar archivo y de nombre tendrá BtnGrabarArchivo

El código de la aplicación será la siguiente:

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

91

Environment Representa las variables del entorno, tiene propiedades comunes para toda la aplicación Tiene propiedades comunes que utilizaremos para tener las rutas hacia a la carpeta de nuestro celular, carpeta de imágenes, recursos, carpeta de SD externo o la carpeta Root del sistema operativo entre otros. El siguiente grafico muestra los atributos más comunes de esta clase.

Public Methods static File static File

static File

static String static String static boolean

CIBERTEC

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

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

92

Adaptadores de datos (Adapters) Un adaptador es una clase especial que hace de intermediario entre un contenedor como un listview u otro para cargar información en una plantilla por ejemplo un adaptador podemos utilizarlo para poblar un listview como se puede mostrar en el siguiente grafico donde se carga la lista de docentes registrados en una base de datos

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

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

93

Grafico que muestra la funcionalidad del spinner con datos cargados Otro Ejemplo de un adaptador es aquel que se usa para cargar datos personalizados en un listview haciendo uso de un layout personalizado

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

Para profundizar este tema lo veremos después de ver SQLite que se verá en el siguiente tema.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

94

Introducción a SQLite SQLitees un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente pequeña (~275 kiB)2 biblioteca escrita en C. SQLitees un proyecto de dominio público1 creado por D. Richard Hipp. Para más detalles puedes ingresar a la página oficial de SQLitewww.sqlite.org Características principales 

Base de datos relacional para sistemas embebidos



Ocupa únicamente unos 225KB



No se trata de un proceso, sino de una librería que se añade dinámicamente a las aplicaciones que quieren utilizar SQLite



Implementa la mayor parte del estándar SQL-92, pero con restricciones



Soporte para ALTER_TABLE limitado



Las columnas no tienen tipos

Existen



un

pluginde

Firefox

para

visualizar

bases

de

datos

SQLite(recomendado)  

Se utiliza internamente en Firefox y Thunderbird Lo utilizan la mayoría de las plataformas móviles (iOS, Symbian, Android,



BlackBerry OS, webOS) Existen múltiples formas de atacar SQLite



Nosotros veremos una en la que separamos el acceso a la base de datos del objeto Java que representa cada fila de la base de datos



No existen las claves ajenas o foráneas, y en el caso de necesitarlas, debemos forzarlas “a mano”



La base de datos está protegida dentro de la memoria interna del dispositivo



Mientras trabajamos con el emulador (donde tenemos acceso root), podemos extraer (con DDMS) el archivo de la base de datos y visualizarlo

Cuando se crea un archivo de bases de datos se almacena de manera muy similar que los archivos en disco: 

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

Donde la carpeta principal es la carpeta de datos. Packake es el nombre del paquete de la aplicación creada. Ejemplo de crear un archivo de bases de datos String StrRutaBaseDatos="/data/data/sise.app.BaseDatos/Contacto.db"; SQLiteDatabaseodb=SQLiteDatabase.openDatabase(StrRutaBaseDatos, null,SQLiteDatabase.CREATE_IF_NECESSARY);

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

95

Tipos de datos Integer Valor entero, almacena1, 2, 3, 4, 6, o 8 bytes depende de la magnitud del campo. Real Valoresnúmericosdecimales8-byte punto flotante. Text Se almacena cadena en código (UTF-8, UTF-16BE or UTF-16LE). Para más detalles y otros tipos de datos puedes ir al portal oficional de tipos de datos: http://www.sqlite.org/datatype3.html

Métodos principales Entre los métodos principales tenemos los siguientes

execSQL Ejecuta una sentencia SQL de creación de datos create, drop, etc. Ejemplo:

Otros Ejemplos:

Importante! SQLITE usa un campo ivisiblellamadoROWID que identifica como único registro la fila. En el ejemplo se usa Código como un campo similar

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

96

RawQuery(SentenciaSQL, ParametrosArreglo) Esta función permite recuperar un cursor (tabla) con el fin de cargar los datos en un adaptador para presentarlo en un contenedor como un listview. Ejemplo: Cursor c1 = db.rawQuery("select count(*) as Total from tblAMIGO",null); Agregando parámetros a Rwquery String mySQL= "select count(*) as Total " + " fromContacto" + " whereCodigo> ?" + " and Nombre= ?"; String[] args= {"1", «Juan"}; Cursor c1 = db.rawQuery(mySQL, args); Ejemplo de rwaquery:

Ejemplo Cargando Datos en una clase

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

97

La clase ContentValues Esta clase permite almacenar variables de tipo diccionario es decir un nombre de variable y un valor de la variable, se utiliza para pasar los datos a una base de datos y ejecutar las sentencias de mantenimiento de datos en una base de datos de SQLite

Ejemplo: Clase especial de tipo campo valor de valores únicos controlados por índice útil para hacer uso de insertar y/o actualizar los registros en la base de datos. Sintaxis ContentValues oRegistro=new ContentValues();

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

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

Ejemplo:

Metodo de SQLite update Permite actualizar datos de una tabla, Ejecuta la sentencia SQL update para actualizar registros de la base de datos Sintaxis update(table, values, whereClause, whereArgs) Dónde: Table.- Nombre de tabla Values.- Lista de campos con valores a insertar

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

98

whereClause.- Parámetros para actualizar e registro en modificación whereArgs.- Valores par los campos de parámetros

Ejemplo:

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

Sintaxis delete(table, whereClause, whereArgs) Dónde: Table.- Nombre de tabla whereClause.- Parámetros para actualizar e registro en modificación whereArgs.- Valores par los campos de parámetros Ejemplo:

La clase Cursor Representa un objeto tabla en la aplicación Sintaxis Cursor oTabla=oDb.rawQuery("select * from Alumno", null); Ejemplo: Métodos getColumnCount().- Permite saber el número de columnas que tiene la(s) tablas consultada(s). close().- Permite cerrar el cursor que se encuentra abierto. getColumnName(columnIndex).- permite leer el nombre de una columna a partir del índice getCount().- permite leer el número de registros existentes en el cursor. getDouble(columnIndex).- permite leer el valor de un campo número con decimales de tipo doublé.

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

99

getString(columnIndex).- permite leer el valor de un campo de tipo cadena varchar, text nvarchar getInt(columnIndex).- Permite leer el valor de un campo de tipo entero getFloat(columnIndex).- Permite leer el valor de un campo de tipo número con decimales float. Modelo Vista Controlador Para aquellos que no estén familiarizados con el MVC, éste es un patrón que divide la aplicación en tres niveles distintos, interfaz gráfica (Vista), tratamiento de datos (Modelo) lógica de negocio (Controlador). Esto se hace para permitir una mayor portabilidad de una aplicación, e incluso facilitar su mantenimiento. Por ejemplo si deseamos modificar la interfaz de la aplicación es decir solo pantallas sólo prestaremos atención a la capa de la Vista, y si queremos modificar de sistema de almacenamiento de datos sólo tendremos que prestar atención a la capa del Modelo, y si lo que queremos es portar la aplicación a otra plataforma lo que haremos será modificar la capa del Controlador, al igual que si queremos modificar el código para optimizar rendimiento.

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

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

100

Interfaz Grafica (Vista(

Activity Controlador

Aplication Controlador

SQLite Modelo

Paso 1: Sobrescribir la aplicación Debemos crear una nueva clase. Le damos al botón derecho sobre el Package que tenemos en la estructura de nuestro proyecto, New->Class y le damos un nombre a nuestra nueva clase que haga referencia a su función. Es una buena práctica crear diferentes packages para los distintos tipos de clases que vayamos a crear, por ejemplo un package para las Activities, otro package.modelo para las clases que representen los datos que necesitemos manejar (por ejemplo una clase Auto), etc. Una vez que tenemos la clase creada, le diremos que extienda de Application:

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

101

Paso 2: Modificar el archivo de manifiesto Se debe realizar este paso para configurar que nuestra nueva clase será la que llama a todos los activitys a partir de ahora Antes estaba así

Debe quedar como se muestra

Paso 3: Llamar a nuestra aplicación Para hacer llamadas a los métodos que necesitemos de la clase Application que hemos definido. Para poder hacerlo las Activities ya cuentan con un método que llama a la claseApplication, que es getApplication(), que nos va a devolver precisamente la

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

102

clase Application. Sin embargo para poder hacer uso de los métodos que definamos en nuestra clase vamos a tener que hacer una conversión al tipo de la clase que nosotros hemos definido como Application, y a partir de ahí podremos hacer la llamada a los métodos que contenga la clase. Para que quede más claro un ejemplo sería: ((MyApplication)getApplication()).metodoDeNuestraClaseApplication(); // Llamada desde la Activity al método de Application ((MyApplication)getApplication()).getNombre() // Código del método en MyApplication String getNombre(int idContacto) { } return modelo.getNombre(idContacto);

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

103

UNIDAD

4 NETWORKING EN ANDROID LOGRO DE LA UNIDAD DE APRENDIZAJE Al término de la unidad, el alumno elabora aplicaciones que se conectan a la web utilizando http y consumen servicios web. TEMARIO 4.1 Consumiendo servicios web 4.1.1 SOAP (Simple Object Access Protocol) Mensajes SOAP, Estructura 4.1.2 Uso del protocolo HTTP para consumir web services. 4.1.3 Obtención de data de archivos XML. 4.1.4 Crear y consumir web services.

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

104

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

Un Servicio Web es un componente software que puede ser registrado, descubierto e invocado mediante protocolos estándares de Internet. 

Permiten exponer y hacer disponibles funcionalidades (servicios) de los sistemas informáticos de las organizaciones mediante tecnologías y protocolos WEB estándar.



Cada Servicio Web se responsabilidad de realizar un conjunto de funciones



Los Servicios Web actúan como componentes independientes que se pueden

concretas y bien definidas.

integrar para formar sistemas distribuidos complejos.

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

CARRERAS PROFESIONALES

CIBERTEC

DESARROLLO DE APLICACIONES MÓVILES I

105

Según el ejemplo del gráfico, un usuario (que juega el papel de cliente dentro de los Servicios Web), a través de una aplicación, solicita información sobre un viaje que desea realizar haciendo una petición a una agencia de viajes que ofrece sus servicios a través de Internet. La agencia de viajes ofrecerá a su cliente (usuario) la información requerida. Para proporcionar al cliente la información que necesita, esta agencia de viajes solicita a su vez información a otros recursos (otros Servicios Web) en relación con el hotel y la compañía aérea. La agencia de viajes obtendrá información de estos recursos, lo que la convierte a su vez en cliente de esos otros Servicios Web que le van a proporcionar la información solicitada sobre el hotel y la línea aérea. Por último, el usuario realizará el pago del viaje a través de la agencia de viajes que servirá de intermediario entre el usuario y el servicio Web que gestionará el pago. En todo este proceso intervienen una serie de tecnologías que hacen posible esta circulación de información. Por un lado, estaría SOAP (Protocolo Simple de Acceso a Objetos). Se trata de un protocolo basado en XML, que permite la interacción entre varios dispositivos y que tiene la capacidad de transmitir información compleja. Los datos pueden ser transmitidos a través de HTTP, SMTP, etc. SOAP especifica el formato de los mensajes. El mensaje SOAP está compuesto por un envelope (sobre), cuya estructura está formada por los siguientes elementos: header (cabecera) y body (cuerpo).

CIBERTEC

CARRERA DE ELECTRICIDAD

DESARROLLO DE APLICACIONES MÓVILES I

106

Figura: Estructura de los mensajes Fuente: http://www.w3c.es/Divulgacion/GuiasBreves/ServiciosWeb

Para optimizar el rendimiento de las aplicaciones basadas en Servicios Web, se han desarrollado tecnologías complementarias a SOAP, que agilizan el envío de los mensajes (MTOM) y los recursos que se transmiten en esos mensajes (SOAP-RRSHB). Por otro lado, WSDL (Lenguaje de Descripción de Servicios Web), permite que un servicio y un cliente establezcan un acuerdo en lo que se refiere a los detalles de transporte de mensajes y su contenido, a través de un documento procesable por dispositivos. WSDL representa una especie de contrato entre el proveedor y el que solicita. WSDL especifica la sintaxis y los mecanismos de intercambio de mensajes. Durante la evolución de las necesidades de las aplicaciones basadas en Servicios Web de las grandes organizaciones, se han desarrollado mecanismos que permiten enriquecer las descripciones de las operaciones que realizan sus servicios mediante anotaciones semánticas y con directivas que definen el comportamiento. Esto permitiría encontrar los Servicios Web que mejor se adapten a los objetivos deseados. Además, ante la complejidad de los procesos de las grandes aplicaciones empresariales, existe una tecnología que permite una de estos mediante la composición de varios Servicios Webdefinición individuales, lo queprocesos se conoce como coreografía. Ejemplos A continuación se muestra el código que se utilizaría para solicitar un viaje: xmlns:env="http://www.w3.org/2003/05/soap
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF