TFG Wei Zheng
TFG Wei Zheng
TFG Wei Zheng
de Madrid
Escuela Técnica Superior de
Ingenieros Informáticos
Tutor:
Vicente Martinez Orga
Departamento de Inteligencia Artificial
ETSI Informáticos
Universidad Politécnica de Madrid
Resumen
Hoy en día, las aplicaciones gratis tienen las siguientes características:
publicidad, obtención de los datos privados, la necesidad de internet y la
ocupación de la aplicación. Mi idea es diseñar una aplicación Android sencilla,
solamente necesita una pequeña parte de la memoria, sin necesidad de internet,
aunque estás conectado a internet, no te recogerá los datos privados tampoco
te aparecerá las publicidades.
El objetivo principal de este proyecto es diseñar una aplicación de reproductor
de música local para el sistema operativo Android, la aplicación es compatible
en cualquier dispositivo de Android (Tablet, móvil, tv…) adaptándose de su
dimensión. Utilizando la herramienta “Android Studio” para debugear y
realización de prueba en el simulador. Por otra parte, el lenguaje “JAVA” para
implementar las funcionalidades y XML para la interfaz gráfica.
Las funcionalidades de esta aplicación son: acciones de pausa, siguiente y
anterior, obtener una lista de música local acompañado con el nombre, el
cantante, el álbum y la duración de la música, los usuarios podrán deslizar la
pantalla para navegar la lista la última funcionalidad es modo de reproducir las
músicas, aleatorio o por el orden de la lista.
i
Abstract
Nowadays, free applications feature characteristics such as advertising,
obtaining user’s private data, the need for internet connectivity, and storage
space. My idea is to design a simple Android application that requires little
storage and does not require internet access. It will not request any personal
information and it will not generate any advertisement. This project's main
purpose is to provide a local music player for Android systems. The software
will be compatible with any Android devices including tablets, phones and
televisions, adapting to any screen size. To debug and test on the simulator,
Android Studio will be utilized. The functionality will be constructed in Java,
while the graphical interface will be done in XML. This application allows
users to play and pause songs, skip and return to them, and create local
playlists with the name, performer, album, and duration of the playlist. Users
will be able to navigate through by scrolling across the screen, and there will
be an option to shuffle the playlist.
ii
Tabla de contenidos
1 Introducción y objetivos ....................................................................1
1.1 Introducción ....................................................................................... 1
1.2 Objetivos ............................................................................................ 2
2 Estado de arte....................................................................................3
2.1 Android .............................................................................................. 3
2.1.1 Introducción a Android ................................................................ 3
2.1.2 Arquitectura de la plataforma “Android”....................................... 3
2.1.3 Conocimientos utilizados el diseño ............................................... 6
2.2 Herramienta “Android Studio” ............................................................ 8
2.3 Java ................................................................................................... 9
2.4 XML (Extensible Markup Language) ................................................. 10
2.5 Git .................................................................................................... 11
2.6 características de la aplicación. ........................................................ 11
2.6.1 Restricciones .............................................................................. 11
2.6.2 Entorno de desarrollo................................................................. 12
3 Análisis de requisitos .......................................................................12
3.1 Requisitos ........................................................................................ 12
3.2 Tablas de funcionamientos ............................................................... 13
3.3 Diagrama del funcionamiento y estructura de la aplicación .............. 16
4 Desarrollo ........................................................................................17
4.1 Diseño .............................................................................................. 17
4.1.1 Esquema de la página principal ................................................. 17
4.2 Implementación ................................................................................ 19
4.2.1 Creación del proyecto ................................................................. 19
4.2.2 Interfaz principal........................................................................ 22
4.2.2.1 Preparación de las imágenes ................................................... 22
4.2.2.2 Preparación de los recursos de String ..................................... 22
4.2.2.3 Implementación del diseño...................................................... 23
4.2.2.4 Obtención de música local ...................................................... 29
4.2.2.5 Concepto de reproductor de audio en Android ........................ 30
4.2.2.6 Implementación de la función Reproducir/Pausar .................. 30
4.2.2.7 Implementación de modo de reproducción .............................. 32
4.2.2.8 Implementación de la canción anterior y siguiente canción ..... 33
4.2.2.9 Implementación de avisos ....................................................... 34
5 Pruebas ............................................................................................36
6 Resultados y conclusiones ...............................................................40
7 Análisis de Impacto .........................................................................41
8 Bibliografía ......................................................................................42
iii
9 Anexo ..............................................................................................43
iv
Tabla de ilustraciones
Ilustración 1 merado de los sistemas operativos de móviles ............................ 1
Ilustración 2 Logo de Android ......................................................................... 3
Ilustración 3 Arquitectura de Android ............................................................. 4
Ilustración 4 Diagrama de funcionamiento de MediaPlayer ............................. 7
Ilustración 5 Imagen del editor de diseño ........................................................ 8
Ilustración 6 Imagen del emulador de Android Studio ..................................... 9
Ilustración 7 Logo de JAVA ........................................................................... 10
Ilustración 8 Imagen de fichero de XML ........................................................ 10
Ilustración 9 Logo de Git ............................................................................... 11
Ilustración 10 Diagrama de control ............................................................... 13
Ilustración 11: diagrama de funcionamiento ................................................. 16
Ilustración 12 Diagrama de estructura.......................................................... 16
Ilustración 13 Esquema de página inferior .................................................... 17
Ilustración 14 Esquema de página superior .................................................. 18
Ilustración 15 Esquema de componente ........................................................ 18
Ilustración 16 Esquema de aviso ................................................................... 19
Ilustración 17 Imagen de la creación del proyecto ......................................... 19
Ilustración 18 Campos a rellenar para la creación del proyecto ..................... 20
Ilustración 19 Imagen de la estructura del proyecto ...................................... 20
Ilustración 20 AndroidManifiest.xml ............................................................. 21
Ilustración 21 Imagen de la carpeta layout.................................................... 21
Ilustración 22 Recursos de las imágenes ....................................................... 22
Ilustración 23 Recursos de string .................................................................. 22
Ilustración 24 Imagende OnCreate() .............................................................. 23
Ilustración 25 Implementación del parte inferior ........................................... 23
Ilustración 26 Resultado del parte inferior en el emulador ............................ 24
Ilustración 27 Resultado de la imagen del disco ............................................ 24
Ilustración 28 Implementación de la imagen del disco................................... 24
Ilustración 29 Resultado del nombre de la canción y la artista ...................... 24
Ilustración 30 Implementación del nombre de la canción y la artista ............ 25
Ilustración 31 Resultado de los botones ........................................................ 25
Ilustración 32 Implementación de la imagen de play ..................................... 26
Ilustración 33 Implementacion del layout superior ........................................ 26
Ilustración 34 Implementación del adaptador ............................................... 26
Ilustración 35 Implementación de ViewHolder............................................... 27
Ilustración 36 Constructor del adapter ......................................................... 27
Ilustración 37 Implementación de OnCreateViewHolder ................................ 27
Ilustración 38 Implementación de los elementos utilizando CardView ........... 28
Ilustración 39 Implementación de onBindViewHolder ................................... 28
Ilustración 40 Implementación de onClick() .................................................. 28
Ilustración 41 Constructor de MusicBean ..................................................... 29
Ilustración 42 Implementación de searchLocalMusic para buscar la media de
audio. ........................................................................................................... 29
Ilustración 43 Estado de los botones cuando está en pausa .......................... 30
Ilustración 44 Estado de los botones cuando está reproduciendo una canción
..................................................................................................................... 31
Ilustración 45 Implementación del boton play ............................................... 31
Ilustración 46 Implementación para pausar la musica .................................. 32
Ilustración 47 Implementación para reproducir la musica ............................ 32
Ilustración 48 Implementación del modo secuencial ..................................... 33
Ilustración 49 Implementación de modo secuencial ...................................... 33
v
Ilustración 50 Implementación del modo aleatorio ........................................ 33
Ilustración 51 Implementación de la canción anterior ................................... 33
Ilustración 52 Implementación de la canción siguiente ................................. 34
Ilustración 53 Resultado de la ventana de aviso cuando ............................... 34
Ilustración 54 Implementación de la ventana para la reproducir una canción
..................................................................................................................... 34
Ilustración 55 Ventana de aviso de la última canción .................................... 35
Ilustración 56 Implementación de aviso para la última canción .................... 35
Ilustración 57 Ventana de aviso de la primera canción ................................. 36
Ilustración 58 Implementación de aviso para la primera canción .................. 36
Ilustración 59 Imagen del emulador Nexus 5x ............................................... 37
Ilustración 60 Imagen de Samsung Galaxy tab a8 2019 ................................ 37
Ilustración 61 Imagen de la interfaz cuando no se ha accedido el permiso de
memoria........................................................................................................ 38
Ilustración 62 Imagen de la configuración de permisos ................................. 39
Ilustración 63 Ventana de Logcat .................................................................. 39
Ilustración 64 Codigos de la clase MusicBean ............................................... 43
Ilustración 65 Codigos para visualización de los botones play, last y next ..... 44
vi
1 Introducción y objetivos
1.1 Introducción
1
1.2 Objetivos
2
2 Estado de arte
2.1 Android
En primer momento fue desarrollado por Android Inc, luego adquirido por
Google en 2005 y presentado dos años después, en 2007, para mejorar los
estándares abiertos en los dispositivos móviles. El código fuente principal de es
conocido comúnmente como Android Open Source Project (AOSP) y se destaca
como el sistema operativo móvil más utilizado del mundo con un porcentaje de
mercado de más del 90% en 2018, un número que le sitúa muy por encima de
IOS, competencia directa.1
3
Ilustración 3 Arquitectura de Android
1. Kernel de Linux
4
2. Capa de abstracción de hardware (HAL)
Para dispositivos con Android 5.0 [4] (API nivel 21) y versiones posteriores,
cada aplicación ejecuta sus propios procesos con sus propias instancias
de Android Run Time (ART). El ART se escribió para ejecutar varias
máquinas virtuales en dispositivos con poca memoria mediante la
ejecución de archivos DEX, un formato de código de bytes diseñado
específicamente para Android y optimizado para ocupar un espacio de
memoria mínimo.
5
6. Apps del sistema
)R%RHVSMHMRGPY]IYRGSRNYRXSFʜWMGSHIETPMGEGMSRIWTEVEGSVVISIPIGXVʭRMGS
717 GEPIRHEVMS REZIKEGMʭR [IF ] GSRXEGXSW IRXVI SXVSW IPIQIRXSW 0EW
ETPMGEGMSRIWMRGPYMHEWIRPETPEXEJSVQERSXMIRIRYRIWXEHSIWTIGMEPIRXVIPEW
ETPMGEGMSRIWUYIIPYWYEVMSIPMNIMRWXEPEV4SVPSXERXSPEETPMGEGMʭRI\XIVRETYIHI
GSRZIVXMVWIIRIPREZIKEHSV[IFTVIHIXIVQMREHSHIPYWYEVMSIPWMWXIQEHI717
SMRGPYWSIPXIGPEHS
x CardView:
Las aplicaciones a menudo necesitan mostrar datos en contenedores de
estilo similar. Estos contenedores se utilizan a menudo en listas para
contener información de cada elemento. El sistema proporciona la API
CardView como una manera fácil de ver la información de la tarjeta que
tienen un aspecto coherente en la plataforma Estas tarjetas tienen una
elevación predeterminada por encima del grupo de vistas que las contiene,
por lo que el sistema dibujará una sombra debajo de ellas. Las tarjetas
proporcionan una manera simple de incluir un conjunto de vistas al
mismo tiempo que proporcionan un estilo coherente para el contenedor.8
dinamicas-android-usando-recycler-view-card-view).
6
x TextView: Es un widget que muestra un texto al usuario como su
nombre indica. Claramente, esto la convierte en una de las vistas de
interfaz de usuario más utilizadas para colocar títulos, encabezados,
texto de información, etiquetas y más.9
7
x Toast: Es un aviso proporciona información simple sobre una acción en
una pequeña ventana emergente. Solo ocupa la cantidad de espacio
necesario para el mensaje, y la actividad en curso permanece visible y
admite la interacción. Los avisos desaparecerán automáticamente
después de que haya pasado el tiempo de espera.11
8
x Soporte para programar aplicaciones para Android Wear [5].
x Un dispositivo virtual de Android que se utiliza para ejecutar y probar
aplicaciones.
2.3 Java
9
dispositivo. Este es el significado de ser capaz de escribir un programa una vez
y que pueda ejecutarse en cualquier dispositivo.13
10
2.5 Git
Hoy en día, Git [6] es, con diferencia, el sistema de control de versiones moderno
más utilizado del mundo. Git es un proyecto de código abierto maduro y
mantenido activamente, desarrollado originalmente por Linus Torvalds, creador
del popular sistema operativo kernel de Linux, en 2005. Una cantidad
impresionante de proyectos de software empresarial que dependen de Git para
el control de versiones, incluidos proyectos comerciales y de código abierto. Los
desarrolladores que han trabajado con Git cuentan con una buena
representación en la base de talentos disponibles para el desarrollo de software,
y Git funciona perfectamente en múltiples sistemas operativos y entornos de
desarrollo integrados (IDE).
Git, que tiene una arquitectura distribuida, es un ejemplo de un sistema de
control de versiones distribuido (DVCS). En lugar de tener un espacio único
para todo el historial de versiones del software, como es común en los sistemas
de control de versiones populares como CVS o Subversión (también conocido
como SVN), en Git, el código de cada desarrollador también es un archivo que
puede mantener un historial completo de todos cambios.
Además de contar con una arquitectura distribuida, Git se ha diseñado teniendo
en cuenta el rendimiento, la seguridad y la flexibilidad.15
2.6.1 Restricciones
x El sistema operativo del dispositivo tiene que ser “Android”, versión 5.0
Lollipop o superior.
x La aplicación se ejecutará en el local, por tanto, no es necesario tener
una conexión a internet.
x Permitir los accesos de lecturas y escrituras de la aplicación en la
memoria.
11
2.6.2 Entorno de desarrollo
3 Análisis de requisitos
3.1 Requisitos
12
o Si el usuario ha seleccionado la primera canción y pulsa el
botón de “last”, la aplicación proporcionará un aviso.
o Si el usuario ha seleccionado la última canción y pulsa el
botón “next”, la aplicación proporcionará un aviso.
13
Dependencias x REQ01
comentario Mostrar una lista de canciones con las informaciones
adicionales como nombre, cantante, álbum y duración de
cada canción.
El usuario podrá deslizar la pantalla para navegar las
canciones.
Si las informaciones son demasiadas largas, las descripciones
se desplazarán automáticamente para mostrar las
informaciones adicionales.
14
Dependencias x REQ01
x REQ02
x REQ03
x REQ05
REQ08 Aviso
Descripción La aplicación proporcionará una pequeña ventana de aviso
Dependencias x REQ06
x REQ07
15
3.3 Diagrama del funcionamiento y estructura de la
aplicación
16
4 Desarrollo
4.1 Diseño
17
Esquema de página superior
En la parte superior de la pantalla,
presentará una lista con las canciones
ordenadas mediante los números.
Para visualización de la lista, cada
componente de la lista tiene forma de
tarjeta. Los usuarios podrán deslizar la
pantalla para navegar la lista de
canciones.
Esquema de componente
Cada componente de la lista tendrá el
nombre de la canción, el artista de la
canción, el álbum de la canción y la
duración de la canción.
Ilustración 15 Esquema de
componente
18
Esquema de aviso
En la parte inferior de la pantalla,
proporcionará una pequeña
ventana de notificación/ aviso.
Cuando el usuario realiza
algunas acciones.
4.2 Implementación
19
2. Cliquear en Next, y rellenar los campos necesarios. En la versión de
Android elegimos 5.0 “Lollipop”.
20
Normalmente la mayor parte del tiempo y fuerzas las usaremos en la
carpeta src(Source). Dentro de ella se encuentra la carpeta main, la cual
contiene todos los archivos fuente Java para nuestra aplicación. La
carpeta res (Resources) que contiene los recursos necesarios para el
proyecto (iconos, sonido, diseños, etc.) y el archivo AndroidManifest.xml.
AndroidManifest es un archivo XML que contiene nodos descriptivos
sobre las informaciones de una aplicación Android. Como los building
blocks existentes, la versión de SDK usada, los permisos necesarios para
ejecutar algunos servicios y muchas más.
Para este proyecto habría que añadir los permisos de lectura y escritura
en la memoria de la tarjeta externa (SD card).
Ilustración 20 AndroidManifiest.xml
21
4.2.2 Interfaz principal
22
4.2.2.3 Implementación del diseño
23
Ilustración 26 Resultado del parte inferior en el emulador
o Parte inferior
En la parte inferior, utilizando ImageView para mostrar un icono del disco
centralizado verticalmente.
24
Ilustración 30 Implementación del nombre de la canción y la artista
Los más importantes de esta parte son los botones (next, last, play, mode)
estas imágenes están guardadas en res/drawable, los botones están
alineados con el borde lateral derecho al mismo nivel vertical.
25
Ilustración 32 Implementación de la imagen de play
o Parte superior
26
Dentro del adapter:
27
Ilustración 38 Implementación de los elementos utilizando CardView
28
4.2.2.4 Obtención de música local
Por otra parte, utilizando cursor del fichero para obtener los archivos de tipo
“MediaStore.Audio.Media”.
29
4.2.2.5 Concepto de reproductor de audio en Android
30
Cuando el usuario haga clic en el botón de “play” o toca cualquier canción de la
lista, la interfaz principal deberá de cambiar el botón de “play” a “pause”
utilizando la función “setBackgroundResource” con la imagen de “pause”
guardada previamente en res/drawable, además, reproducir la música.
31
Ilustración 46 Implementación para pausar la musica
32
Ilustración 48 Implementación del modo secuencial
33
Ilustración 52 Implementación de la canción siguiente
34
Ilustración 55 Ventana de aviso de la última canción
35
Ilustración 57 Ventana de aviso de la primera canción
5 Pruebas
Para este proyecto, se ha utilizado dos dispositivos muy distintos. Para
garantizar las funcionalidades básicas de la aplicación en los diferentes
dispositivos, la compatibilidad de la pantalla y entre las versiones de Android.
36
Emulador de Android Studio.
Nexus 5X api 30, 1080 x 1920: 420dpi
Android 11(x86).
37
Las pruebas tienen una gran cantidad de trabajos y un proceso complejo.
Además, necesitamos empezar desde diferentes puntos de vista, aclare el
propósito de la prueba, refine el proceso de prueba, clasifique claramente el
proceso de prueba, trate de ser lo más detallado y complejo posible.
El objetivo principal es la obtención de los audios, sin embargo, en el proceso
de la prueba, ha aparecido un fallo de lectura, aunque los audios están
guardados en la memoria previamente, como se muestra en la figura.
38
Ilustración 62 Imagen de la configuración de permisos
En la mayoría de los casos, se utiliza Logcat para detectar los fallos, a través de
dicho herramientas se ubican los errores, se detectan para la corrección.
39
6 Resultados y conclusiones
A través del desarrollo de reproductor de música local en el sistema operativo
Android, he aprendido la programación en Android desde cero hasta un nivel
de comprensión relativamente complejo. El desarrollo del reproductor de
música se ha completado. Sin embargo, debido a la falta de conocimientos en
programación Android, todavía hay muchas deficiencias en muchos aspectos y
algunas funciones no se han añadido. Por ejemplo, el reproductor no se ha
agregado la sincronización de letras, visualización de la barra de progreso,
animación de la imagen de álbum, etc. Las funcionalidades se pueden mejorar
e interactuar más con los usuarios.
En cuanto al diseño de la pantalla principal, se ha tomado muchas decisiones
para la interfaz del usuario, buscando todas las informaciones y
documentaciones, se ha decidido utilizar “RelativeLayout” y “CardView” para la
visualización de los elementos de la lista.
En los procesos de diseño y desarrollo, me di cuenta de que los conocimientos
solo se pueden aprender con las prácticas, y los conocimientos teóricos no son
suficientes para lograr el objetivo, solo combinando las teorías y las prácticas
se pueden alcanzar un aprendizaje real.
40
7 Análisis de Impacto
En septiembre de 2015 se establecieron una serie de objetivos globales, una
oportunidad para que los países y sus sociedades emprendan un nuevo camino
para mejorar la vida de todos. Con metas específicas a conseguir en 15 años,
para erradicar la pobreza, proteger el planeta y asegurar la prosperidad para
todos.
Entre los impactos de la aplicación, a continuación, muestra los que se destacan.
x Personal: Durante el desarrollo del proyecto, me ha ayudado a organizar
y reflexionar sobre un proyecto desde principio. Además, los
conocimientos adquiridos sobre la plataforma Android y las experiencias
sobre nuevas herramientas.
41
8 Bibliografía
[1] «Android Studio,» [En línea]. Available:
https://developer.android.com/about. [Último acceso: 02 2022].
[2] «JAVA,» [En línea]. Available:
https://www.java.com/es/download/help/whatis_java.html. [Último
acceso: 03 2022].
[3] «XML,» [En línea]. Available: https://www.w3.org/standards/xml/core.
[Último acceso: 22 03 2022].
[4] «Kotlin,» [En línea]. Available: https://kotlinlang.org/docs/home.html.
[Último acceso: 05 2022].
[5] «Android wear,» [En línea]. Available:
https://developer.android.com/wear. [Último acceso: 05 2022].
[6] «Git,» [En línea]. Available: https://git-scm.com/. [Último acceso: 02
2022].
[7] «AppsFlyer,» [En línea]. Available: https://www.appsflyer.com/es/.
[Último acceso: 03 2022].
[8] «Android,» [En línea]. Available:
https://www.android.com/intl/es_es/what-is-android/. [Último acceso:
03 2022].
[9] «Kernel Linux,» [En línea]. Available:
https://es.wikipedia.org/wiki/N%C3%BAcleo_Linux. [Último acceso: 05
2022].
[10] «Android 5.0,» [En línea]. Available:
https://www.android.com/intl/es_es/versions/lollipop-5-0/. [Último
acceso: 03 2022].
[11] «OpenGl,» [En línea]. Available: https://www.opengl.org/. [Último acceso:
03 2022].
[12] . . Joshelu, «Fing: Tu escáner de red para Android,» , 2013. [En línea].
Available: http://xatakaon.com/seguridad-en-redes/fing-tu-escaner-de-
red-para-android. [Último acceso: 18 5 2022].
[13] «android,» [En línea]. Available:
https://www.adslzone.net/reportajes/software/que-es-android/.
42
9 Anexo
43
Ilustración 65 Codigos para visualización de los botones play, last y next
44
Este documento esta firmado por
Firmante CN=tfgm.fi.upm.es, OU=CCFI, O=ETS Ingenieros Informaticos -
UPM, C=ES
Fecha/Hora Sun May 29 20:48:50 CEST 2022
Emisor del [email protected], CN=CA ETS Ingenieros
Certificado Informaticos, O=ETS Ingenieros Informaticos - UPM, C=ES
Numero de Serie 561
Metodo urn:adobe.com:Adobe.PPKLite:adbe.pkcs7.sha1 (Adobe
Signature)