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..
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.
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..
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.
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..
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.
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 privadolista 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 ();
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..
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ó.
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 privadocanciones; 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, ArrayListtheSongs) 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
.
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..
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