Crear un reproductor de música en Android configuración del proyecto

La plataforma Android proporciona recursos para manejar la reproducción de medios, que sus aplicaciones pueden usar para crear una interfaz entre el usuario y sus archivos de música. En esta serie de tutoriales, crearemos una aplicación de reproductor de música básica para Android. La aplicación presentará una lista de canciones en el dispositivo del usuario, de modo que el usuario pueda seleccionar canciones para reproducir. La aplicación también presentará controles para interactuar con la reproducción y continuará reproduciéndose cuando el usuario se aleje de la aplicación, con una notificación mostrada mientras transcurre la reproducción..

Buscando una solución rápida?

Si está buscando una solución rápida, hay una gran colección de plantillas de aplicaciones de Android en Envato Market.. 

En particular, esta plantilla de la aplicación Android Music Player es una excelente manera de comenzar a crear su propia aplicación. "Lite Music" es una plantilla de aplicación de reproductor premium en Android, con una interfaz limpia, que es simple y elegante de usar.

Introducción

Construir el reproductor de música implicará usar el ContentResolver clase para recuperar pistas en el dispositivo, el Reproductor multimedia clase para reproducir audio y la MediaController Clase para controlar la reproducción. También usaremos un Servicio instancia para reproducir audio cuando el usuario no está interactuando directamente con la aplicación. Debería poder completar esta serie si es un desarrollador intermedio de Android, por lo que si ya ha creado algunas aplicaciones, entonces esta serie no debería ser un problema para usted. Aquí hay una vista previa de la aplicación final:


En este tutorial, crearemos la aplicación y consultaremos en el dispositivo del usuario los archivos de audio usando la ContentResolver y Cursor clases En la siguiente parte, utilizaremos un Adaptador para presentar las canciones en una vista de lista, inicie la reproducción cuando el usuario toque un elemento de la lista. En la última entrega de esta serie, utilizaremos el MediaController clase para dar al usuario control sobre la reproducción, implementar funciones para saltar hacia adelante y hacia atrás, e incluir una función de reproducción aleatoria. Después de esta serie, exploraremos otros aspectos de la reproducción de medios que pueden mejorar la aplicación, como el manejo del enfoque de audio, la presentación de archivos de medios de diferentes maneras y la reproducción de medios de transmisión..

1. Crear y configurar un nuevo proyecto

Paso 1

Crea un nuevo proyecto de Android. Si está utilizando Eclipse, deje que el IDE (entorno de desarrollo integrado) cree una Actividad Clase y archivo de diseño para usted. Para algunos de los códigos que utilizamos en la serie, necesitará un nivel de API mínimo de 16, por lo que deberá tomar medidas adicionales para admitir versiones anteriores. Una vez que se haya creado su proyecto, abra el archivo Manifest del proyecto. Dentro de manifiesto elemento, agregue el siguiente permiso:

Usaremos este permiso para permitir que la reproducción de música continúe cuando el dispositivo del usuario esté inactivo. Tu Manifiesto ya debe contener un elemento para tu principal. Actividad clase. Agregue los siguientes atributos a la actividad elemento para configurar el orientación de la pantalla y launchMode:

Nos ceñiremos a la orientación vertical por simplicidad. los launchMode ayudará en el proceso de navegar de regreso a la aplicación después de alejarse de ella. Mostraremos una notificación que indique la canción que se está reproduciendo actualmente, al tocar la notificación el usuario volverá a la aplicación. También vamos a utilizar un Servicio clase para la reproduccion de musica. Agregue la siguiente línea al Manifiesto del proyecto dentro del solicitud elemento y despues de la actividad elemento:

Modifique el nombre del paquete para adaptarlo al suyo y cambie el nombre de la clase si lo desea.

Paso 2

Abra el archivo de diseño principal del proyecto y reemplace su contenido con el siguiente diseño:

   

Se asegura de alterar el herramientas: contexto atribuye si tu principal Actividad clase se nombra de manera diferente El diseño incluye un Vista de la lista En el que presentaremos la lista de canciones..

Vamos a incluir dos elementos de menú para alternar la función de reproducción aleatoria y para salir de la aplicación. Abra su archivo del menú principal (res / menu / main.xml) y reemplaza su contenido con lo siguiente:

   

Si lo prefiere, puede almacenar las cadenas de título en el res / values ​​/ strings.xml expediente. Los dos elementos se refieren a archivos dibujables. Crea las tuyas o usa estas dos imágenes para comenzar con:



