Programación Multimedia Y Dispositivos Móviles - Cartagena99

Transcription

Programación multimediay dispositivos móvilesProgramación multimedia ydispositivos móviles

Programación multimediay dispositivos móvilesIntroducción . 61.Análisis de tecnologías para aplicaciones en dispositivos móviles . 61.1. Limitaciones que plantea la ejecución de aplicaciones en dispositivos móviles:desconexión, seguridad, memoria, consumo de batería, almacenamiento. 61.2.Tecnologías disponibles . 81.3. Entornos de trabajo integrado . 101.3.1. Registros de la aplicación, Logcat . 111.3.2. Poniendo en práctica: instalación de entorno de desarrollo . 121.4. Módulos para el desarrollo de aplicaciones móviles . 131.4.1. Android Studio: tipos de vista . 141.4.2. Archivos y carpetas de los módulos . 151.4.3. Poniendo en práctica: creando un proyecto . 161.5. Emuladores . 181.6. Integración en el entorno de desarrollo . 191.6.1. Poniendo en práctica: crear un dispositivo virtual con el emulador deAndroid Studio . 191.7. Configuraciones. Tipos y características. Dispositivos soportados . 231.8. Perfiles. Características. Arquitectura y requerimientos. Dispositivossoportados . 241.9. Modelo de estados de una aplicación para dispositivos móviles. Activo, pausay destruido . 291.9.1. Poniendo en práctica: ejecuta la aplicación desde Android Studio . 311.9.2. Poniendo en práctica: comprendiendo el ciclo de vida de una aplicación 321.9.3. Ciclo de vida de una aplicación: descubrimiento, instalación, ejecución,actualización y borrado. 331.10. Modificación de aplicaciones existentes . 351.10.1. Poniendo en práctica: descarga el código y realiza una modificación . 351.11. Utilización de entornos de ejecución del administrador de aplicaciones . 371.11.1. Poniendo en práctica: ejecuta la aplicación en un dispositivo real . 372.Programación de aplicaciones para dispositivos móviles . 392.1.Herramientas y fases de construcción. 392.1.1.Herramientas . 39

Programación multimediay dispositivos móviles2.1.2.2.2.Fases del desarrollo . 41Desarrollo del código . 452.2.1.Lenguajes de programación . 452.2.2.Entorno de trabajo . 462.2.3.Buenas prácticas . 462.3.Compilación, preverificación, empaquetado y ejecución . 502.3.1.2.3.2.Compilación . 50Preverificación . 542.3.3.Empaquetado . 552.3.4.Instalación y ejecución . 572.3.5. Depuración . 592.4.Interfaces de usuario. Clases asociadas . 612.4.1.Actividad . 612.4.2.Fragment. 792.4.3.Otros tipos de ventanas . 822.5.Contexto gráfico. Imágenes . 852.5.1.Drawables . 852.5.2.Crear y presentar drawables . 862.6.Eventos del teclado. 892.7.Técnicas de animación y de sonido . 902.8.Descubrimiento de servicios. 962.9.Bases de datos y almacenamiento . 1032.9.1.Persistencia. 1032.9.2Bases de datos en Android . 1052.9.3.Bases de datos en la nube . 1132.10.Modelo de hilos . 1162.11.Comunicaciones: clases asociadas. Tipos de conexiones . 1222.11.1.Gestión de la comunicación inalámbrica . 1232.12.Búsqueda de dispositivos. 1242.13.Búsqueda de servicios . 1322.14.Establecimiento de la conexión. Cliente-servidor . 1362.14.1.Envío y recepción de mensajes de texto. Seguridad y permisos . 136

