Repaso Exámenes M08
Repaso Exámenes M08
Repaso Exámenes M08
Multimedia
1.1- Elementos básicos de una Activity, cómo lanzar una Activy y cómo pasar un
parámetro
En Android Studio, los layouts se crean utilizando archivos XML que describen la jerarquía
de vistas y cómo están organizadas. Estos archivos XML de layout se encuentran en el
directorio res/layout de tu proyecto.
1
Existen varios tipos de layouts predefinidos en Android que puedes utilizar para organizar
tus vistas:
● RelativeLayout: Organiza sus elementos en relación con otros elementos dentro del
layout o con el propio layout. Puedes especificar la posición de un elemento en
relación con otro, como a la derecha, a la izquierda, arriba o debajo.
● FrameLayout: Organiza sus elementos uno encima del otro, comenzando desde la
esquina superior izquierda. Es útil cuando necesitas superponer vistas o para
mostrar una única vista en el layout.
● TableLayout: Organiza sus elementos en filas y columnas, como una tabla. Puedes
especificar la cantidad de filas y columnas y cómo se distribuye el contenido en ellas.
2
1.5- Qué es un Toast
Un Toast en Android es una pequeña ventana emergente que proporciona una
retroalimentación breve y temporal al usuario. Los Toasts se utilizan para mostrar mensajes
cortos, como notificaciones o información de estado, sin interrumpir la interacción del
usuario con la aplicación. Por lo general, aparecen en la parte inferior de la pantalla y
desaparecen automáticamente después de un corto período de tiempo (unos segundos).
En Android Studio, puedes utilizar la clase Toast para crear y mostrar Toasts en tu
aplicación. Aquí hay un ejemplo de cómo crear y mostrar un Toast en Kotlin:
Tipos de servicios:
● Foreground o primer plano
● Background o segundo plano
● Bound o enlazado
3
1.7- Listado de servicios no multimedia de Android Studio
En este listado podemos acceder a 5 de los servicios más usados en Android Studio que no
son multimedia:
4
1.8- Desarrollo de Aplicaciones Híbridas.
1.9- SQLite
SQLite es un motor de base de datos ligero, de código abierto y autónomo, que
proporciona una solución de almacenamiento local para aplicaciones, incluidas las de
Android. No requiere un proceso de servidor separado, ya que se integra directamente en la
aplicación. SQLite utiliza un modelo de base de datos relacional y admite SQL para
consultas y manipulación de datos.
5
Para poder trabajar con SQLite tenemos que crear una clase que herede de
SQLiteOpenHelper
6
En esta clase que hemos creado es donde haremos la implementación de las operaciones
CRUD (Create Read Update Delete)
Insertar:
7
Leer
8
Actualizar
Borrar
9
1.10- Room
Room es una biblioteca de persistencia desarrollada por Google como parte de Android
Jetpack. Proporciona una capa de abstracción sobre SQLite para simplificar la gestión de
bases de datos en aplicaciones Android. Room facilita el acceso y manipulación de datos
almacenados localmente en dispositivos, mediante un conjunto de componentes como
Entidades, DAO (Data Access Objects) y bases de datos.
10
Para usar Room en Android Studio con Kotlin tenemos que hacer los siguientes pasos:
3. Crear la entidad: Define una clase de datos que represente una tabla en tu base de
datos. Anótala con @Entity y define una clave primaria:
11
4. Crear el DAO: Define una interfaz con las operaciones que realizarás en la tabla,
como insertar, actualizar, eliminar y consultar. Anota la interfaz con @Dao:
5. Crear la base de datos: Crea una clase abstracta que extienda de RoomDatabase.
Anota la clase con @Database, proporciona las entidades y define la versión de la
base de datos. Implementa un método abstracto para obtener el DAO:
12
6. Instanciar la base de datos: Utiliza la función Room.databaseBuilder() para crear una
instancia de tu base de datos en tu aplicación:
7. Usar el DAO: Accede al DAO desde tu base de datos y realiza las operaciones
deseadas en tus actividades o fragmentos:
13
1.11- Dónde almacenan SQLite y Room la base de datos en local
Tenemos que abrir el Device File Explorer:
14
1.12- Firebase Realtime Database
Firebase Realtime Database es un servicio de base de datos en tiempo real basado en la
nube y proporcionado por Google como parte de su plataforma Firebase. Este servicio
permite a los desarrolladores de aplicaciones almacenar y sincronizar datos entre
dispositivos y usuarios en tiempo real, lo que facilita la creación de aplicaciones
colaborativas y enriquecedoras para los usuarios.
Firebase Realtime Database utiliza un modelo de datos basado en JSON, lo que hace que
los datos sean fácilmente accesibles y modificables. La base de datos mantiene la conexión
en tiempo real con los dispositivos de los usuarios y actualiza automáticamente los datos
cuando se producen cambios, sin necesidad de realizar solicitudes explícitas.
Para conectarse a la BBDD y poder usarla debemos seguir los siguientes pasos:
15
3. Inicializar la referencia de la base de datos: En la actividad o fragmento, crea una
referencia a la instancia de la base de datos:
4. Escribir datos: Para guardar datos en Firebase Realtime Database, crea una
referencia a la ubicación donde deseas almacenarlos y utiliza setValue():
16
5. Leer datos: Para leer datos en tiempo real, agrega un ValueEventListener a la
referencia donde deseas escuchar las actualizaciones:
17
1.13- Cómo guarda la información en Firebase Realtime Database
Firebase Realtime Database es una BBDD NoSQL y utiliza un árbol JSON para almacenar
los datos de la base de datos. En este ejemplo podemos ver la BBDD de una app de
mensajes
18
1.14- AsyncTask
AsyncTask en Android Studio es una clase abstracta que facilita la ejecución de tareas en
segundo plano y la actualización de la interfaz de usuario en el hilo principal. Permite
realizar operaciones intensivas sin bloquear la interacción del usuario.
19
UF2 - Programación Multimedia
2.1- Arquitectura del sistema Android
20
2.2- Solicitar permisos para utilizar recursos multimedia
Para utilizar las funciones de grabación de audio, cámara y GPS en una aplicación Android,
debes solicitar los siguientes permisos en tu archivo AndroidManifest.xml:
● Usar el GPS: Para acceder a la ubicación del dispositivo a través del GPS,
necesitas los permisos ACCESS_FINE_LOCATION y/o
ACCESS_COARSE_LOCATION. El permiso ACCESS_FINE_LOCATION
proporciona una ubicación más precisa, mientras que
ACCESS_COARSE_LOCATION ofrece una ubicación menos precisa.
Agrega estas líneas dentro del elemento <manifest> de tu archivo AndroidManifest.xml para
solicitar los permisos necesarios.
21
Ten en cuenta que, a partir de Android 6.0 (API level 23), debes solicitar permisos en
tiempo de ejecución para funciones sensibles como las mencionadas anteriormente. Esto
significa que, además de declarar los permisos en AndroidManifest.xml, también debes
solicitarlos al usuario durante la ejecución de la aplicación antes de acceder a las funciones
correspondientes.
Te muestro cómo solicitar los permisos de grabación de audio, cámara y GPS en tiempo de
ejecución en una aplicación Android utilizando Kotlin.
22
Verificamos si tienen los permisos antes de solicitarlos:
23
● SoundPool: Esta clase se utiliza para cargar y reproducir pequeños archivos de
audio en Android. Está optimizada para su uso en aplicaciones que requieren la
reproducción simultánea de múltiples efectos de sonido, como juegos. SoundPool
permite la gestión eficiente de recursos al cargar previamente los sonidos en la
memoria y reutilizarlos cuando sea necesario. Es especialmente útil cuando se
trabaja con archivos de audio cortos y de baja latencia, como efectos de sonido o
clips cortos.
● MediaPlayer: en Android es una API unificada para reproducir audio y video desde
diferentes fuentes, como archivos locales, recursos en la aplicación o streams en
línea. Permite un control básico de la reproducción, como reproducir, pausar,
detener, buscar y ajustar el volumen. MediaPlayer es útil para aplicaciones que no
requieren un control de audio extremadamente preciso o de baja latencia, como
aplicaciones de música, video o podcast.
24
Vamos a reproducir el mismo archivo usando SoundPool:
25
2.8- Herramienta ExoPlayer
ExoPlayer es una biblioteca de reproducción multimedia de Android desarrollada por
Google, que ofrece una alternativa flexible y extensible a MediaPlayer. ExoPlayer soporta
características avanzadas como adaptación dinámica de bitrate, reproducción en segundo
plano y personalización de componentes. Es adecuado para aplicaciones de streaming y
permite la reproducción de formatos no compatibles con MediaPlayer. ExoPlayer es
ampliamente utilizado en aplicaciones que requieren mayor control y rendimiento en la
reproducción multimedia.
26
2.8- Qué es el protocolo RTP
El Protocolo de Transporte en Tiempo Real (RTP) es un estándar de comunicación de red
diseñado para la transmisión de datos multimedia en tiempo real, como audio, video y datos
interactivos, a través de redes IP. Utilizado comúnmente en aplicaciones de VoIP,
videoconferencia y streaming, RTP ofrece soporte para sincronización y detección de
pérdida de paquetes.
27
UF3 - Desarrollo de Juegos
3.1 Qué es un motor gráfico
Un motor gráfico o motor de videojuego es la representación gráfica de unas rutinas de
programación concretas, las cuales ofrecen un diseño en un escenario gráfico en 2D o 3D.
Actualmente, hay una gran variedad de motores gráficos, como Ogre (que es open source),
Doom Engine, Quake Engine, Unity, CryEngine, Source engine, Unreal engine, Game
Maker, etc.
● Algunos motores permiten crear juegos sin necesidad de escribir código. Tan solo es
necesario hacer uso de los diferentes mecanismos implementados y documentados
en su API. Algunos requieren del uso de su propio lenguaje de programación.
28
● Herramientas de creación especializadas: algunos de los motores se han
desarrollado con un carácter exclusivo, orientados en su finalidad, como pueden ser
videojuegos u otros tipos. Por ejemplo, GameMaker o ShiVa son para el desarrollo
exclusivo de aplicaciones de juegos. En el caso de Unity, es posible utilizarlo para
diferentes géneros.
● Según la licencia:
○ Motores privados (algunos con licencia gratuita)
○ Motores open source
En una aplicación bien diseñada, la interfaz de usuario es intuitiva, fácil de usar y atractiva
visualmente. Los elementos comunes de la UI incluyen botones, menús, barras de
herramientas, campos de texto, imágenes y gráficos. Estos componentes permiten a los
usuarios realizar acciones, ingresar datos, navegar por la aplicación y acceder a
información.
29
3.3- Qué es una animación
Una animación es el cambio de una o varias propiedades de un objeto que hacen percibirlo
con un aspecto distinto a lo largo del tiempo.
● OpenGL: se trata de una librería para gráficos de alto rendimiento 2D y 3D. Es una
de las más importantes. Android incluye soporte para su uso.
30
3.4- Qué es un Sprite
Un sprite es un objeto gráfico 2D utilizado en videojuegos y aplicaciones de animación para
representar personajes, elementos interactivos o efectos visuales. Los sprites son
imágenes, generalmente en formato bitmap, que pueden moverse, rotarse, escalarse y
animarse en la pantalla. Son fundamentales en el diseño de juegos 2D y en la creación de
interfaces de usuario ricas y dinámicas.
Los sprites se almacenan en hojas de sprites, que son archivos de imagen que contienen
múltiples elementos gráficos organizados en una cuadrícula. Al separar y manipular estas
imágenes individualmente en tiempo real, los desarrolladores pueden crear animaciones y
efectos visuales, mejorando la experiencia del usuario y la inmersión en el juego o
aplicación.
31
3.5- Componentes de un motor de juego
Un motor de juegos es una parte fundamental del código de programación de un juego. Este
motor gráfico se encarga de la mayor parte de los aspectos gráficos de un juego. Una de
sus tareas es establecer la comunicación y aprovechar todos los recursos que una tarjeta
gráfica ofrece.
● Librerías: son las librerías que se utilizan para el desarrollo de figuras, polígonos,
luces y sombras, etc.
● Assets: todos los modelos 3D, texturas, materiales, animaciones, sonidos, etc. Este
grupo representa todos los elementos que formarán parte del juego.
● Renderizado: todas las texturas y materiales en esta parte hacen uso de los
recursos diseñados para el motor gráfico. Esto mostrará el aspecto visual y potencial
de un motor gráfico.
● Sonidos: es necesario configurar dentro del motor cómo serán las pistas de audio.
El sonido del videojuego dependerá de la capacidad de procesamiento de estos
sonidos. Algunas de las opciones configurables son: modificación del tono,
repetición en bucle de sonidos (looping), etc.
32
● Inteligencia artificial: es una de las características más importantes que puede
desarrollar un motor gráfico. Esto añade estímulos al juego, permitiendo que el
desarrollo del mismo suceda en función de una toma de decisiones definida por una
serie de reglas. Además, define el comportamiento de todos los elementos que no
son controlados por el jugador usuario, sino que forman parte de los elementos del
juego.
● Sombreados y luces: el motor gráfico dota de colores y sombras a cada uno de los
vértices que forman parte de la escena.
Cuando se identifica una colisión, el motor gráfico puede desencadenar eventos o acciones
específicas, como reproducir sonidos, aplicar fuerzas físicas o modificar propiedades del
objeto. Los detectores de colisiones son fundamentales en el desarrollo de videojuegos y
aplicaciones interactivas, ya que facilitan la creación de comportamientos realistas y
dinámicos en función de las interacciones entre objetos, mejorando la experiencia del
usuario y la inmersión en el entorno virtual.
● Box Collider: Representa una caja delimitadora alrededor de un objeto. Es útil para
objetos con forma rectangular o cúbica. Detecta colisiones con otros objetos que
tengan colisionadores.
33
● Sphere Collider: Es una esfera que envuelve un objeto y detecta colisiones con
otros objetos con colisionadores. Funciona bien con objetos de forma esférica o
redondeada.
● Capsule Collider: Este colisionador tiene forma de cápsula y es ideal para objetos
cilíndricos o personajes humanoides. Detecta colisiones con otros objetos que
tengan colisionadores.
● Mesh Collider: Utiliza la malla del objeto para detectar colisiones, lo que permite
una detección más precisa para objetos con formas irregulares o complejas. Sin
embargo, es más costoso en términos de rendimiento.
34
3.9- Cuáles son las fases de desarrollo de un juego
La creación de un nuevo juego exige de una gran cantidad de tareas que se pueden
agrupar en distintas fases:
2. Diseño del código: en esta fase se especifican todas las capas de las que se
compone el juego. Se trata de separar todos los aspectos básicos del juego de la
funcionalidad del mismo. Esto es lo que se conoce como framework. El framework
definirá cómo será el manejo de las ventanas del juego. Permite asegurar que los
objetos ocupan el espacio correcto dentro de la ventana que corresponde. También
se encargará del manejo de eventos de entrada de usuario.
3. Diseño de los assets: es una de las fases más complicadas y que mayor
repercusión tiene en un juego. Hace referencia a la creación de los diferentes
elementos o modelos que se pueden utilizar dentro del juego: los personajes, los
logos, los sonidos, los botones, las fuentes, etc.
5. Pruebas: una de las fases más importantes. Es en este momento cuando se realiza
una comprobación de toda la aplicación con el fin de valorar el comportamiento del
juego y la aplicación correcta del resto de fases.
6. Distribución del juego: una vez finalizadas las fases de desarrollo, el objetivo es
que el producto sea distribuido. Para ello, es necesario exportar este juego de la
misma forma que una aplicación.
35
3.10- Qué es OpenGL
OpenGL (Open Graphics Library) es una especificación de una API (interfaz de
programación de aplicaciones) multiplataforma y de código abierto para el desarrollo de
aplicaciones de gráficos en 2D y 3D. Desarrollada por la organización Khronos Group,
OpenGL es ampliamente utilizada en la industria del videojuego, la visualización científica,
la simulación y otras áreas que requieren gráficos en tiempo real.
OpenGL proporciona una capa de abstracción entre el software y el hardware gráfico, lo que
permite a los desarrolladores crear aplicaciones gráficas sin preocuparse por las diferencias
entre las arquitecturas de GPU y sistemas operativos. La API ofrece una amplia gama de
funciones para el control de primitivas geométricas, texturas, shaders, iluminación,
transformaciones y otros aspectos del procesamiento gráfico.
36