También utilizaremos un icono para mostrar en la notificación de reproducción. Cree uno ahora o use el siguiente:


El código se referirá a las imágenes usando los nombres. rand, fin, y jugar así que asegúrate de usar los mismos nombres de archivo. Copia las imágenes a la (s) carpeta (s) de dibujo de tu proyecto. Implementaremos las acciones más adelante..

2. Consulta el dispositivo para canciones

Paso 1

Vamos a consultar el dispositivo del usuario para los archivos de audio. Primero, agregue una nueva clase a su proyecto, nombrándolo Canción. Usaremos esta clase para modelar los datos de un solo archivo de audio. Dentro de la declaración de clase, agregue tres variables de instancia para los datos que queremos almacenar para cada pista:

Identificación larga privada; Título privado de cuerdas; Artista de cuerdas privado;

A continuación, agregue un método de construcción en el que instanciamos las variables de instancia:

canción pública (long songID, String songTitle, String songArtist) id = songID; title = songTitle; artist = songArtist; 

Finalmente, agregue obtener Métodos para las variables de instancia:

public long getID () return id; public String getTitle () return title; public String getArtist () return artist;

Si planea usar más información de seguimiento, entonces es libre de agregar variables de instancia adicionales a la clase.

Paso 2

Abrir el principal Actividad Clase y agregar las siguientes importaciones:

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; importar android.net.Uri; importar android.content.ContentResolver; importar android.database.Cursor; importar android.widget.ListView;

Declare las siguientes variables de instancia antes de onCreate método:

ArrayList privado lista de canciones; ListView privado songView;

Almacenaremos las canciones en una lista y las mostraremos en el Vista de la lista Instancia en la disposición principal. En onCreate, después de configurar la vista de contenido, recupere Vista de la lista Instancia usando el ID que le dimos en el diseño principal:

songView = (ListView) findViewById (R.id.song_list);

Haga una instancia de la lista como se muestra a continuación:

songList = new ArrayList();

A continuación, en la principal Actividad declaración de clase, después de los métodos existentes, cree un método auxiliar para recuperar la información del archivo de audio:

public void getSongList () // recuperar información de la canción

Dentro de este método, crea un ContentResolver instancia, recupere el URI para archivos de música externos y cree un Cursor instancia utilizando el ContentResolver instancia para consultar los archivos de música:

ContentResolver musicResolver = getContentResolver (); Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor musicCursor = musicResolver.query (musicUri, null, null, null, null);

Ahora podemos iterar sobre los resultados, primero verificando que tenemos datos válidos:

if (musicCursor! = nulo && musicCursor.moveToFirst ()) // obtener columnas int titleColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.TITLE); int idColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media._ID); int artistColumn = musicCursor.getColumnIndex (android.provider.MediaStore.Audio.Media.ARTIST); // agregar canciones a la lista do long thisId = musicCursor.getLong (idColumn); String thisTitle = musicCursor.getString (titleColumn); String thisArtist = musicCursor.getString (artistColumn); songList.add (nueva canción (thisId, thisTitle, thisArtist));  while (musicCursor.moveToNext ()); 

Primero recuperamos los índices de columna para los elementos de datos que nos interesan para cada canción, luego los usamos para crear una nueva Canción objetar y agregarlo a la lista, antes de continuar repasando los resultados.

De nuevo en onCreate, Después del código que agregamos, llame a este nuevo método:

getSongList ();

3. Mostrar las canciones

Paso 1

Ahora podemos mostrar la lista de canciones en la interfaz de usuario. En el onCreate método, después de llamar al método auxiliar que creamos hace un momento, ordenemos los datos para que las canciones se presenten alfabéticamente:

Colecciones.sort (songList, nuevo comparador() public int compare (Song a, Song b) return a.getTitle (). compareTo (b.getTitle ()); );

Usamos el título variable en el Canción clase, usando el obtener Métodos que agregamos, para implementar un comparar Método, ordenando las canciones por título..

Paso 2

Vamos a definir un diseño para representar cada canción en la lista. Agrega un nuevo archivo a tu proyecto res / diseño carpeta, nombrándolo song.xml y entrando en lo siguiente:

   

Siéntase libre de modificar el diseño para adaptarse a sus preferencias. Cada canción de la lista estará representada por cadenas de texto de título y artista, por lo que utilizaremos Visiones de texto para visualizar estos datos. Tenga en cuenta que el LinearLayout una lista de etiquetas de apertura al hacer clic atributo. Vamos a utilizar este método en la principal Actividad clase para responder a los toques de usuario en las canciones de la lista, reproduciendo la canción representada por el elemento de la lista que se tocó.