Programación multimediay dispositivos móviles2.14.2.Envío y recepción de mensajes multimedia. Sincronización decontenidos. Seguridad y permisos . 1392.14.3.Tratamiento y control de conexiones HTTP y HTTPS. 1392.15.Complementos de los navegadores para visualizar el aspecto de un sitioweb en un dispositivo móvil. 1432.16.3.Pruebas y documentación. 1442.16.1.Pruebas unitarias . 1452.16.2.Pruebas instrumentales . 1462.16.3.Documentación . 146Utilización de librerías multimedia integradas. 1483.1.Conceptos sobre aplicaciones multimedia . 1483.2.Arquitectura del API utilizado . 1493.2.1.Arquitectura de una app de audio . 1503.2.2.Arquitectura de una app de vídeo . 1513.2.3.App captadora de audio o vídeo. Ejemplos. 1523.2.4.Arquitectura del sistema . 1543.3.Descripción e instalación de las librerías multimedia . 1553.4.Fuentes de datos multimedia. Clases . 1583.4.1.Formatos de audio y vídeo . 1583.4.2.Hardware . 1593.4.3.Fuentes de datos . 1603.5.Datos basados en el tiempo . 1613.5.1.3.6.Ejemplo: app grabadora de audio . 162Clips de audio, secuencias MIDI, clips de vídeo, entre otros . 1663.6.1.Clips de audio y vídeo . 1663.6.2.MIDI . 1703.7.Procesamiento de objetos multimedia. Clases. Estados, métodos y eventos . 1723.7.1. Reproducción de objetos multimedia. Clases. Estados, métodos yeventos . 1744.3.7.2.Protocolo de transmisión en tiempo real RTP . 1793.7.3.Control y mono . 181Motores de juegos: tipos y utilización . 184

Programación multimediay dispositivos móviles5.4.1.Conceptos de animación. Animación 2D y 3D . 1864.2.Arquitectura del juego. Componentes . 1874.3.Motores de juegos: tipos y utilización . 1884.4.Ventajas de la utilización de un motor de juegos . 1894.5.Áreas de especialización, librerías utilizadas y lenguajes de programación1914.6.Componentes de un motor de juego . 1934.6.3.Detector de colisiones . 2004.6.6.Motor de sonidos . 2044.7.1.API gráficos 3D . 207Desarrollo de juegos 2D y 3D . 2105.1.Entornos de desarrollo para juegos . 2105.2.Integración del motor de juegos en entornos de desarrollo . 2115.3.Conceptos avanzados de programación 3D . 2125.3.1.Sistemas de coordenadas . 2145.3.2.Modelos 3D. 2155.3.3.Formas 3D . 2165.3.4.Transformaciones. Renderización . 2175.5.Propiedades de los objetos: luz, texturas, reflejos, sombras. 2255.5.1.5.6.Utilización de shaders. Tipos y funciones . 228Aplicación de las funciones del motor gráfico. Renderización. 2295.7. Aplicación de las funciones del grafo de escena. Tipos de nodos y suutilización . 2295.8.Análisis de ejecución. Optimización del código . 230

Programación multimediay dispositivos móvilesIntroducciónA lo largo de los temas de este libro veremos el desarrollo de aplicaciones móviles enentorno Android con lenguaje Kotlin. El enfoque de este es completamente prácticodesde el primer momento, aportando los conceptos teóricos que aplicamos en eldesarrollo de una aplicación real.A este enfoque práctico lo acompaña la simulación de ponerse en el papel deldesarrollador de una empresa desarrollo de aplicaciones móviles, a la cual uno de susclientes le ha pedido un proyecto para desarrollar una aplicación de gestión de tareasllamada IlernaTodo.Como desarrollador, te enviarán diferentes casos de uso donde se indican los requisitosdel cliente y qué se espera que haga la aplicación.Comencemos este proyecto por los conceptos básicos y preparando el entorno paratrabajar.1. Análisis de tecnologíasdispositivos móvilesparaaplicacionesenEn este primer tema veremos las principales características y los tipos de dispositivosmóviles que podemos encontrar, sus limitaciones y su arquitectura, a la vez queexploraremos las herramientas necesarias para desarrollar aplicaciones paradispositivos móviles y cómo podemos ejecutar las aplicaciones sin necesidad dedisponer de un depósito físico.Al finalizar el tema siguiendo las prácticas, tendremos nuestro ordenador preparadopara continuar con el desarrollo de aplicaciones móviles.1.1. Limitaciones que plantea la ejecución de aplicaciones en dispositivosmóviles: desconexión, seguridad, memoria, consumo de batería,almacenamientoLos dispositivos móviles plantean serias limitaciones a la hora de ejecutar aplicacionesque debemos tener en consideración durante el desarrollo de la aplicación para tenerun producto de calidad y robusto.

