libro VII desarrollo de aplicaciones conjunto de libros uptDescripción completa
Xyz DamDescripción completa
Descripción completa
Descripción completa
desarrollo de aplicacionesDescripción completa
vba
Descripción completa
Descripción: Desarrollo de Aplicaciones Móviles Nativas
examen
aplicaciones webDescripción completa
Este documento es un trabajo sobre Android realizado por tres alumnos para la asignatura de Programación Orientada a Objetos.
Descripción: Desarrollo de Aplicaciones Móviles Hibridas haciendo uso de Visual Studio & PhoneGap
Descripción: Desarrollo de Aplicaciones Móviles Web
Descripción completa
DESARROLLO DE APLICACIONES MÓVILES I
DESARROLLO DE APLICACIONES MÓVILES I
CARRERAS PROFESIONALES
2
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
CARRERAS PROFESIONALES
2
CIBERTEC
DESARROLLO DESARROLLO DE APLICACIONES APLICACIONES MÓVILES I
3
Índice Presentación Red de contenidos UNIDAD 1. ANDROID: INTRODUCCIÓN A LA PLATAFORMA
05 07 09
1.1 Plataforma Android Android 1.1.1 Introducción Int roducción a Android, versiones 1.1.2 Características Característic as y Arquitectura Arquit ectura Android. 1.1.3 Máquina virtual Dalvik Virtual Machine y ART 1.1.4 Open Handset Handset Alliance 1.1.5 Creación de emuladores
09 11 13 15 17 17
1.2 IDE Android Android Studio 1.2.1 Android Studio características característic as y funciones. 1.2.2 Creando la primera aplicación Hola Mundo. 1.2.3 Controles Controles básicos Button, EditText, 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: ANDROID: COMPONENTES
32
2.1 Fundamentos de aplicaciones Android 2.1.1 Arquitectura Arquit ectura de la plataforma Android. 2.1.2 Estructura de un proyecto proyecto Android. 2.1.3 Que es un Gradle
34 35 35 43
2.2 Componente de una pantalla: Views y ViewGroups 2.2.1 Componente Component e de una pantalla: Views y ViewGroups 2.2.2 Distribución Distrib ución de los ViewGroups: LinearLayout, AbsoluteLayout, TableLayout, Relative Layout, FrameLayout y ScrollView. ScrollVie w. 2.2.3 Widgets 2.2.4 Controles básicos básic os 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 Funcionalidad y uso de Intents 2.3.5 Resolviendo Resolviend o problemas de pantalla.
56 56 58 60 61 63
2.4 Orientación del dispositivo 2.4.1 Adaptación Adapt ació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 Dialogos y notificaciones 2.5.1 Notificaciones Notificaci ones Toast 2.5.2 Notificaciones Notificaci ones en la barra de estado. 2.5.3 Dialogos personalizados basados en clases.
69 70 71 73
UNIDAD 3. PERSISTENCIA DE DATOS EN ANDROID ANDROID 3.1 Acceso a recursos y archivos 3.1.1 Tipos de recursos en Android 3.1.2 Almacenamiento Almacenam iento privado y compartido. compartid o. 3.1.3 Grabar y cargar datos de Preferencias de Usuario. 3.1.4 File, FileOutputStream, FileOutp utStream, OutputStreamWriter, OutputStreamW riter, PrintWriter PrintWrit er 3.1.5 Environment uso de métodos básicos para acceso a recursos. recu rsos. 3.2 Persistencia de Datos usando usando SQLite 3.2.1 Introducción Int roducció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 104 4.1.2 Uso del protocolo HTTP para consumir web services. 106 4.1.3 Obtención de data de archivos XML. 108 4.1.4 Clases de acceso a web services 115 4.1.5 Thead Manejando hilos 117
UNIDAD 5. Servicios basados en localización
5.1 Manejo de fragments 5.1.1 Que es Fragment 5.1.2 Creating a Fragment, administrar Fragments,Flagment class 5.1.3 Eventos fragment, Aplicación fragment
129 132 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.
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. Bibliografia del curso
CARRERAS PROFESIONALES
156 157 158 159
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 disco, bases de datos sqlite y en la nube vía web services, soap, rest. Se concluye con la publicación de aplicaciones haciendo uso 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 Introducción a Android, versiones 1.3.2 Características y Arquitectura Android. 1.3.3 Máquina virtual Dalvik Virtual Machine y ART 1.3.4 Open Handset Alliance 1.3.5 Creación de emuladores 1.4 IDE Android Studio 1.4.1 Android Studio características y funciones. 1.4.2 Creando la primera aplicación Hola Mundo. 1.4.3 Controles básicos Button, EditText, TextView 1.4.4 Depuración de código en Android.
ACTIVIDADES PROPUESTAS
CIBERTEC
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 adnroid y recococen la diferencia entre un ativity, layout y las vistas básicas.
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 anto, 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 androi como plataforma libre para dispositivos móviles y otros. La desición de estudia el desarrollo de aplicaciones para esta platadorma es que tiene el mayor potencial del mercado ya que no solo esta 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 esta basado en capas que permiten administrar las funciones básicas de cualquier equipo movil, 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 tu cuenta de gmail google para cualquier instalación de aplicación se debe realizar por medio de google play. Debajo de ello se encuentra las librerías nativas para acceso a bases de datos, administración de recursos, drivers de audio, administrador de sistema, webkit naegador web nativo, etc. Por el lado de la maquina virtual se encuentra Virtual Dalvik y Art que es una de las mejoras que fueron creados en octubre del año 2014, después de ello se tiene el kernel del sistema operativo tal como se puede apreciar en el grafico 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 androi es un programa que posee una o varias funciones específicas que lo hacen útil para un motivo. Son equivalentes a cualquier programa echo para PC con la diferencia que tiene funcionalidades desarrolados para el celular uno de los limitantes es el tamaño de pantalla y teclado aunque las últimas versiones de sistemas operativos tiene soporte a 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 mas de 700 mil aplicaciones que se pueden descargar muchos de ellos gratuitos
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 androi 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 por una 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 o
iPhone OS
RIM
Blackberry Microsoft o Windows Mobile 6.5 Phone 7 Series Symbian Foundation o Symbian OS Palm o
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
14
WebOS
o
Cupcake: Android Version 1.5 Características: Widgets, teclado QWERTY virtual, copy & paste, captura de vídeos y poder subirlos a Youtube directamente. Donut: Android Version 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 Version 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 Version 2.2 Características: Incluye hostpot Wifi, mejora de la memoria, más veloz, Microsoft Exchange y video-llamada. Ginger Bread: Android Version 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 Version 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 netbooks), 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 plataform 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 Vrtual 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://sa ntiagosolisvidal.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
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
16
bytecode. Sin 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 maquina 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 " OK 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 y 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.
1.1.4 Open Handset Alliance Es una alianza de empresas de manera comercial para patrocionar el desarrollo de Android hay 84 compañias que patrocinan el producto en beneficio de continuar mejorando la plataforma Android. Al gunos 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 maquinas virtuales. Para ello se debe hacer clic en el administrador de maquinas 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
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
19
Figura 9: Intelligent code editor 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 , compatibilidad de versiones , y otros problemas
Capacidades ProGuard y aplicación de firma
El soporte integrado para la plataforma de nube Google , por lo que es fácil de 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, estadísticas de uso.
Renderización en tiempo real
Soporte para programar aplicaciones para Android Wear
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.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
20
En entorno de desarrollo esta 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 grafico.
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
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
21
Seleccionar el API y el dispositivo donde se ejecutará de la aplicación: Seleccionar la plantila para las pantallas inicialmente vamos a seleccionar un diseño en blanco.
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: titúlo de la pantalla el que aparece cuando se ejecuta la aplicación Menu Resource Name: el nombre de archivo xml de menú asociado al layout.
Dar click en finalizar para completar el asistente.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
22
El proyecto que se crea
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 rectangolo es una sección de apoyo de diseño de la aplicación.
Donde: A: Cuadro de controles B: Diseño de pantalla (Layout) C: Vista esquema de controles D: Vista propiedades de controles.
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
23
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 controles y sus propiedades para completar el desarrollo de nuestra primera aplicación.
1.2.3 Controles básicos Button, EditText, TextView Los controles más básicos que tenemos en Android son sin duda Button, EditText 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 se muestra 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 vistar la página oficial de Android ingresando http://developer.android.com/reference/android/widget/TextView.html Definir el control por código XML
EditText.- es un control que permite ingresar datos esta sujeto a aplicarle estilos (Patrones) para mejorar el uso del mismo. Para más detalles de los atributos y/o métodos puedes vistar la página oficial de Android ingresando 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
Button.- 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 vistar la página oficial de Android ingresando 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 y id es ek 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:
android:id="@+id/edtcontrasenia" /> 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 seguimeinto al código fuente y verificar algún error no esperado, limpiar el programa, etc. Según Wikipedia la definición de deúració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 de bichos (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 esta basado en el nucleo 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 movil 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 movil android. 5. Android estudio es la herramientas más sofisticada para crear aplicaciones basados en Android. 6. La depuración busca ubicar errors en el códido de nuestra aplicación y es una facilidad del IDE con el fin de corregir errores de código o limpíar 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 Arquitectura de la plataforma Android. 2.1.2 Estructura de un proyecto Android. Archivos básicos, recursos, iconos 2.1.3 Ciclo de vida de un Activity 2.1.4 Componente Activity: definición y características. 2.1.5 Uso de recursos, acceso a String.XML. 2.1.6 Configuración del archivo de manifiesto 2.2 Componente de una pantalla: Views y ViewGroups 2.2.1 Componente de una pantalla: Views y ViewGroups 2.2.2 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 Uso de Intents para gestionar Actividades. 2.3.2 Resolviendo colisión de Intent Filter. 2.3.3 Invocación a otras aplicaciones usando Intents. 2.3.4 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 Dialogos y notificaciones 2.5.1 Dialog Window y Progress Dialog. 2.5.2 Dialogos personalizados basados en clases. 2.5.3 Toast, formatos, uso de estilos. 2.5.4 Menus, fuentes
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
33
ACTIVIDADES PROPUESTAS
CIBERTEC
Los alumnos identifican el 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.
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 considero uno de los años en el que la plataforma Android se consagro en el mercado como uno de los sistemas operativos mas 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
Figura 11: Estructura de un proyecto en android CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
36
superior izquierda, y cambiaremos la vista de proyecto a “ Project”.
Figura 12: Vista proyecto
Al cambiar la vista, los mismos archivos se presentan de otra manera como se obser va 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 proyecto es ú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:
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 “values -w820dp” se
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
39
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 disposi tivos cuya versión de Android sea la 3.0 (API 11) o superior. Al igual que los sufijos “-w” y “–v” existen otros muchos para referirse a otras 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 “activity_main.xml ”, que contienen 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 tan los controles que agregamos en el primer ejercicio
Figura 17: Vista Previa de la aplicació n
Pulsando sobre las pestañas inf eriores “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 f uente
Durante el curso ustilizaremos 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 de 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, icono, …), sus componentes (pantallas, servicios, …), 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 javas externas (ficheros .jar ) que utilice nuestra aplicación. Normalmente haremos referencia a dichas librería 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 cosas, al control de los recursos de la aplicación.Importante: dado que estos ficheros se generan automáticamente tras cada compilación del proyecto es importante que no se modifiquen manualmente bajo ninguna circunstancia.
Figura 20: Vista depuración
A destacar sobre todo el fichero que aparece des plegado en la imagen anterior, llam ado “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 ejemplo, la
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
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 grafico 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 segpun 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, sexo, ect. String.XMl almacena las variables o valores de 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
¿Que 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 construcción
Muy flexible. Permite utilizar mejores prácticas pero no fuerza su propia manera de hacer las cosas.
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 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 las siguientes terminos:
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 function 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 imágen 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í 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 tom ar los valores “fill_parent” (para que el control hijo tome la 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 uno tras otro 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 dificil 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
absorver 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 palntalla.
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:
En el ejemplo, el botón BtnAceptar se colocará debajo del cuadro de texto TxtNombre (android:layout_below=”@id/TxtNombre”) y alineado a la derecha del layout padre (android:layout_alignParentRight=”true”), además de dejar un margen a su izquierda de 10 pixeles (android:layout_marginLeft=”10px”).
Al igual que estas tres propiedades, en un RelativeLayout tendremos un sinfín de propiedades para colocar cada control justo donde queramos. Veamos las principales [creo que sus propios nombres explican perfectamente la función de cada una]: Posición relativa a otro control: android:layout_above.
android:layout_below.
android:layout_toLeftOf.
android:layout_toRightOf.
android:layout_alignLeft.
android:layout_alignRight.
android:layout_alignTop.
android:layout_alignBottom.
android:layout_alignBaseline.
Posición relativa al layout padre:
android:layout_alignParentLeft.
android:layout_alignParentRight.
android:layout_alignParentTop.
android:layout_alignParentBottom.
android:layout_centerHorizontal.
android:layout_centerVertical.
android:layout_centerInParent.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
50
Opciones de margen (también disponibles para el resto de layouts):
android:layout_margin.
android:layout_marginBottom.
android:layout_marginTop.
android:layout_marginLeft.
android:layout_marginRight.
Opciones de espaciado o padding (también disponibles para el resto de layouts):
android:padding.
android:paddingBottom.
android:paddingTop.
android:paddingLeft. android:paddingRigh t.
Otros elementos comunes que extienden a ViewGroup, como por ejemplo las vistas de tipo lista (ListView), de tipo grid (GridView), y en pestañas (TabHost/TabWidget).
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
51
Widgets Un widget es el conjunto de componentes visuales que permite crear las aplicaciones en Android. Entre dichos compoenentes tenemos Button, TextView, EditText. El package donde se importa todos los controles es android.widget.
Figura 24: compoentes widget en los celulares Fuente: http://bitelia.com/2014/01/widgets-android
Botones (Button) El SDK de Android nos proporciona tres tipos de botones: el Clásico (Button), el de tipo on/off (ToggleButton), y el que puede contener una imagen (ImageButton). En la imagen siguiente vemos el aspecto por defecto de estos tres controles.
Figura 25: Vista cuadro de herramientas Widgets
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
52
Propiedades android:id Esto ya lo vimos en el tema anterior, esta propiedad es el ID del control, con el que podremos identificarlo de forma única más tarde en nuestro código. Vemos que el identificador lo escribimos precedido de “@+id/”. Esto tendrá com o
efecto que al compilarse el proyecto se genere automáticamente una nueva constante en la clase R para dicho control.
android:text. Texto del control. En Android, el texto de un control se puede especificar directamente, o bien utilizar alguna de las cadenas de texto definidas en los recursos del proyecto (fichero strings.xml), en cuyo caso indicaremos su identificador precedido del prefijo “@string/”.
android:layout_height y android:layout_width Dimensiones del control con respecto al layout que lo contiene. Esta propiedad tomará
normalmente
los
valores
“wrap_content”
para
indicar
que
las
dimensiones del control se ajustarán al contenido del mismo, o bien “fill_parent”
para indicar que el ancho o el alto del control se ajustarán al ancho o alto del layout contenedor respectivamente.
Unidades de medida para esta propiedad px. Píxeles, corresponde a píxeles reales en la pantalla. en.
Cm - basado en el tamaño físico de la pantalla. mm. Milímetros - en función del tamaño físico de la pantalla. pt. Puntos - 1/72 de una pulgada en función del tamaño físico de la pantalla. sp. Escala de píxeles independientes - esto es como la unidad de DP, pero también es escalado por la preferencia del usuario tamaño de la fuente. Se recomienda utilizar esta unidad al especificar tamaños de fuente, por lo que se ajusta tanto para la densidad de pantalla y preferencias del usuario.
android:layout_margin
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
53
Este parametro indica el espacio entre el control (en este caso botón) y su padre en este caso el Layout.
android:padding Este parámetro indica el espacio entre Texto o Imágenes que pongamos dentro del control (en este caso el botón) y el propio control.
android:gravity Esta es la gravedad del control, la verdad es que es una forma original de poner la alineación, si entre las comillas de este parámetro pulsamos la famosa combinación de teclas Control+Espacio, eclipse nos dará todos los parámetros que podemos usar aquí, si ponemos solo "center" se centrara su contenido tanto vertical como horizontal.
android:drawable Con este parámetro pondremos una imagen al botón, que no es lo mismo que el ImageButton, que todo el botón es en si una imagen, con esto ponemos una especie de icono dentro del botón, por ejemplo si queremos poner el tipoco Play, Stop las flechas de avance o retroceso... existen variantes de este parámetro para poner la imagen a la derecha o izquierda, arriba o abajo.
android:Text Con este parametro definimos el texto del botón, podemos usar un recurso R usando "@String/texto o directamente un texto entre comillas.
android:TextSize Indicamos un tamaño, si no ponemos esto, se selecciona un tamaño por defecto standard, si te parece grando o pequeño ve probando usando la unidad dp que vimos en el tema anterior.
android:backgroud Con este parámetro definimos el color de fondo del Boton.
android:OnClick
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
54
Esta es una propiedad que nos ayuda con el Listener, al final de la lección hablo de esto, que es la parte Java del Boton, esto nos facilita la vida, lo malo es que solo se puede utilizar a partir de la API 6 de Android, no creo que vallas a hacer un proyecto con esta API yo uso esta opción, es menos lioso. Ejemplo de definición de botón de comando
Ejemplo de botón con estilo
Evento del botón de comando
EditText EditText (caja de edición de texto) es un cuadro de texto para ingresar datos en Android este controlt tiene patrones definidos para permitir el ingreso de información correcta según el tipo de ingreso definido.
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
55
android:hint. Con este parámetro pondremos un texto por defecto mientras el campo este vacío, es decir, el lo que ve el usuario antes de que el escriba nada.
android:inputType. Con este parámetro indicamos el tipo de teclado que quieres que aparezca cuando pulsas sobre el campo, si por ejemplo solo vamos a introducir números, se puede indicar que aparezca un teclado numérico. Como siempre cuando te coloques entre las comillas pulsa Control+Espacio para ver las opciones que puedes poner para este parámetro. Control Usuario EditText
Ejemplo de acceso a las propiedade por código
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
56
Componente Activity e Intent: definición y características Actitivity (Actividad) Un Activity (actividad) es una clase que permite manejar los eventos de cualquier aplicación desarrollada en Android, esta diseñada para controlar toda la funcionalidad de cualquier aplicación, Podemos decir que todas las pantallas de una aplicación son una “activity”. Más adelante vamos a ver que existen algunas variaciones, por ejemplo, que si una aplicación tiene cinco pantallas, tiene 5 “Actividades” o activities.
Las activities están conformadas por dos partes: la parte lógica y la parte gráfica. La parte lógica es una archivo .java que es la clase que se crea para poder manipular, interactuar y colocar el código de esa actividad. Toda actividad debe tener asociado una pantalla La parte gráfica es un XML que tiene todos los elementos que estamos viendo de una pantalla declarados con etiquetas parecidas a las del HTML, es decir, que el diseño de una aplicación en Android se hace similar a una página web; XML es un primo de HTML. Resumiendo, una actividad está conformada por la parte lógica (un archivo Java) y la parte gráfica (un archivo XML). Profundizando más en el tema, ya sabemos que tenemos un archivo .java, esto quiere decir que tenemos una clase principal, al ser una actividad extiende de la clase Activity (por eso el nombre) que nos proporciona Android para crear actividades con sus métodos asignados. Un ejemplo de nuestro activity "MaActivity.java" podemos apreciar el código:
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
57
Primero veremos que existen dos secciones de código: El primero es el paquete de nuestra aplicación Y posterior a ello las importaciones
La actividad de se extiende desde la clase base Activity
El método onCreate es el método que se ejecuta primero al iniciar cualquier activity en este caso este método es similar el método main y se enlaza con el layout (diseño de pantalla) mediante el Código setContenView( R.layout.activity_Main); Para ellazar controle se debe agregar código después de esta línea. Que es la que hace el trabajo de enlazar la parte lógica con la parte gráfica. El archivo XML que va a mostrarse cuando se mande a llamar la clase "MainActivity" es el archivo XML llamado "activity_main". Para cerrar la explicación: si yo creo una actividad nueva y la llamo "VentanaPrinicipal", debo hacer que herede de activity si quiero que funcione como actividad y para decirle que el archivo XML que va a mostrar sea el "ventanaprincipal.xml" o "pepito.xml". La línea que dice "SetContentView" debe llevar dentro algo parecido a esto: "setContentView"(R.layout.ventanaprincipal).
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
58
Más adelante vamos a ver como agregar una actividad nueva, ya que además de esto necesitamos hacer otras cosas en el proyecto. Espero por ahora que quede claro el término de Activity que vamos a estar utilizando.
Ciclo de vida de la clase Activity La base de una aplicación en Android Android son las Activity-s, en el sistema se ejecutan como "tareas activity". Cuando es iniciada una nueva Activity se pone al inicio de la pila de ejecución y se convierte en la Activity en ejecución. La Activity que estuviera ejecutándose antes siempre estará por debajo en la pila y no volverá a primer plano mientras la nueva Activity exista. En el siguiente diagrama vemos claramente cual es el ciclo de vida de este tipo de clases.
Figura 26: ciclo de vida del activity Fuente.- Tomado de http://www.android-app-market.com/
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
59
Es muy importante tener en cuenta este diagrama ya que cuando estamos desarrollando una aplicación Android, todas las aplicaciones cumplen con este ciclo de vida y dependiendo de la aplicación debemos manejar estos ciclos de vida para gestión nuestra aplicación y los recursos que maneja. Por ejemplo cuando una aplicación cambia de orientación de vertical a horizontal se inicia con el método onResume. A continuación de describe cada uno de los eventos del ciclo de vida de un activity Evento onCreate()
Descripción y/o funcionalidad Se ejecuta cuando se crea la Activity por primera vez. Aquí es donde se deberían crear views, enlazar datos a listas,… en definitiva el
Abortable
Siguiente
No
onStart()
proceso de inicialización de nuestra aplicación. Se ejecuta después de que la aplicación se haya onRestart() detenido, justo después de que sea iniciada de No nuevo.
onStart()
Se ejecuta justo antes de que la aplicación aparezca visible para el usuario. Si la aplicación es un proceso en background el siguiente estado es onStop(), si la aplicación se ejecuta en foreground el siguiente método es onResume().
No
Se ejecuta cuando la Activity interactúa con el onResume( usuario. En éste punto la Activity está en la cima No de la pila.
onStart()
onResume() o onStop()
onPause()
onPause()
Se ejecuta cuando el sistema está a punto de continuar una Activity anterior. Se utiliza típicamente para guardar datos que no se han grabado anteriormente, parar animaciones y Si otras acciones que consuman CPU. Seguida por onResume() si la actividad vuelve a primer plano o onStop() si es invisible para el usuario.
onResume() o onStop()
onStop()
Se ejecuta cuando la Activity deja de ser visible al usuario, porque otra Activity ha continuado y pasa a un lugar más prioritario de la pila. Puede ocurrir porque una nueva Activity ha sido creada, una Activity ya creada pasa a primer plano o ésta está siendo destruida. El siguiente método será onRestart() si la Activity vuelve a interaccionar con el usuario o por onDestroy() si la Activity será destruida.
onRestart() o onDestroy()
Si
Última llamada antes de destruir la Activity. Puede ocurrir porque la actividad está acabando (llamada a finish() ) , o porque el sistema onDestroy() Si destruirá la instancia para guardar espacio. Se puede distinguir esos escenarios con el método isFinishing().
CIBERTEC
NADA
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
60
Introducción a los Intents Android usa los intent como mecanismo para invocar componentes, los intents son bastante fáciles de comprender. Básicamente nos permiten llamar a aplicaciones externas a la nuestra, lanzar eventos a los que otras aplicaciones puedan responder, lanzar alarmas etc. Ejemplo: Tenemos el siguiente activity creado public class MiActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.MiActivity); } }
El layout R.Layout.MainActivity debe estar declarado y ser un archivo de layout valido. Una vez creado este archivo de layout, es necesario registrarlo en el AndroidManifest, que será algo así tal como lo vemos en la primera aplicación que desarrollamos:
El registro de la activity se realiza de forma automática, tal como también se registra una acción que podremos usar para invocar a dicha actividad. El diseñador de la actividad puede asignar el nombre que crea conveniente a la acción. Ahora que ya está todo listo, podemos lanzar un intent para llamar a esta actividad: public static void LlamarActivity(Activity activity){
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
61
String actionName= "android.intent.action.MAIN"; Intent intent = new Intent(actionName); activity.startActivity(intent); }
La
convención
que
se
usa
para
nombrar
una
acción
suele
ser android.intent.action.MAIN Una vez que se invoca a la actividad, ésta tiene la posibilidad de recuperar el intent que la llamó. Y podemos recuperarlo del siguiente modo: //Este código se inserta en el método onCreate() de la actividad.
Intent intent = this.getIntent(); if (intent == null){ Log.d("Tag", "La actividad no se ha llamado mediante un intent.") } Para más detalles puedes ingresar al siguiente link: developer.android.com/guide/appendix/g-app-
intents.html
Funcionalidad y uso de Intents Se puede encontrar una lista con las aplicaciones disponibles en Android junto con los intents que las invocan. Por ejemplo, para el navegador web, tenemos dos acciones, VIEW y WEB_SEARCH, que abren el navegador en una url específica o realizan una búsqueda. En el caso del dialer (marcador), tenemos las acciones CALL y DIAL, que vienen dadas por la URI tel: numero_de_teléfono, la diferencia entre estas dos acciones, es que CALL realiza la llamada al número de la URI, y DIAL solo lo marca, pero no realiza la llamada.
Ejemplos de uso de Intent Ejemplo para abrir en nevegador predeterminado en el celular. public static void AbrirNavegador (Activity activity){ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.google.com")); activity.startActivity(intent); }
Abrir el buscador predeterminado en el celular. public static void AbrirBuscador(Activity activity){ Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.setData(Uri.parse("http://www.google.com"));
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
62
activity.startActivity(intent); } public static void AbrirVentanaLlamada(Activity activity){ Intent intent = new Intent(Intent.ACTION_DIAL); activity.startActivity(intent); } public static RealizarLlamada call(Activity activity){ Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:555-555-555")); activity.startActivity(intent); } public static void LlamargoogleMaps(Activity activity){ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("geo:0,0?z=4&q=restaurantes")); activity.startActivity(intent); }
Pasar datos entre activitys mediante Intent Para ello se debe realizar de la siguiente manera:
Gestión de problemas de pantallas El objetivo de soportar múltiples pantallas es crear una aplicación que pueda funcionar correctamente y se vea bien en cualquiera de las configuraciones de pantalla generalizadas compatibles con Android. En las secciones anteriores de este documento proporcionan información acerca de cómo Android se adapta a su aplicación a las configuraciones de pantalla y cómo se puede personalizar el aspecto de su aplicación en diferentes
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
63
configuraciones de pantalla. Esta sección proporciona algunos consejos adicionales y una visión general de las técnicas que ayudan a asegurarse de que su aplicación se escala correctamente para configuraciones de pantalla diferentes. Aquí está una lista rápida de cómo se puede asegurar que la aplicación muestra correctamente en pantallas diferentes: 1. Utilice wrap_content , fill_parent o unidades dp al especificar dimensiones en un archivo de formato XML 2. No utilice los valores de píxeles en el código 3. No utilice AbsoluteLayout (está en desuso) 4. Suministre drawables alternativos para densidades de pantalla diferentes En las secciones siguientes se proporcionan más detalles.
1. Use wrap_content, fill_parent, o la unidad de DP para dimensiones del diseño Al definir el android:layout_width y Android:layout_height para vistas en un archivo de formato XML, utilizando "wrap_content" , "fill_parent" o unidades dp se garantiza que a la vista se le da un tamaño apropiado en la pantalla del dispositivo actual. Por ejemplo, una vista con un layout_width = "100dp" mide 100 pixeles de ancho en la pantalla de densidad media y hasta 150 píxeles de ancho en la pantalla de alta densidad, de modo que la vista ocupa aproximadamente el mismo espacio físico en la pantalla . Del mismo modo, se debe preferir el sp (escala independiente de píxeles) para definir tamaños de texto.
2. No utilice valores codificados de píxeles en el código de aplicación Por cuestiones de rendimiento y mantener el código más simple, el sistema Android utiliza píxeles como unidad estándar para expresar los valores de cota o coordenada. Eso significa que las dimensiones de una vista se expresan siempre en el código mediante píxeles, pero siempre se basa en la densidad de pantalla actual. Por ejemplo, si myView.getWidth() devuelve 10, la vista es 10 píxeles de ancho en la pantalla actual, pero en un dispositivo con una pantalla de mayor densidad, el valor devuelto puede ser 15. Si utiliza valores de los píxeles en el código de aplicación para trabajar con mapas de bits que no están pre-escalados para la densidad de pantalla actual, puede que tenga que escalar los valores de los píxeles que se utilizan en el código para que coincida con la fuente de mapa de bits sin escala. Si su aplicación manipula mapas de bits o se ocupa de los valores de píxel en tiempo de ejecución, consulte la siguiente sección sobre Consideraciones adicionales de densidad.
3. No utilice AbsoluteLayout A diferencia de los widgets de otros diseños, AbsoluteLayout refuerza el uso de posiciones fijas para exponer sus vistas, lo que pueden llevar fácilmente a que las interfaces de usuario no funcionen bien en pantallas diferentes. Debido a esto, AbsoluteLayout está desfasada y en Android 1.5 (Nivel API 3).
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
64
En su lugar, debe utilizar RelativeLayout , que utiliza posicionamiento relativo. Por ejemplo, puede especificar que un widget de botón debe aparecer "a la derecha de" un widget de texto.
4. Use el tamaño y densidad de recursos específicos Aunque el sistema de escalas de su diseño y recursos drawables basado en la configuración actual de la pantalla, es posible que desee realizar ajustes en la interfaz de usuario en diferentes tamaños de pantalla y proporcionar drawables que están optimizados para diferentes densidades. Esto, en esencia reitera la información de arriba en este documento. Si necesita controlar exactamente cómo su aplicación se verá en varias configuraciones de pantalla, ajustar los diseños y drawables en directorios de recursos de configuración específicos. Por ejemplo, considere un icono que desea mostrar en las pantallas de media y alta densidad. Sólo tienes que crear tu icono en dos tamaños diferentes (por ejemplo 100x100 de densidad media y 150x150 de alta densidad) y poner las dos variaciones en los directorios adecuados, utilizando los calificadores apropiados: res/drawable-mdpi/icon.png //for medium-density screens res/drawable-hdpi/icon.png //for high-density screens
Nota: Si un calificador de densidad no está definido en un nombre de directorio, el sistema asume que los recursos en ese directorio están diseñados para la línea de base de densidad media y se escala para otras densidades, según proceda.
Cómo probar la aplicación en varias pantallas
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
65
Figura 17. Un conjunto de AVDS para probar pantallas de apoyo. Antes de publicar su aplicación, usted debe probarlo a fondo en todos los tamaños de pantalla admitidos y densidades. El SDK de Android incluye un emulador que puede utilizar, que replican los tamaños y densidades de configuraciones de pantalla comunes en los que su aplicación es probable que se ejecute. También se puede modificar el tamaño predeterminado, la densidad y resolución del emulador para reproducir las características de cualquier pantalla específica. El uso del emulador y las configuraciones personalizadas adicionales le permite probar cualquier configuración de pantalla posible, por lo que no tiene que comprar varios dispositivos sólo para poner a prueba el soporte de su solicitud de pantalla. Para configurar un entorno de prueba debe crear una serie de AVDS (Android Virtual Devices), utilizando el emulador y configuraciones de pantalla que emulan los tamaños de pantalla y densidades que desean. Para ello, puede utilizar el Administrador de AVD para crear las AVDS y lanzarlos con una interfaz gráfica.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
66
Orientación del dispositivo La funcionalidad de todo teléfono con sistema operativo Android es que tiene la capacidad de adaptarse tanto a la pantalla como a la orientación que tiene el dispositivo, vertical o horizontal, sin embargo en algunas ocaciones es necesario mantener la orientación como el caso de los juegos es necesario mantener la horientacipon en horizontal para aprovechar la capacidad de la pantalla.
Figura 27: configuración de orientación Fuente: tomado desde http://es.wikihow.com/cambiar-la-orientaci%C3%B3n-de-la-pantalla-en-Android
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
67
La orientación, se puede configurar dentro por medio de código XML como se aprecia en la siguiente imagen
Existe la posibilidad de evitar este comportamiento por defecto de Android frente a los cambios dinámicos de configuración, simplemente añadiendo en el Manifest a la activity la opción android:configChanges="orientation|keyboardHidden"
Importante! Para que esta técnica funcione si usamos para nuestra app un target superior a Gingerbread (API 10) , solo funciona en las versiones superiores : android:configChanges="orientation|keyboardHidden|screenSize"
Con esto estamos indicando que el cambio de configuración lo gestionará directamente la app, por lo que la Activity no se reinicia y se invoca el método onConfigurationChanged(Configuration
newConfig) que
deberemos
sobreeescribir para realizar todos los cambios que queramos al cambiarse la orientación del dispositivo.Obsérvese que siguiendo esta estrategia NO se cambia
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
68
automáticamente el layout en el caso de que se hayan definido layout distintos, por lo que si fuera necesario no quedaría más remedio que hacer estos cambios programáticamente.
Por medio de código se puede realizar lo siguiente:
Para más deralle ingresar al siguiente link: http://developer.android.com/guide/topics/resources/runtime-changes.html
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
69
Diálogos Y Notificaciones Nuestras aplicaciones siempre deben mostrar mensajes de alerta, procesamiento o espera por algún proceso en ejecución, por ellos debemos hacer uso de las funcionalidades para emitir mensajes o solicitudes de confirmación de nuestra aplicación.
Entre los mensajes más comunes que tenemos tres tipos de notificaciones:
Notificaciones Toast.
Notificaciones en la barra de estado.
Ventanas de diálogo.
Notificaciones Toast Una notificación Toast es un mensaje emergente que se muestra superpuesto en la pantalla. Solo ocupa el espacio necesario para mostrar la alerta, mientras tanto, la actividad que estaba visible puede seguir usándose. Este tipo de notificaciones se muestran durante un periodo de tiempo y desaparecen, no permiten interactuar con
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
70
ellas. Debido a que un Toast se crea mediante un servicio en segundo plano, puede aparecer aunque la aplicación no esté visible. A lo largo de todas las entradas sobre Android, se ha usado mucho este típo de notificaciones:
Sintaxis Toast.makeText(context, text, duration).show(); Context: Para pasar el contexto, tenemos varias posibilidades, NombreActividad.this , o getApplicationContext(). Text: cadena de texto a mostrar Duration: es el tiempo de duración puede asumir dos posibles valores tiempo corto o largo, para ello podemos usar, una de las dos constantes predefinidas, Toast.LENGTH_SHORT ó Toast.LENGTH_LONG en este caso, vamos a crear un layout personalizado para mostrar el
Toast:
< ?xml version="1.0" encoding="utf-8"?>
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( R.layout.toast_layout ,(ViewGroup) findViewById(R.id.toastLayout));
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 como hacerlo. NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //Agregando el icono, texto y momento para lanzar la notificación
int icon = R.drawable.ok; CharSequence tickerText = "Notification Bar";
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
72
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
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 dialogos, 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): cierra el diálogo, guardando su estado.
removeDialog(int): cierra el dialogo elminándolo por completo.
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 items 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)
La metodo que sedebe 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 DESARROLLO DE APLICACIONES APLICACIONES MÓVILES I
77
Caso: Usando DialogFragment Agregar Agregar una clase clase llamada llamada GenerarVen GenerarVentanaDialo tanaDialogo go
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: Icon 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 menu, 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 submenu, 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 sobreescribir 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 sobreescribir 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, menu); }
Al igual que en los options menu, 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 lanze 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 nucleo 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 eel espacio de almacenamiento que se tendrá en la aplicación cuando se crea una maquina 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 maquina 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 la 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 grafico:
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 como 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 titulo 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 propiedes 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
Metodo/Función getDataDirectory() Recupera la carpeta de datos del usuaurio 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 vera 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 SQLite www.sqlite.org Caracteristicas 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 dependede la magnituddel campo. Real Valoresnúmericosdecimales8-byte punto flotante. Text Se almacenacadena 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
Metodos principales Entre los métodos principales tenemos los siguientes
execSQL Ejecuta un sentencia sql de creación de datos create, drop, etc. Ejemplo:
Otros Ejemplos:
Importante! SQLITE usaun campo ivisiblellamadoROWID queidentificacomounicoregistrola filaen el ejemplose usaCodigocomoun 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 Agregando parámetros 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 DESARROLLO DE APLICACIONES 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) Donde: 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) Donde: 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) Donde: 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: Metodos 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.
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
99
getDouble(columnIndex).- permite leer el valor de un campo número con decimales de tipo doublé. 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: Sobreescribir 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:
Paso 2: Modificar el archivo de manifiesto
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
101
Se debe realizar este paso para configurar que nuestra nueva clase será la que llama a todos los activitys a 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 clase Application. Sin embargo para poder hacer uso de los métodos que definamos
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
102
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 defie como “Un Servicio Web (Web Service [WS]) es una aplicaci´on 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 responsabilida de realizar un conjunto de funciones concretas y bien definidas.
Los Servicios Web actúan como componentes independientes que se pueden integrar para formar sistemas distribuidos complejos.
Modelo de funcioamiento 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 siguiete 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 definición de estos procesos mediante la composición de varios Servicios Web individuales, lo que se conoce como coreografía. Ejemplos A continuación se muestra el código que se utilizaría para solicitar un viaje:
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
107
uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d 2001-11-29T13:20:00.00005:00Pepe EjemploNueva YorkLos Angeles2001-12-14última hora de la tardepasilloLos AngelesNueva York2001-12-20media-mañananinguna
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
108
Estructura Estructura Mensaj M ensajee SOAP Un mensaje SOAP es un documento XML ordinario con una estructura definida en la especificación del protocolo.
Definición del Mensaje SOAP (WSDL) WSDL son las siglas de Web Services Description Language, un formato XML que se utiliza para describir servicios Web. WSDL se usa a menudo en combinación con SOAP y XML Schema Estructura del WSDL
Tipos de Datos define los tipos de datos usados en los mensajes. : Esta sección define Mensajes
: Aquí definimos los elementos elementos de mensaje.
Tipos de Puerto
: Con este apartado definimos las operacion operaciones es permitidas y los mensajes intercambiados en el Servicio.
Bindings
: Especificamos Especificamos los los protocolos de comunicación comunicaci ón usados.
Servicios
: Conjunto de puertos y dirección direcció n de los mismos.
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DESARROLLO DE APLICACIONES APLICACIONES MÓVILES I
109
Caso:
Crear un web Service usando visual studio 2010
Nombre de proyecto: WSLogin Ubicación: C:\Android_2015 Agregar Agregar un web Service Service menú proyect/Add proyect/Add new new Item Item
Vista del proyecto
Código fuente de wslogin.asmx
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
110
El método WebMethod con dos parámetros pUsuario y pContrasenia
Web Service en publicación
Donde:
(1) Al dar click e ServiceDescriptión Muestra la definición de servicio como métodos y funcionalidades como métodos públicos parámetros y tipos de datos
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
111
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
112
(2) Metodos del servicio Mustra los métodos públicos que se pueden consumir por el cliente e nuestro caso utilizando Android, Dando un click por ejemplo en el método Validar usuario se muestra la siguiente página para hacer pruebas del servicio.
Adicionalmente se muestra formas de llamada de clientes:
Usando protocolo SOAP 1.1 Indica el nombre del método así como los parámetros que recibe y la respuesta que emite la sección que tiene el nombre del método con la palabra Result ejemplo ValidarUsuarioResponse y el tipo de dato de respuesta boolean Ejemplo de la imagen
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
113
Usando Protocolo SOAP 1.2 el mismo escenario indicado, sin embargo es para soporte a plataformas complejas como WCF (Windows comuication fudation)
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
114
Clases de acceso a web service Android no tiene ninguna librería para consumir web Service por ello debemos utilizar una librería libre llamada ksoap para consumir nuestro web Service. Para utilizar la librería se debe descargar desde: https://code.google.com/p/ksoap2-android/
Dar click en download y descargar el jar que indica descarga directa.
Una vez descargado ponerlo en una carpeta con ruta corta como C:\AndroidDll
Clases, métodos y funciones SoapObject Permite realizar crear la conexión al servicio basado en el namespace y el nombre de método SoapObject oRequest=new SoapObject(“http://tempuri.org/”, “Sumar”);
addProperty Propiedad de SoapObject para agregar parámetros oRequest.addProperty("pNumero1",1); oRequest.addProperty("pNumero2",2); SoapSerializationEnvelope
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
115
Permite inicializar el enlace de datos con el web service, serializar los datos para iniciar comunicación. SoapSerializationEnvelope oSerializador=new SoapSerializationEnvelope(SoapEnvelope.VER11); oSerializador.setOutputSoapObject(oRequest); oSerializador.dotNet=true;
HttpTransportSE Permite realizar la llamada al servicio web utilizando la url y el objetito de serialización HttpTransportSE oEjecutarWebService=new HttpTransportSE( “http://planificador.nisabusiness.com/operaciones.asmx”); oEjecutarWebService.call( “http://tempuri.org/Sumar”, oSerializador); SoapObject Resultado=(SoapObject)oSerializador.bodyIn; StrResultado=Resultado.getProperty(0).toString(); //Permite recuperar el dato.
Agregar la referencia en Android studio
estructura de proyecto.
Click e el menú archivo y luego dar click en
Dar click en agregar referecia
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
116
En la ventana que aparece seleccionar importar Jar como se muestra e el siguiente grafico
Dar click e siguiente: En esta ventana ubicar el archivo descargado
Posteriormente se debe seguir los pasos que se indica e la numeración para agregar la referencia en el APK
Dar click en Apply y luego ok
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
117
Thread Manejando Hilos E Android para las llamadas que pueden demorar el proceso de operación de las aplicaciones se debe utilizar un hilo de ejecución por ello debemos revisar la documentación de como manejar hilos. Thread (Hilo).- Clase que permite ejecutar algún proceso en segundo plano.
Thread Ejemplo
Thread código de ejemplo El siguiente código de ejemplo muestra como se utiliza el thead
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
118
Donde: 1.- es el diseño de la pantalla 2.- las variables a nivel de activity 3.- código del método principal del thead
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
119
Consumiendo web Service desde Android Objetivo Crear un web Service que permita realizar operaciones de suma y que retore el resultado.
Paso 1: Crear en proyecto usado visual studio 2010 Utilizado el proyecto creado anteriormente Agregar el webservice llamado Operaciones.asmx
El código fuente s el siguiente:
Ua vez ejecutado se muestra lo siguiente:
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
120
EL mismo web Service se encuentra publicado en la siguiente dirección: http://planificador.nisabusiness.com/operaciones.asmx
Consumiendo web Service desde Android Crear el proyecto WSLogin
Activity en Blanco
No olvidarse de dar permisos de acceso a internet En el archivo de manifiesto AndroidManifest.xml
} }); obtnCancelar=(Button)findViewById(R.id.btncancelar); obtnCancelar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub finish(); } }); //getActivity().onBackPressed(); } public void AplicandoHilos() { Thread oHilo=new Thread( new Runnable() { public void run() {//Metodo de ejecución //Acceso a interfaz grafica actual runOnUiThread(new Runnable() { public void run() {} }); } } ); oHilo.start(); //Ejecutar el hilo } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
127
Prueba de ejecución de aplicación Ingresar los datos
CIBERTEC
Una vez calculado se muestra el resultado
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
128
UNIDAD
5 Servicios basados en localización LOGRO DE LA UNIDAD DE APRENDIZAJE Al término de la unidad, el alumno elabora aplicaciones que permitan el uso del servicio basado en localización utilizando Google Maps. TEMARIO 5.1 Tema 10: Manejo de fragments (4 horas) 5.1.1 Que es Fragment 5.1.2 Creating a Fragment, administrar Fragments,Flagment class 5.1.3 Toolbar Fragment Talk to the Activity 5.1.4 Eventos fragment, Aplicación fragment 5.2 Tema 11: Servicios basados en localización (3 horas) 5.2.1 Utilizar Google Maps en la aplicación. 5.2.2 Obtención de la localización (coordenadas) del dispositivo. 5.2.3 Activar las API de Google Maps.
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
129
Que es un fragment Es una porción de la interfaz que puede añadirse y/o quitarser de la interfaz independientemente de la actividad en curso, un fragmente se puede reutilizar en varias Activities el propósito principal del fragment es poder diseñar varias configuraciones de pantalla y que podamos adaptarlo de acuerdo a la necesidad, adptandose a la horientazión vertical o horizontal con ello reducir el código que podamos generar. Por ejemplo podemos presentar una aplicación cliente de correo electrónico, donde al lado izquierdo debemos tener la lista de correos y al lado derecho mostrar el mensaje de correo, con sus campos clásicos De y Asunto, y por otro lado debemos mostrar el contenido completo del correo seleccionado. En un teléfono móvil lo habitual será tener una primera actividad que muestre el listado de correos, y cuando el usuario seleccione uno de ellos navegar a una nueva actividad que muestre el contenido de dicho correo. Sin embargo, en un tablet puede existir espacio suficiente para tener ambas partes de la interfaz en la misma pantalla, por ejemplo en un tablet en posición horizontal podríamos tener una columna a la izquierda con el listado de correos y dedicar la zona derecha a mostrar el detalle del correo seleccionado, todo ello sin tener que cambiar de actividad.
Imagen 51 Fuente: http://jarroba.com/
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
130
Ciclo de vida Al igual que las activity un fragmento tiene un cliclo de vida muy parecido, que el fragmento depende completamente del activity además de tener características adcionales que es muy utilizado en tiempo de ejecución para alterralos. Lista de eventos invocados en el ciclo de vida de un fragment
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
Evento
131
Descripción / Funcionalidad
onAttach
se ejecuta cuando el fragmento ha sido asociado a la actividad contenedora. onActiviyCreated Se ejecuta cuando la actividad contenedora ya ha terminado la ejecución de su método onCreate() onCreate
Se ejecuta cuando el fragmento se está creando. En el puedes inicializar todos los componentes que deseas guardar si el fragmento fue pausado o detenido.
onCreateView
Se llama cuando el fragmento será dibujado por primera vez en la interfaz de usuario. En este método crearemos el view que representa al fragmento para retornarlo hacia la actividad.
onStart
Se invoca cuando el fragmento esta visible ante el usuario. Obviamente depende del método onStart() de la actividad para saber si la actividad se está mostrando.
onResume
Es ejecutado cuando el fragmento esta activo e interactuando con el usuario. Esta situación depende de la que actividad anfitriona este primero en su estado Resumed.
onStop
Se ejecuta cuando un fragmento ya no es visible para el usuario debido a que la actividad anfitriona está detenida o porque dentro de la actividad se está gestionando una operación de fragmentos.
onPause
Al igual que las actividades, onPause se ejecuta cuando se detecta que el usuario dirigió el foco por fuera del fragmento.
onDestroyView
Este método es llamado cuando la jerarquía de views a la cual ha sido asociado el fragmento ha sido destruida.
onDetach
Se ejecuta cuando el fragmento ya no está asociado a la actividad anfitriona
La API de los fragmentos se incluyen en el API de Android y se encuentra en la clase
Fragment, por ello cada vez que necesite utilizar se debe extender la clase Fragment en nuestra nueva clase para heredar su propiedades y comportamientos. Tambien existen otros librería que se pueden utilizar como
ListFragment
DialogFragment
PreferenceFragment
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
132
Código de ejemplo: public static class FragmentoDemo extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragmento_Demo, container, false); } } El evento onCreateView() recibe como parámetro un objeto de tipo LayoutInflater, el cual es proveído por la clase anfitriona. Esta clase es la encargada de inflar el código Java a través del método inflate (). Este recibe como parámetros el recurso xml del layout, el contenedor (en este caso el view de la actividad anfitriona) donde será insertado y una bandera indicando si el view que se producirá debe incorporarse al contenedor. Como se ve, hemos usado al archivo fragmento_Demo.xml como recurso, el parámetro container que apunta a la actividad anfitriona y false para indicar que no indicar que no deseamos comprometer el view del fragmento.
Añadiendo un fragmento a la actividad
Una vez creada la clase y el layout que representa nuestro fragmento debemos añadirlo a la actividad. Existen dos formas para realizar este proceso. La primera es a través del archivo layout de la actividad. Donde incluiremos un componente XML de equivalencia para fragmentos llamado , el cual referenciará a la clase especifica extendida del fragmento para crear la jerarquía. Veamos un ejemplo:
Creación del primer layout Fragment El siguiente paso es crear la interfaz de usuario para el primer fragmento que se utilizará dentro de nuestra actividad. Esta interfaz de usuario tiene que estar en un archivo XML, para ello debes estar en la vista app ira la carpeta es y layout nuevo y lyout resource file como se muestra en el siguiente grafico
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DESARROLLO DE APLICACIONES APLICACIONES MÓVILES I
133
Adición de un archivo de recursos recursos de diseño diseño para un proyecto proyecto Android Estudio Estudio
En el siguiente cuadro de diálogo resultante, nombre el toolbar_fragment diseño y cambiar el elemento raíz de LinearLayout a RelativeLayout antes de hacer clic en Aceptar para para crear crear el nuevo archivo de recursos.
El código fuente inicial es el siguiente:
Sin embargo se debe modificar el XML como se muestra a continuación
DESARROLLO DESARROLLO DE APLICACIONES APLICACIONES MÓVILES I
135
Creación de la Primera Clase Fragmento Además de un diseño de interfaz de usuario, un fragmento fragmento también tiene que qu e tener una clase asociada con él para hacer el trabajo real por medio de código. Por ello se debe adicionar una nueva clase ir a a los archivos de proyecto desplegado en la carpeta java Añadir una clase para este este fin fin al proyecto pr oyecto desplegando despleg ando la aplicación carpeta java bajo el proyecto FragmentExample en la ventana de herramientas del proyecto y hacer clic derecho sobre el nombre del paquete dado al proyecto cuando se creó (en este caso cas o com.appmovil. com.appm ovil. fragmentexample). fragmentexampl e). En el menú que aparece, seleccione la nueva opción -> Java Class. En el cuadro de diálogo Crear nueva clase resultando, nombre el ToolbarFragment clase y haga clic en Aceptar para crear la nueva clase. Una vez que la clase se ha creado, se debe, por defecto, aparecerá en el panel de edición en el que se lea como sigue: package com.appmovil.fragmentexample; public class ToolbarFragment { } Posteriomente se debe agrgar las importaciones necesarias para que el buen funcionamiento de la aplicación Por el momento, los únicos cambios en esta clase son para añadir algunas directivas de importación y reemplazar el método onCreateView () para asegurarse de que el archivo de diseño se infla y se visualiza cuando se utiliza el fragmento dentro de una actividad. La declaración de la clase también debe indicar que la clase amplía la clase Fragmento Android: package com.appmovil.fragmentexample; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class ToolbarFragment extends Fragment { @Override public view onCreateView (LayoutInflater inflado, Contenedor ViewGroup, Bulto savedInstanceState) { // Inflar el diseño de este fragmento Ver view = inflater.inflate inflater.inflate (R.layout.toolbar_fr (R.layout.toolbar_fragment, agment,
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
136
contenedor, false); vista regresar; } }
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
137
Servicios basados en localización Localización Geográfica Básica La geolocalización es la La localización geográfica en Android existen multitud de formas de obtener la localización de un dispositivo móvil, la más conocida y popular es la localización por GPS, también es posible obtener la posición de un dispositivo por las antenas de telefonía móvil o mediante puntos de acceso Wi-Fi cercanos, y todos cada uno de estos mecanismos tiene una precisión, velocidad y consumo de recursos distinto.
A location-based service (LBS) es un sistema de difusión de información que se puede acceder por los dispositivos móviles a través de la red móvil. Es impulsado por la capacidad del sistema para detectar la posición geográfica del dispositivo móvil.
Código de ejemplo: Listar todos los proveedores. LocationManager locManager = (LocationManager)getSystemService(LOCATION_SERVICE); List listaProviders = locManager.getAllProviders();
Clases para localización por GPS Address Una clase que representa una dirección, es decir , un conjunto de cadenas que describen una ubicación. Criteria Una clase con indicación de los criterios de aplicación para la selección de un proveedor de ubicación. Geocoder Una clase para el manejo de la geocodificación. GpsSatellite Esta clase representa el estado actual de un satélite GPS. GpsStatus Esta clase representa el estado actual del motor GPS. Location
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
138
Una clase representa una situación geográfica sintió en un momento determinado (un "arreglar"). LocationManager Esta clase proporciona acceso a los servicios de localización del sistema. LocationProvider Unos proveedores de localización super cclase abstracto. GpsStatus.Listener Se utiliza para recibir notificaciones cuando el estado del GPS ha cambiado. GpsStatus.NmeaListener Se utiliza para recibir sentencias NMEA del GPS. LocationListener Se utiliza para recibir notificaciones de la LocationManager cuando la ubicación ha cambiado.
Para más detalles visitar el portal de desarrollador google: http://developer.android.com/guide/topics/location/strategies.html
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
139
Google Maps Google Maps es un servidor de aplicaciones de mapas en la web que pertenece a Google. Ofrece imágenes de mapas desplazables, así como fotografías por satélite del mundo e incluso la ruta entre diferentes ubicaciones o imágenes a pie de calle Google Street View. Desde el 6 de octubre de 2005, Google Maps es parte de Google Local. Existe una variante a nivel entorno de escritorio llamada Google Earth que ofrece Google también de forma gratuita. En 2014, los documentos filtrados por Edward Snowden revelaron que Google Maps es parte y víctima del entramado de vigilancia mundial operado por varias agencias de inteligencia occidentales y empresas tecnológicas.
Nuevo Google Maps En la Google I/O 2013, Google presentó un rediseño de Google Maps para la versión Web, mostrando nuevas funciones como: El mapa ocupa toda la pantalla. La barra de búsqueda esta en la parte superior izquierda y puede mostrar información sobre la ubicación. En la esquina inferior derecha están ubicados los controles de zoom. Ahora hay un modo tierra el cual es una combinación entre la vista satélite y google earth, en donde podremos ver las ciudades en 3D y al alejar la imagen podremos ver la Tierra en 3D. Al hacer clic en un lugar, nos muestra las reseñas, fotos, números de teléfono y ver el edificio en Street View. Al usar indicaciones podremos ver varias rutas y cambiarlas, además de que se podrán ver las rutas en avión y reservar vuelos.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
140
Habilitar APIS de google Maps Google esta compuesto por mucas aplicaciones las cuales las denomina google apps, Google Apps for Work es un servicio de Google que proporciona varios productos de Google con un nombre de dominio personalizado por el cliente. Cuenta con varias aplicaciones web con funciones similares a las suites ofimáticas tradicionales, incluyendo Gmail, Hangouts, Calendar, Drive, Docs, Sheets, Slides, Groups, News, Play, Sites y Vault. Fue la creación de Rajen Sheth, un empleado de Google que posteriormente desarrolló las Chromebooks. 1 Para habilitar las apis de google Maps se debe ingresar a la siguiente dirección: 1. Ingresar a tu cuenta de Gmail 2. Ingresar a la consola de APIS https://code.google.com/apis/console 3. Crear un proyecto asociado a la plataforma de desarrollo para nuestro caso es una aplicación movil en android 4. Habilitar las API necesarias
Instalar google play services Para utilizar google Maps se debe instalar google play services ingresando al administrador de librerías como se muestra.
1
Cfr: http://es.wikipedia.org/wiki/Google_Apps
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
141
Creando nuestra primera aplicación en google Maps Datos del proyecto
Se debe modificar el XMl como se muestra en la siguiente imagen
Modificar el glandle como se muestra para agregar las referencias a google play services
Posterior a ello se debe crear las llaves digitales para firmar la aplicación con los siguientes comandos como se indica: keytool -list -v -keystore mystore.keystore
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
142
Configurar el archivo de manifiesto como se indica <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyB9oARLFPe4wRGyeuWJq0IqZ0g84TjmjVI" />
Agregar el siguiente código para hacer uso de google Maps import com.google.android.gms.maps.*; public class MainActivity extends Activity { private void createMapView(){ try { if(null == googleMap){ googleMap = ((MapFragment) getFragmentManager().findFragmentById( R.id.mapView)).getMap(); if(null == googleMap) { Toast.makeText(getApplicationContext(), "Error creating map",Toast.LENGTH_SHORT).show(); } } } catch (NullPointerException exception){ Log.e("mapasApp", exception.toString()); } }
Para agregar marcadores se debe realizar con el siguiente código import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; Agregar el siguiente método para fijar un marcador private void addMarker(){ if(null != googleMap){ googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker") .draggable(true) ); } } Finalmente el método oncreate queda como se muestra:
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
143
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); createMapView(); addMarker(); } Finalmente ejecutando la aplicación se muestra el mapa en el celular como se muestra
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
144
UNIDAD
6 Servicios LOGRO DE LA UNIDAD DE APRENDIZAJE Al término de la unidad, el alumno elabora aplicaciones desatendidas basadas en servicios que permitan realizar operaciones como descarga de archivos grandes, monitorear usuarios basado en geolocalización. TEMARIO 6.1 Tema 13: Creando y administrando Servicios (4 horas) 6.1.1 Qué es un servicio, 6.1.2 Anatomía de un servicio, accesos y permisos. 6.1.3 Intent Service, Bound Service. 6.1.4 Configurar el archivo de manifiesto. 6.1.5 Iniciar/Configurar servicios
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
145
Que es un servicio (Service) Los servicios son componentes sin interfaz gráfica que se ejecutan en segundo plano. En concepto, son exactamente iguales a los servicios presentes en cualquier otro sistema operativo como por ejemplo Windows los servicios de Windows update, o el servicio de actualización de la hora de windows. Los servicios pueden realizar cualquier tipo de acciones, por ejemplo actualizar datos, lanzar notificaciones, o incluso mostrar elementos visuales como por ejemplo Activities si se necesita en algún momento la interacción con del usuario. La plataforma de Android tiene una gran variedad de servicios que ofrece como por ejemplo los alertas cuando la batería esta baja o por ejemplo cuando llega un mensae de texto o alertas para aceder a dichos servicios se puede realizar con la clase Manager . De esta manera, en nuestras
actividades
podremos
accesar
a
estos
servicios
a
través
del
método getSystemService() . Por otro lado, si necesitamos utilizar servicios propios, estos deben ir de clarados en el archivo AndroidManifest.xml .
Imagen: Ciclo de vida de los servicios Fuente: http://cd1.faqsandroid.com/wp-content/uploads/2012/08/service_lifecycle.jpg
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
146
Creando un servicio de musica 1. Crea un nuevo proyecto con los siguientes datos:
2. Reemplaza el código del layout activity_main.xml por:
3. Agregar la clase ServicioMusica 3.1. Agregar el siguiente código en el activity main:
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
148
4. agregar el siguiente código en el servicio de musica: package solucionesmoviles.serviciomusica; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; import android.widget.Toast; /** * Created by peextssolis on 06/03/2015. */ public class ServicioMusica extends Service { MediaPlayer reproductorMusica; @Override public void onCreate() { Toast.makeText(this, "Servicio iniciado", Toast.LENGTH_SHORT).show(); reproductorMusica = MediaPlayer.create(this, R.raw.audio); } @Override public int onStartCommand(Intent intenc, int flags, int idArranque) { Toast.makeText(this,"Servicio arrancado "+ idArranque, Toast.LENGTH_SHORT).show(); reproductorMusica.start(); return START_STICKY; } @Override public void onDestroy() { Toast.makeText(this,"Servicio detenido", Toast.LENGTH_SHORT).show(); reproductorMusica.stop(); } @Override public IBinder onBind(Intent intencion) { return null; } }
5. Modificar el archivo de manifiesto AndroidManifest.xml y agregar el siguiente código de declaración de servicio en el tag .
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
149
6. Ahora debes crear una nueva carpeta con nombre raw dentro de la carpeta res. Arrastra a su interior el ficheroaudio.mp3. 7. Ejecuta la aplicación y comprueba su funcionamiento. Puedes terminar la actividad pulsando el botón de retroceder y verificar que el servicio continúa en marcha.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
150
UNIDAD
7 Multimedia y publicación LOGRO DE LA UNIDAD DE APRENDIZAJE Al término de la unidad, el alumno elabora aplicaciones que permitan el uso del video y de sus dispositivos visuales y las publicará en GooglePlay. TEMARIO 7.1 Tema 12: Audio, Video y Uso de Dispositivos visuales 7.1.1 Componente Media Player. Definición, características y aplicaciones. 7.1.2 Visualización de videos usando la vista Video. 7.1.3 Grabación de audio y video: Uso de Intents para grabar video. 17.2
Tema 14: Publicación en Google Play 7.2.1 Generación de APK firmado con el certificado digital. 7.2.2 Creación de la cuenta en Google Play. 7.2.3 Publicación de la aplicación
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
151
Audio, Video y Uso de Dispositivos visuales
Multimedia La capacidad de reproducir contenido multimedia es una característica presente en la práctica totalidad de las terminales telefónicas existentes en el mercado hoy en día. Muchos usuarios prefieren utilizar las capacidades multimedia de su teléfono, en lugar de tener que depender de otro dispositivo adicional para ello. Android incorpora la posibilidad de reproducir no sólo audio en diversos formatos, sino que también vídeo. Los formatos de audio soportados son los siguientes:
Con respecto al vídeo, los formatos soportados son: H.263 H.264 AVC MPEG-4 SP VP8
En esta sesión echaremos un vistazo a las herramientas necesarias para poder reproducir contenido multimedia (audio o vídeo) en una actividad. También veremos cómo añadir la capacidad a nuestra aplicación para la toma de fotografías, una característica perfectamente emulada por el emulador en las últimas versiones del Android SDK.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
152
Reproducción de audio La reproducción de contenido multimedia se lleva a cabo por medio de la clase MediaPlayer. Dicha clase nos permite la reproducción de archivos multimedia almacenados como recursos de la aplicación, en ficheros locales, en proveedores de contenido, o servidos por medio de streaming a partir de una URL. En todos los casos, como desarrolladores, la clase MediaPlayer nos permitirá abstraernos del formato así como del origen del fichero a reproducir. Incluir un fichero de audio en los recursos de la aplicación para poder ser reproducido durante su ejecución es muy sencillo. Simplemente creamos una carpeta raw dentro de la carpeta res, y almacenamos en ella sin comprimir el fichero o ficheros que deseamos reproducir. A partir de ese momento el fichero se identificará dentro del código como R.raw.nombre_Archivo. Para reproducir un fichero de audio tendremos que seguir una secuencia de pasos.
En primer lugar deberemos crear una instancia de la clase MediaPlayer. El siguiente paso será indicar qué fichero será el que se reproducirá. Por último ya podremos llevar a cabo la reproducción en sí misma del contenido multimedia.
Veamos primero cómo inicializar la reproducción. Tenemos dos opciones. La primera de ellas consiste en crear una instancia de la clase MediaPlayer por medio del método create(). En este caso se deberá pasar como parámetro, además del contexto de la aplicación, el identificador del recurso, tal como se puede ver en el siguiente ejemplo:
Reproducción de vídeo usando el control VideoView La reproducción de vídeo es muy similar a la reproducción de audio, salvo dos particularidades. En primer lugar, no es posible reproducir un clip de vídeo almacenado como parte de los recursos de la aplicación. En este caso deberemos utilizar cualquiera de los otros tres medios (ficheros locales, streaming o proveedores de contenidos). Un poco más adelante veremos cómo añadir un clip de vídeo a la tarjeta de memoria de nuestro terminal emulado desde la propia interfaz de Eclipse. En segundo lugar, el vídeo necesitará de una superficie para poder reproducirse. Esta superficie se corresponderá con una vista dentro del layout de la actividad. Existen varias alternativas para la reproducción de vídeo, teniendo en cuenta lo que acabamos de comentar. La más sencilla es hacer uso de un control de tipo VideoView, que encapsula tanto la creación de una superficie en la que reproducir el vídeo como el control del mismo mediante una instancia de la clase MediaPlayer. Este método será el que veamos en primer lugar. El primer paso consistirá en añadir el control VideoView a la interfaz gráfica de la actividad en la que queramos que se reproduzca el vídeo. Podemos añadir algo como lo siguiente el fichero de layout correspondiente:
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
153
Dentro del código Java podremos acceder a dicho elemento de la manera habitual, es decir, mediante el método findViewById(). Una vez hecho esto, asignaremos una fuente que se corresponderá con el contenido multimedia a reproducir. El control VideoView se encargará de la inicialización del objeto MediaPlayer. Para asignar un video a reproducir podemos utilizar cualquiera de estos dos métodos:
Una vez inicializado el control se puede controlar la reproducción con los métodos: start() stopPlayback() pause() seekTo() La clase VideoView también incorpora el método setKeepScreenOn(boolean)con la que se podrá controlar el comportamiento de la iluminación de la pantalla durante la reproducción del clip de vídeo. Si se pasa como parámetro el valor true ésta permanecerá constantemente iluminada. El siguiente código muestra un ejemplo de asignación de un vídeo a un control VideoView y de su posterior reproducción. Dicho código puede ser utilizado a modo de esqueleto en nuestra propia actividad. También podemos ver un ejemplo de uso de seekTo(), en este caso para avanzar hasta la posición intermedia del video.
En esta sección veremos en último lugar, tal como se ha indicado anteriormente, la manera de añadir archivos a la tarjeta de memoria de nuestro dispositivo virtual, de tal forma que podamos almacenar clips de vídeo y resolver los ejercicios propuestos para la sesión. Se deben seguir los siguientes pasos: En primer lugar el emulador debe encontrarse en funcionamiento, y por supuesto, el dispositivo emulado debe hacer uso de una tarjeta SD.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
154
Gráficos 2D y Aplicaciones Multimedia Las librerías android.graphics.drawable y android.view.animation son proporcionadas por Android para dibujar y animar imágenes y formas 2D.
Drawables Se refiere a todo aquello que se puede dibujar. Es la clase de la cual heredan una variedad de tipos de gráficos, incluyendo BitmapDrawable, ShapeDrawable, PictureDrawable, LayerDrawable y otros. Hay tres maneras distintas de instanciar una clase Drawable. Utilizar una imagen almacenada en el directorio de recursos de nuestro proyecto. un XML que define las propiedades del objeto para luego poder Utilizar recuperarlo mediante getDrawable() y el ID que se le asignó en el XML. Utilizando los constructores propios de la clase. o Lxas librerías android.graphics.drawable y android.view.animation son proporcionadas por Android para dibujar y animar imágenes y formas 2D.
ShapeDrawable Se utiliza para realizar realizar gráficos simples en 2D y aplicarles estilos directamente Desde el código de nuestra aplicación. Al ser una clase que hereda de Drawable, se puede utilizar en el mismo contexto que ésta. Se pueden realizar por lo tanto clases View que dibujen formas personalizadas gracias al métdo onDraw() que incluye la clase S hapeDr awable.
Crear un reporductor mediaplayer Crear una instancia de MediaPlayer y ejecutar el método start() pasando la referencia al recurso. MediaPlayer mp= MediaPlayer.create(getApplicationContext (), R.raw.bundle); mp.start();
Reproducir desde stream Crear una instancia de MediaPlayer y usar el método setDataSource()wcon la cadena que contiene el path al sitema local o la URL. Utilizar prepare() y después start()en la instancia. MediaPlayer mp = new MediaPlayer(); mp.setDataSource( PATH_TO_FILE); mp.prepare(); mp.start();
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
155
Grabar audio y video Para ello se utiliza la clase MediaRecorder.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
156
Publicación de software Para publicar nuestras aplicaciones primero tenemos que empaquetarlas. Antes de empaquetar debemos preparar el código y comprobar que todo esté correcto:
Nombre de la aplicación, icono y versión. Deshabilitar debugging en el AndroidManifest.xml (atributo android:debuggable="false" del tag de application). Eliminar cualquier mensaje de Log. Pedir sólo los permisos que de verdad la aplicación use, y no más de los necesarios. • Por supuesto, haber probado la aplicación en terminales reales, a
ser posible en más de uno. Antes de comenzar con nuestra publicación debemos aprender como funciona la herramienta de control de aplicaciones de google denominado “google play”
Google Play Services Es una aplicación del sistema de Android que nos permitirá tener el resto de aplicaciones de nuestro terminal siempre actualizadas, ya que se encargará de comprobar que todas las apps instaladas están en la última versión disponible. Las funciones principales de Google Play Services son la autentificación de servicios de Google, la sincronización de contactos, el acceso a la última configuración de privacidad del usuario, y los servicios basados en la ubicación de mayor calidad y menor potencia.
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
157
Modo de control de licencias por google play
Una vez publicado la aplicación la licencia se valida con la librería de google play cliente y este se comunica con el servidor de google
Firmar la aplicación android Para firmar la aplicación debes dar realizar el siguiente procedimiento Prepara tu APK
Cuando estés listo para realizar cambios en el APK, asegúrate de actualizar también el Código de versión de la aplicación para que los usuarios existentes reciban la actualización.
Utiliza la siguiente lista de verificación para asegurarte de que el nuevo APK esté listo para actualizar a los usuarios existentes:
El nombre de paquete del archivo APK actualizado debe ser el mismo que el de la versión actual.
El código de versión debe ser superior al código de la versión actual. Obtén más información sobre cómo crear versiones de tu aplicación.
La firma del archivo APK actualizado debe coincidir con la firma de la versión actual. Para comprobar que el archivo APK utiliza la misma certificación que la versión anterior, puedes ejecutar el siguiente comando en ambos archivos APK y comparar los resultados: $ keytool -genkey -v -keystore nombredenuestrakeystore.keystore -alias aliasdenuestrakeystore -keyalg RSA -keysize 2048 -validity 10000 Si los resultados son idénticos, significa que estás utilizando la misma clave y que puedes continuar. Si los resultados son diferentes, tendrás que volver a firmar el archivo APK con la clave correcta.
CIBERTEC
CARRERA DE ELECTRICIDAD
DESARROLLO DE APLICACIONES MÓVILES I
158
Publicar Aplicaciones 1. Ingresar a tu cuenta de Gmail 2. Ingresar a la consola de publicaciones de google play https://play.google.com/apps/publish/
1. Agregar un nombre 2. Dar click en Preparar Ficha de play store https://play.google.com/apps/publish/
3. Ubicar clave de API pública
CARRERAS PROFESIONALES
CIBERTEC
DESARROLLO DE APLICACIONES MÓVILES I
159
VII. BIBLIOGRAFÍA DEL CURSO
Básica GIRONÉS, Jesús Tomas 2013 El gran libro de Android 3era Edición. México: Alfa y Omega. GARGENTA, Marko 2011 Learning Android (245 pages) United States of America: O’Reilly Media, Inc .
HODSON, Ryan 2014 Android Programming Succinctle. United States of America: Syncfusion Inc. THOMAS, Erl 2010 Service Oriented Architecture: A field Guide to integrating XML and Web Services. United States of America Canada: Prentice Hall SMYTH, Neil 2014 Android 4.4 App Development Essentials (47 pages). Lean Publishing Bibliografía Electrónica SATYA, Komatineni y MACLEAN, Dave 2012 Expert Android. (Consulta: 22 de enero 2015) United States of America: Apress Inc. Recuperado de: http://androidbook.com/akc/display?url=ShowAttachmentsIMPURL&reportId=442 3&downerUserId=satya&order_by_format=name ANDROID Developer 2014 Sitio web oficial de desarrollo Android. (Consulta: 27 de Diciembre 2014)(http://developer.android.com/index.html ) LÓPEZ, Victoria 2010 Introducción a Android (117 páginas). (Consulta: 25 de enero 2015) España: Grupo Tecnología CM (Universidad Complutense de Madrid) Recuperado de: http://pendientedemigracion.ucm.es/info/tecnomovil/documentos/android.pdf
Complementaría MENG LEE, Wei 2013 Android Application Development Cookbook (385 pages). Indianápolis, Indiana EEUU: John Wiley & Sons, Inc. MENG LEE, Wei Beginning Android™ 4 Application Development . 2012 United States of America: John Wiley & Sons, Inc. APRESS AND Commonsware