Paso 3

Utilizaremos un Adaptador para asignar las canciones a la vista de lista. Agrega una nueva clase a tu aplicación, dándole un nombre SongAdapter u otro nombre de su elección. Al crear la clase, dale la superclase. android.widget.BaseAdapter. Eclipse debe insertar el siguiente esquema:

la clase pública SongAdapter extiende BaseAdapter @Override public int getCount () // TODO Retorno de stub de método generado automáticamente;  @Override public Object getItem (int arg0) // TODO Autodetenido retorno de código auxiliar de método nulo;  @ Anular pública long getItemId (int arg0) // TODO Retorno de apéndice de método generado automáticamente;  @ Anular la vista pública getView (int arg0, View arg1, ViewGroup arg2) // TODO Retorno de código auxiliar de método generado automáticamente; 

Deberá agregar las siguientes importaciones:

import java.util.ArrayList; importar android.content.Context; importar android.view.LayoutInflater; importar android.widget.LinearLayout; importar android.widget.TextView;

Dentro de la declaración de clase, declare las siguientes variables de instancia:

ArrayList privado canciones; LayoutInflater songInf privado;

Pasaremos la lista de canciones de la principal. Actividad clase y usar el LayoutInflater para mapear el título y las cadenas de artista a la Visiones de texto en el diseño de la canción que creamos.

Después de las variables de instancia, asigne al adaptador un método de construcción para crear una instancia de ellas:

SongAdapter público (Contexto c, ArrayList theSongs) canciones = theSongs; songInf = LayoutInflater.from (c); 

Alterar el contenido de la getCount Método para devolver el tamaño de la lista:

@Override public int getCount () return songs.size (); 

Puedes dejar el obtiene el objeto y getItemId Métodos intactos. Actualizar la implementación del getView método como se muestra a continuación:

@Override public Ver getView (int position, View convertView, ViewGroup parent) // mapear a la distribución de la canción LinearLayout songLay = (LinearLayout) songInf.inflate (R.layout.song, parent, false); // obtener el título y las vistas del artista TextView songView = (TextView) songLay.findViewById (R.id.song_title); TextView artistView = (TextView) songLay.findViewById (R.id.song_artist); // obtener la canción usando la posición Song currSong = songs.get (posición); // obtener el título y las cadenas de artista songView.setText (currSong.getTitle ()); artistView.setText (currSong.getArtist ()); // establecer posición como etiqueta songLay.setTag (posición); volver songLay; 

Establecemos el título y el texto del artista recuperando el correcto Canción Instale desde la lista usando el índice de posición, asignando estas cadenas a las vistas que agregamos al archivo de diseño de la canción. También establecemos la posición como la etiqueta de vista, que nos permitirá reproducir la canción correcta cuando el usuario haga clic en un elemento de la lista. Recuerda que el song.xml archivo de diseño incluido un al hacer clic atributo. Utilizaremos el método que se enumera allí para recuperar la etiqueta en el Actividad.

Paso 3

De vuelta en la principal Actividad clase, en el onCreate después de ordenar la lista, cree una nueva instancia de Adaptador clase y lo puso en el Vista de la lista:

SongAdapter songAdt = new SongAdapter (this, songList); songView.setAdapter (songAdt);

Cuando ejecute la aplicación, debe presentar la lista de canciones en el dispositivo, hacer clic en ellas hará que la aplicación arroje una excepción en este momento, pero implementaremos el controlador de clic en el siguiente tutorial..

Conclusión

Ahora hemos configurado la aplicación para leer canciones del dispositivo del usuario. En la siguiente parte, comenzaremos la reproducción cuando el usuario seleccione una canción usando el Reproductor multimedia clase. Implementaremos la reproducción usando un Servicio clase para que continúe mientras el usuario interactúa con otras aplicaciones. Finalmente, utilizaremos un MediaController clase para dar el control del usuario sobre la reproducción.

Si alguna vez necesita ayuda adicional con sus proyectos de desarrollo de aplicaciones para Android, puede encontrar desarrolladores de Android con experiencia en Envato Studio para que lo ayuden con todo, desde el diseño de la interfaz de usuario hasta la creación de una aplicación nativa para Android.

Desarrolladores de Android en Envato Studio