Programación multimediay dispositivos móvilesEstas limitaciones hoy en día no vienen dadas tanto por la capacidad de procesamientoo memoria como por el entorno en el que se utilizan estos dispositivos. Entre ellas,definimos las más relevantes:DesconexiónAl tratarse de dispositivos que podemos llevar con nosotros en cualquier momento,lugar y permanentemente conectados, estos pueden sufrir desconexiones tanto deforma total como parcial, lo que, en el caso de las aplicaciones que utilicen datos de unservidor, provocará que se vean afectadas por la variabilidad de la conexión.La aplicación que desarrollemos debe controlar esta situación y poder ofrecer unmecanismo que asegure, en la medida de lo posible, la disponibilidad de los datos.SeguridadEn lo que se refiere seguridad física, la limitación viene dada por la propia virtud deldispositivo: al ser ligeros y fáciles de llevar, son a la vez susceptibles de ser másfácilmente sustraídos.En el ámbito de la seguridad de la información, este tipo de dispositivos son másvulnerables, al permitir conectarse a redes poco seguras o la posibilidad de instalaraplicaciones de dudosa procedencia, unido a la gran cantidad de sensores, comocámaras, GPS o micrófonos, de que disponen.En el desarrollo de aplicaciones debemos considerar usar los permisos mínimosnecesarios para el funcionamiento de la aplicación. En el caso de que desarrollemos unaaplicación con uso de datos, siempre deben viajar bajo una conexión segura o cifradapara evitar que los datos sean expuestos.Consumo de bateríaPor su propia naturaleza de ser lo más ligeros posible, la batería suele ser uno de loselementos más comprometidos, y el diseño de las aplicaciones debe tener enconsideración qué recursos utiliza en cada momento, liberando aquellos que no seannecesarios para ahorrar los tan preciados miliamperios de la batería.Memoria y almacenamientoA día de hoy, los dispositivos móviles cada vez incorporan más memoria y capacidad dealmacenamiento, aunque no por ello debemos desaprovecharla, ya que es un recurso

Programación multimediay dispositivos móvileslimitado que no podemos ampliar sin adquirir un nuevo dispositivo. Por ello, lasaplicaciones móviles deben optimizar el uso de los recursos, ya que también debecompartirlos con otras aplicaciones.1.2. Tecnologías disponiblesEn el desarrollo de aplicaciones móviles, a lo largo de los últimos años han aparecidotecnologías que nos ayudan a la creación de aplicaciones según las necesidades delproyecto que debamos afrontar. Normalmente, los creadores de cada sistema operativomóvil han designado el lenguaje y el entorno de desarrollo que se debe utilizar para lacreación de aplicaciones en su plataforma. Por ejemplo, Java era el único estándar paraAndroid hasta que en 2017 Google anunció Kotlin, y el IDE era Eclipse hasta que en el2013 pasó a ser Android Studio, basado en IntelliJ IDEA de JetBrains. De igual modo, eniOS se programaba en Objective-C hasta que se creó el nuevo lenguaje Swift en susmúltiples versiones, y el entorno de desarrollo es Xcode. Ya apenas hay terminalesWindows Phone o Blackberry, pero si necesitásemos desarrollar algo para esas u otrasplataformas, tendríamos que saber que cada una de ellas normalmente utilizará unlenguaje y un entorno diferentes.¿Qué interés hay en utilizar otras tecnologías diferentes a las de cada plataforma? Elmotivo es ahorrar recursos. Imaginemos una empresa dedicada a programar juegos paraAndroid e iOS. Tiene dos opciones: la primera es contratar un equipo de desarrolladoresAndroid nativos y otro de desarrolladores iOS nativos que paralelamente desarrollen elmismo juego pero en plataformas diferentes, multiplicando por dos el coste en horas;la segunda es utilizar una tecnología híbrida que se programe una vez y funcioneigualmente en iOS y Android, con lo que solo se necesita un equipo de desarrollo híbrido.La última opción parece prometedora, pero conlleva algunos inconvenientes: la mayoríade las tecnologías híbridas están basadas en web, es decir, se crea una especie deaplicación web que se mostrará en el dispositivo como si fuese nativa, utilizando algunaslibrerías para el acceso al hardware, como la cámara, etcétera. Esto hace que seanaplicaciones menos potentes, que no puedan acceder a ciertos tipos de hardware y quesean más lentas. Quizá por ello, estas tecnologías son populares durante un tiempo yluego dejan de usarse, lo que supone que los programadores tengan que cambiarconstantemente de tecnología, impidiendo que ganen experiencia.Otras tecnologías como Unity para juegos o Xamarin para aplicaciones son máspotentes. Sin embargo, no son públicas e implican un gasto de licencia. Otro aspectopara tener en cuenta es que las plataformas móviles evolucionan rápidamente y notienen ningún interés en ser compatibles con los frameworks híbridos ya existentes. Sieres un programador nativo, podrás adaptarte rápidamente a las nuevas interfaces o

