Crea Un Reproductor de Música en Android - Configuración Del Proyecto
Crea Un Reproductor de Música en Android - Configuración Del Proyecto
Crea Un Reproductor de Música en Android - Configuración Del Proyecto
Save Now
Advertisement
Spanish (Español) translation by Nadia Castelli (you can also view the original English article)
La plataforma Android provee recursos para manipular la reproducción de archivos multimedia, que pueden ser
utilizados por tu app para crear una interfaz entre el usuario y sus archivos de música. En esta serie de tutoriales,
crearemos un reproductor de música básico para Android. Nuestra app presentará una lista de canciones en el
dispositivo del usuario, para que pueda seleccionarlas y reproducirlas. Además, la app tendrá controles para
interactuar con la reproducción, la cual continuará cuando el usuario salga de la aplicación, mostrando una
noti cación mientras la reproducción continúe.
Introducción
El desarrollo del reproductor de música involucra el uso de la clase ContentResolver para obtener las pistas
almacenadas en el dispositivo, la clase MediaPlayer para reproducir audio, y la clase MediaController para controlar
la reproducción. También haremos uso de una instancia de Service para reproducir audio cuando el usuario no esté
interactuando directamente con la app. Deberías ser capaz de completar esta serie si eres un desarrollador Android
de nivel intermedio, por lo cual, si ya has desarrollado algunas aplicaciones, esta serie no debería resultarte un
problema. Aquí tenemos una previsualización de la app nal:
En este tutorial, crearemos la app y buscaremos pistas de audio en el dispositivo del usuario, utilizando las clases
ContentResolver y Cursor . En la próxima parte, usaremos una instancia de Adapter para presentar las canciones en
una lista, y comenzar la reproducción cuando el usuario toque un ítem de la lista. En la parte nal de esta serie,
utilizaremos la clase MediaController para darle control de la reproducción al usuario, implementar funciones para
saltar la reproducción hacia adelante y hacia atrás, e incluir la función de reproducir de manera aleatoria. Luego de
esta serie, exploraremos otros aspectos de la reproducción multimedia que pueden mejorar la app, como manejar el
foco del audio, presentar archivos multimedia de diferentes formas, y reproducir multimedia vía streaming.
Utilizaremos este permiso para lograr que la música continúes reproduciéndose cuando el dispositivo esté inactivo.
Tu Manifest ya debería contener un elemento para tu Activity principal. Añade los siguientes atributos al elemento
activity para con gurar screenOrientation y launchMode :
1 <activity
2 android:name="com.example.musicplayer.MainActivity"
3 android:label="@string/app_name"
4 android:launchMode="singleTop"
5 android:screenOrientation="portrait" >
Nos apegaremos a la orientación vertical para ganar en simplicidad. El launchMode auxiliará el proceso de navegación
de vuelta a la app luego de haberla pasado a segundo plano. Mostraremos una noti cación indicando la canción que
está siendo reproducida; al tocar la noti cación, el usuario será redirigido a la app. Además, utilizaremos un Service
para la reproducción de música. Agrega la siguiente línea al Manifest del proyecto, dentro del elemento application ,
y luego del elemento activity :
Modi ca el nombre del paquete para que se ajuste al tuyo, y cambia el nombre de la clase si así lo deseas.
Paso 2
Abre el archivo principal de layout de tu proyecto y reemplaza su contenido por el siguiente layout:
01 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
02 xmlns:tools="http://schemas.android.com/tools"
03 android:layout_width="fill_parent"
04 android:layout_height="fill_parent"
05 android:orientation="vertical"
06 android:background="#FF330000"
07 tools:context=".MainActivity" >
08
09 <ListView
10 android:id="@+id/song_list"
11 android:layout_width="fill_parent"
12 android:layout_height="wrap_content" >
13 </ListView>
14
15 </LinearLayout>
Asegúrate de alterar el atributo tools:context si tu Activity principal tiene otro nombre. El layout incluye una
ListView en la cual presentaremos el listado de canciones.
Ahora agregaremos dos ítems al menú para activar y desactivar la función de reproducción aleatoria, y para salir de la
aplicación. Abre tu archivo principal de menú (res/menu/main.xml) y reemplaza su contenido con lo siguiente:
Si pre eres, puedes almacenar los strings de los títulos en el archivo res/values/strings.xml. Estos dos ítems se
re eren a archivos drawable. Crea uno propio, o emplea estas dos imágenes para comenzar:
También utilizaremos un ícono para mostrar en la noti cación de reproducción. Crea uno ahora, o utiliza el que se
muestra aquí debajo:
El código se referirá a estas imágenes mediante los nombres rand, end, y play, por lo que debes asegurarte de usar
los mismos nombres de archivo. Copia las imágenes en la(s) carpeta(s) de archivos drawable de tu proyecto.
Implementaremos estas acciones más tarde.
Si planeas utilizar más información de las pistas, siéntete libre de agregar variables de instancia adicionales a la
clase.
Paso 2
Abre la Activity principal y agrega las siguientes sentencias de importación:
1 import java.util.ArrayList;
2 import java.util.Collections;
3 import java.util.Comparator;
4 import android.net.Uri;
5 import android.content.ContentResolver;
6 import android.database.Cursor;
7 import android.widget.ListView;
1 songView = (ListView)findViewById(R.id.song_list);
Ahora, en la declaración de la Activity principal, luego de los métodos que ya existen, crea un método auxiliar para
obtener la información del archivo de audio:
Dentro de este método, crea una instancia de ContentResolver , obtén la URI para los archivos de audio externos, y
crea una instancia de Cursor usando la instancia de ContentResolver para buscar los archivos de música:
Ahora podemos iterar los resultados, primero chequeando que tenemos datos válidos:
Primero traemos los índices de columna para los ítems de datos que nos interesan de cada canción, luego los
usamos para crear un nuevo objeto Song y sumarlo a la lista, antes de continuar iterando los resultados.
De regreso al onCreate , luego del código que agregamos, invoca este nuevo método:
1 getSongList();
Utilizamos la variable title de la clase Song , mediante los métodos get que agregamos, para implementar un
método compare , que ordene las canciones por título.
Paso 2
Ahora, vamos a de nir un layout para representar cada canción de la lista. Crea un nuevo archivo dentro del directorio
res/layout de tu proyecto, nómbralo song.xml, y llénalo con lo siguiente:
01 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
02 xmlns:tools="http://schemas.android.com/tools"
03 android:layout_width="fill_parent"
04 android:layout_height="wrap_content"
05 android:onClick="songPicked"
06 android:orientation="vertical"
07 android:padding="5dp" >
08
09 <TextView
10 android:id="@+id/song_title"
11 android:layout_width="fill_parent"
12 android:layout_height="wrap_content"
13 android:textColor="#FFFFFF99"
14 android:textSize="20sp"
15 android:textStyle="bold" />
16
17 <TextView
18 android:id="@+id/song_artist"
19 android:layout_width="fill_parent"
20 android:layout_height="wrap_content"
21 android:textColor="#FFFFFF99"
22 android:textSize="18sp" />
23
24 </LinearLayout>
Siéntete libre de modi car el layout para que se ajuste a tus preferencias. Cada canción de la lista estará
representada por su título y artista, por ende usaremos TextViews para mostrar estos datos. Notarás que la etiqueta
de apertura del LinearLayout contiene un atributo onClick . Emplearemos este método en la Activity principal para
responder a la selección de canciones del usuario en la lista, reproduciendo la canción representada por el ítem de la
lista que fue presionado.
Paso 3
Usaremos un Adapter para relacionar las canciones a la lista. Agrega una nueva clase a tu aplicación, llámala
SongAdapter o por un nombre a elección. Al crear la clase, dale la superclase android.widget.BaseAdapter . Eclipse
debería insertar la siguiente estructura:
1 import java.util.ArrayList;
2 import android.content.Context;
3 import android.view.LayoutInflater;
4 import android.widget.LinearLayout;
5 import android.widget.TextView;
Pasaremos la lista de canciones desde la Activity principal, y emplearemos el LayoutInflater para relacionar los
valores de título y artista a los TextViews del layout que hemos creado para la canción.
Luego de las variables de instancia, dale al adapter un método constructor para instanciarlas:
Modi ca el contenido del método getCount para que retorne el tamaño de la lista:
1 @Override
2 public int getCount() {
3 return songs.size();
4 }
Puedes dejar los métodos getItem y getItemId sin tocar. Actualiza la implementación del método getView como se
muestra a continuación:
01 @Override
02 public View getView(int position, View convertView, ViewGroup parent) {
03 //map to song layout
04 LinearLayout songLay = (LinearLayout)songInf.inflate
05 (R.layout.song, parent, false);
06 //get title and artist views
07 TextView songView = (TextView)songLay.findViewById(R.id.song_title);
08 TextView artistView = (TextView)songLay.findViewById(R.id.song_artist);
09 //get song using position
10
11 Song currSong = songs.get(position);
12 //get title and artist strings
13 songView.setText(currSong.getTitle());
14 artistView.setText(currSong.getArtist());
15 //set position as tag
16 songLay.setTag(position);
g y g(p );
17 return songLay;
}
Declaramos los textos de título y artista, tomando de la lista la instancia correcta de Song usando el índice de
posición, uniendo estos strings con las vistas que le añadimos al archivo de layout de la canción. También
establecemos la posición como la etiqueta de la vista, lo cual nos permitirá reproducir la canción correcta cuando el
usuario seleccione un ítem de la lista. Recuerda que el archivo de layout song.xml incluye un atributo onClick .
Usaremos el método allí listado para obtener la etiqueta en la Activity .
Advertisement
Paso 3
De vuelta en la Activity principal, en el método onCreate y luego de ordenar la lista, crea una nueva instancia de la
clase Adapter y con gúralo en la ListView .
Cuando corras la app, debería presentar el listado de canciones que hay en el dispositivo; en este momento, la
selección de alguna de ellas provocará que la app tire una excepción, pero implementaremos el manejo del click en el
próximo tutorial.
Conclusión
Ya hemos con gurado la aplicación para leer canciones del dispositivo del usuario. En la próxima parte,
comenzaremos la reproducción cuando el usuario seleccione una canción, utilizando la clase MediaPlayer .
Implementaremos la reproducción mediante la clase Service , para que continúe mientras el usuario interactúa con
otras apps. Finalmente, utilizaremos la clase MediaController para darle al usuario el control de la reproducción.
Advertisement
Sue Smith
Technical writer (and sometimes developer) based in Glasgow, UK. Having worked with the Mozilla Foundation and
various online publications, I enjoy helping people to learn web and software development topics, regardless of their
existing skill level. Particular areas of interest include education technology and open source projects.
BrainDeadAir
Email Address
Update me weekly
Advertisement
Download Attachment
Translations
Envato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Powered by
0 Comments Mobiletuts+
1 Login
Sort by Best
Recommend ⤤ Share
LOG IN WITH
OR SIGN UP WITH DISQUS ?
Name
Advertisement
ENVATO TUTS+
HELP
© 2017 Envato Pty Ltd. Trademarks and brands are the property of their respective owners.