Programación Android, reproducción de archivos de audio (proyecto TacitasCounter PRO)

Share if you like...Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0

En la anterior entrada hicimos una aplicación que controlaba el tiempo que queríamos tomarnos de descanso, sin embargo, era necesario estar atentos a la pantalla para saber cuándo finalizaba el tiempo. En esta ocasión vamos a perfeccionarlo un poco, añadiendo la reproducción de archivos de audio, para lanzar una alarma que nos avise de que ha finalizado el tiempo.

Para eso, cogeremos un archivo de sonido que queramos utilizar como alarma, y haremos uso de una de las carpetas que almacenan recursos para nuestras aplicaciones, la carpeta raw. Sin embargo, si nos fijamos en la estructura de carpetas de nuestra aplicación, no existe ninguna carpeta con este nombre, por lo tanto tendremos que crearla nosotros.

La creación de una nueva carpeta se hace dándole al botón secundario (izquierdo) del ratón sobre nuestra carpeta res (la que almacena todos los recursos de nuestra app), posteriormente seleccionamos new->folder:

CreateFolder1

Nos saldrá una nueva ventana, en la que nos aseguraremos de que tenemos seleccionada la carpeta res, y escribiremos el nombre de nuestra nueva carpeta, que en este caso será raw:Nueva activity2

Ahora aparecerá la nueva carpeta en la estructura de nuestro proyecto:

CreateFolder3

Sólo nos queda incluir el archivo de sonido en el proyecto. Esto es bastante más sencillo, basta con coger el archivo donde lo tengamos en nuestro ordenador y arrastrarlo a la carpeta raw, nos saldrá una ventana de confirmación que nos pregunta cómo se importarán los archivos en el proyecto, indicamos que queremos copiar los archivos:

CopyFile

Lo único que tenemos que tener en cuenta es que no debemos introducir ningún caracter especial en el nombre del archivo, sólo podremos utilizar letras minúsculas y números para nombrarlo. Una vez hecho esto, ya tenemos nuestro fichero en el proyecto, ahora sólo falta reproducirlo cuando nuestro contador llegue a cero. Esta parte es mucho más sencilla de lo que pueda parecer, pues basta con crear un objeto de la clase MediaPlayer, que gestionará la reproducción del archivo:


MediaPlayer mp;

Esta sentencia la declararemos en la parte superior de nuestro código, donde declaramos todas las variables que se utilizarán en nuestro código, y sólo nos falta reproducirlo cuando termina el CountDownTimer.

Y en nuestro onCreate (recordemos que aquí inicializamos todos nuestros objetos para que posteriormente se puedan utilizar en nuestra aplicación) inicializaremos el objeto:


mp = MediaPlayer.create(NombreDeMiActivity.this, R.raw.nombredelfichero);

En los parámetros que recibe el método que creará el objeto tendremos que poner un contexto, por lo que le pasamos la propia actividad que ya lleva dicho contexto, y un entero que representa dónde se encuentra nuestro fichero de sonido (en qué posición de memoria). Este segundo parámetro, como todos los recursos de nuestra aplicación, es accesible a través de la clase R de nuestro proyecto, que contiene todas las referencias necesarias. Como en este caso queremos utilizar un fichero que se encuentra en la carpeta raw, escribiremos R.raw.nombrerecurso, sin necesidad de indicar la extensión del archivo.

Es de especial atención ver que en esta ocasión no instanciamos el objeto con el típico “new ClaseDeLaQueCreamosObjeto(parámetros, másParámetros);“. Esto es porque en el caso de la clase MediaPlayer accedemos a una clase estática que crea el objeto y nos lo devuelve para su uso.

En  el proyecto anterior recordemos que utilizamos un método que se lanzaba automáticamente cuando terminaba nuestro contador, el método era onFinish. Pues en este mismo método, después de todas las instrucciones que ya habíamos escrito, introducimos la instrucción que iniciará la reproducción del sonido, lo haremos a través del objeto creado de la clase MediaPlayer:


mp.start();

Sin embargo esto puede generar un problema. ¿Y si el archivo que elegimos dura 10 minutos? Sólo hemos indicado que se inicie la reproducción del archivo, por lo que tendríamos que esperar a que finalizara la reproducción completa, o habría que cerrar la aplicación para que dejara de reproducirse. Para evitar esto vamos a mostrar una pequeña ventana de dialogo con un botón para finalizar dicha reproducción.

Justo debajo de la anterior instrucción escribiremos el siguiente código:

// Creamos el Dialog que se mostrará para poder pausar la
// reproducción del sonido.
AlertDialog.Builder builder = new AlertDialog.Builder(NombreDeMiActivity.this);
// Le damos un texto al título del diálogo.
builder.setTitle("Alarma");
// Establecemos un mensaje a mostrar al usuario.
builder.setMessage("Desea parar la alarma");
// Creamos un botón y escribimos su evento "onClick".
builder.setPositiveButton("Aceptar", new OnClickListener() {

	@Override
	public void onClick(DialogInterface dialog, int which) {
		// Cuando se pulse el botón, se parará la reproducción del archivo.
		mp.stop();

	}
});
// Una vez creado el Dialog, lo mostramos.
builder.show();

Esta vez hemos tenido que escribir el Listener que se lanza cuando el usuario pulsa el botón. Este Listener es el que se encarga de recoger este evento y hacer que se ejecute el método onClick que hará lo que indiquemos en el código.
En esta ocasión hemos pasado el “new OnClickListener” como parámetro para el setPositiveButton, junto con el contexto. Para incluir este Listener en cualquier botón que nosotros tengamos en nuestro layout, en lugar de escribirlo en la propiedad android:onClick como hemos hecho, podemos hacerlo a través del código escribiendo:

miboton.setOnClickListener(new OnClickListener() {

	@Override
	public void onClick(DialogInterface dialog, int which) {
		// TODO - Acciones de nuestro botón.
	}
});

En realidad, esto es genérico para todo listener que queramos programar en cualquier objeto, la sintaxis genérica sería:

miObjeto.setOnTipoListener(new OnTipoListener() {

	@Override
	public metodoQueSeLanzaConElListener(parametros) {
		// TODO - Acciones de nuestro evento.
	}
});

Con esto, ya tenemos nuestra alarma establecida cuando finaliza nuestro periodo de descanso, y hemos averiguado cómo escribir los Listeners que gestionan los eventos de nuestras aplicaciones.

Descargas

Puedes ver el resultado del ejemplo en tu móvil descargando nuestra aplicación desde Google Play.

Puedes acceder a nuestro repositorio para bajar el proyecto aquí.

Share if you like...Share on Facebook0Tweet about this on TwitterShare on Google+0Share on LinkedIn0
The following two tabs change content below.
Reborn as IT Developer. Desarrollador Android y fundador de Proyecto Simio. "En realidad, yo no puedo enseñar nada a nadie, sólo puedo hacerles pensar." - Sócrates.

Deja un comentario