Programación multimediay dispositivos móvilesfuncionalidades, tendrás documentación y ejemplos, pero si utilizas un framework,tendrás que esperar a que los creadores del framework saquen una actualizacióncompatible con la nueva versión del sistema operativo.1.2.1. Desarrollo de aplicaciones nativasComo hemos mencionado antes, las aplicaciones nativas son aquellas que seimplementan en el lenguaje específico que facilita la plataforma/fabricante para eldesarrollo. Por ejemplo, para Android tenemos Java y Kotlin sobre Android Studio. En laplataforma de Apple para iPhone nos encontramos con Objective-C en las aplicacionesantiguas y Swift en las nuevas, sobre el entorno Xcode.1.2.2. Desarrollo de aplicaciones híbridasLas aplicaciones híbridas son aquellas en las que un mismo código pueda compilarsepara dos o más plataformas diferentes, ahorrando recursos de desarrollo. Podemosmencionar algunas de ellas:Plataformas de oftUnityC#La mayoría de plataformas de escritorio,Unitymóviles y de juegos.TechnologiesFluterDartGoogleIonicJavaScript Open sourceReact Native JavaScript FacebookPWAJavaScript GoogleAndroid, iOS y Windows.Android, iOS, Windows, Mac, Linux, Web.Android, iOS, Windows, Web.Android, iOS, UWP, Web.Android, iOS.

Programación multimediay dispositivos móviles1.3. Entornos de trabajo integradoEn este apartado presentamos qué es un entorno de trabajo integrado o, como máscomúnmente se suele mencionar con sus siglas del inglés, un IDE (integrateddevelopment environment).Un IDE no es más que una aplicación informática que agrupa un conjunto deherramientas para facilitar el desarrollo de aplicaciones, acompañado de una interfazgráfica que facilite su uso con la finalidad de aumentar la productividad.El IDE oficial para el desarrollo de aplicaciones en Android es Android Studio, basado enla herramienta de desarrollo IntelliJ que se ha modificado incluyendo aquellas funcionesespecíficas que mejoran la productividad en el desarrollo de aplicaciones para Android.Algunas de estas funciones son: Integración con el emulador, que veremos en unidades posteriores. Instant run, que permite ver cambios de código sin reiniciar la aplicación. Desarrollo unificado para todos los dispositivos Android (móvil, TV, smartwatch,Android Auto). Editor de código inteligente, con autocompletado. Control de versiones del código integrado.Todas las herramientas que ofrece Android Studio se agrupan en una interfaz gráfica,las más importantes las podemos identificar en la siguiente imagen:

Programación multimediay dispositivos móviles5214361. Editor de código: en esta sección podremos escribir y modificar el código de losdiferentes archivos que componen la aplicación. Esta sección puede cambiardependiendo del tipo de archivo que editemos.2 y 3. Ventanas de herramientas: cambian en función de la herramienta que hemosseleccionado, en ellas podemos encontrar la administración del proyecto.4. Barra de ventana de herramientas: permite expandir o contraer las ventanas deherramientas que podemos ver en las secciones 2 y 3.5. Herramientas de compilación y ejecución de la aplicación Android: en esta barrapodemos ver en qué dispositivo ejecutamos la aplicación.6. Barra de estado: nos mostrará los mensajes de información y advertencias que semuestran en los diferentes procesos que ejecuta el IDE.1.3.1. Registros de la aplicación, LogcatEl IDE de Android Studio tiene multitud de herramientas que descubriremos a lo largode las siguientes lecciones, según las necesitemos, aunque en particular la herramientade registro de aplicación o Logcat tienen una utilidad fundamental durante el desarrollode las aplicaciones, para solucionar y averiguar posibles errores.

Programación multimediay dispositivos móvilesLa ventana de Logcat que podemos encontrar en la sección inferior muestra losmensajes del sistema a la vez que los mensajes propios de la aplicación que podemosañadir con la clase Log.Durante la ejecución de la aplicación se pueden producir una gran cantidad de mensajes,de modo que podemos aplicar filtros para localizar los mensajes que son de nuestrointerés: en la barra superior de esta misma ventana podemos filtrar por el paquete queidentifica a la aplicación, por nivel (debug, info, error, warning) e incluso aquellosmensajes que contengan una palabra concreta.1.3.2. Poniendo en práctica: instalación de entorno de desarrolloYa conocemos qué es un IDE y que es nuestra herramienta principal para desarrollaraplicaciones, de modo que os invito a instalar Android Studio para poder seguir losejemplos que mostraremos a lo largo de los temas.Descargar Android Studio desde la web oficial en el siguiente enlace:https://developer.android.com/studioSu instalación es muy sencilla: desde en enlace de descarga seleccionamos el tipo dedescarga que corresponda a nuestro sistema, que debe cumplir con los requisitosmínimos para poder ejecutarlo:

Programación multimediay dispositivos móvilesSistema operativoMemoria RAMEspacio en discoWindows 7/8/10 64 bits4 GB mín. / 8 GB recom.2 a 4 GB libresMac OSX 10.10 o superior4 GB mín. / 8 GB recom.2 a 4 GB libresLinux basado en Debian4 GB mín. / 8 GB recom.2 a 4 GB libresEs importante contar con bastante memoria RAM y espacio en disco para poder trabajarde una forma fluida, teniendo en cuenta que, al utilizar dispositivos virtuales, consumirátambién bastante memoria y disco.1.4. Módulos para el desarrollo de aplicaciones móvilesLos proyectos de Android se dividen en módulos que contienen los ficheros de código,de recursos y de compilación necesarios para la construcción de la aplicación, de modoque un proyecto Android al menos constará de un módulo.Los módulos permiten dividir el proyecto en funcionalidades, permitiendo que podamoscrear bibliotecas de código que se comparten en otros módulos del proyecto o inclusode otros proyectos.Como ejemplo supongamos que desarrollamos una aplicación que es compatible conmóviles y con smartwatch: la base de funcionalidades de la aplicación será la misma paraambas aplicaciones, pero la interfaz de usuario cambiaría. Podemos crear tres módulos:uno contendrá las funciones compartidas de ambos dispositivos y crearemos dosmódulos más para cada dispositivo, de modo que compartimos código en ambasaplicaciones, facilitando el desarrollo, test y ampliaciones futuras.Un proyecto puede tener varios módulos, nos permiten dividir el código de laaplicación y reutilizarlo.En Android Studio podemos crear diferentes tipos de módulos siguiendo la ruta File New New Module, de los cuales algunos son:

Programación multimediay dispositivos móviles Módulos de aplicación: por defecto, al crear un nuevo proyecto,automáticamente se nos creará un módulo de aplicación. Según el tipo dedispositivo pueden ser: Modulo Wear, Android TV, Android Things, Phone oTablet. Este tipo de módulo contiene los ficheros y código específico para el tipode dispositivo. Dentro del proyecto podemos tener varios módulos de aplicación,dependiendo de si estamos desarrollando una ampliación compatible con variostipos de dispositivos. Módulo de biblioteca (library): creamos módulos de este tipo cuando el códigoque contienen se comparte con otros módulos, de modo que podamos reutilizarel código. Este tipo de módulos deben ir acompañados o utilizarse comodependencia en módulos de tipo aplicación, ya que por sí solos no sonejecutables en los dispositivos.1.4.1. Android Studio: tipos de vistaPara visualizar los módulos y los ficheros que los componen, Android Studio nos ofrecevarios tipos de vistas que podemos cambiar con el menú desplegable de la partesuperior de la ventana de proyecto.Vista de Android: muestra una vista simplificada de la jerarquía de los ficheros delproyecto, con los elementos más relevantes en el desarrollo deuna aplicación Android.Vista de proyecto: esta ofrece un mayordetalle de la jerarquía completa de las carpetas y archivos quecompone el proyecto. Esta vista detallada no es la más cómoda paratrabajar durante el desarrollo, pero es útil conocerla cuandonecesitamos editar un fichero concreto que no podemos localizar enla vista anterior.

Programación multimediay dispositivos móviles1.4.2. Archivos y carpetas de los módulosComo hemos comentado anteriormente, los módulos contienen los archivos de códigoy los recursos que componen la aplicación. En función del tipo de módulo, podemosencontrar diferentes carpetas que organizan el contenido. Los más relevantes son: Java: contiene el código de la aplicación tanto en lenguaje Java como en Kotlin.Dentro del código podemos encontrar las clases de controladores, funciones eincluso las pruebas unitarias, todo ello organizado en paquetes Java. Res: dentro de este módulo encontramos aquellos archivos referentes al diseñode las pantallas, traducciones de textos, estilos, gráficos e imágenes quecomponen la aplicación. Este módulo se divide en carpetas para organizar elcontenido y que sea fácilmente localizable. Según el tipo de recurso,encontramos las siguientes:-drawable: almacena recursos del tipo imágenes o gráficos en diferentesformatos (PNG, JPG, BMP, etcétera) o vectoriales en formato XML.-layout: encontramos los ficheros que definen el diseño de las pantallas de laaplicación, en formato XML.-values: en esta carpeta tenemos varios ficheros que almacenan los estilos ycódigos de colores usados en la aplicación, así como los textos que se utilizanen la aplicación para su posterior traducción.-minimap: contiene los archivos gráficos del icono de la aplicación, podemosver que existen varios en función de la resolución de pantalla del dispositivodonde se ejecute la aplicación. Manifests: encontramos el archivo AndroidManifest, en este archivo se definenla configuración y otros aspectos de la aplicación que estamos desarrollando, asícomo los permisos que utilizará el dispositivo. Gradle Scripts: esta sección agrupa los ficheros necesarios para la compilaciónde la aplicación, en la que podemos encontrar al menos dos: uno para lacompilación del proyecto y otro para cada módulo que contenga el proyecto.Estos ficheros los veremos con mayor detalle en los siguientes capítulos, dondehablaremos de la fase de compilación.

Programación multimediay dispositivos móviles1.4.3. Poniendo en práctica: creando un proyectoPara comenzar el desarrollo de cualquier aplicación, deberemos crear un proyecto parafamiliarizarnos con el entorno y la estructura. Comenzamos por crear un proyectollamado IlernaTodo al que, a lo largo de los siguientes capítulos, le añadiremosfuncionalidad hasta crear una aplicación real y funcional.Al arrancar Android Studio, en la página de bienvenida seleccionamos la opción Start anew Android Studio Project.En el siguiente paso nos muestra una serie de plantillas predefinidas, según el tipo deaplicación que vamos a desarrollar. Para este proyecto sele

En este primer tema veremos las principales características y los tipos de dispositivos móviles que podemos encontrar, sus limitaciones y su arquitectura, a la vez que . iOS se programaba en Objective-C hasta que se creó el nuevo lenguaje Swift en sus múltiples versiones, y el entorno de desarrollo es Xcode. Ya apenas hay terminales .