Gráficos y multimedia
 

Reproducción de medios en Android - Ejercicios

Reproducir de un clip de audio

Se te proporciona en las plantillas de la sesión la aplicación Audio. Dicha aplicación contiene un clip de audio almacenado en los recursos, cuyo nombre es zelda_nes.mp3. La aplicación contiene una única actividad con una serie de botones, a los que añadiremos funcionalidad para poder controlar la reproducción del clip de audio. Se te pide hacer lo siguiente:

  • Añade el código necesario en el constructor para crear una instancia de la clase MediaPlayer (donde el objeto mp habrá sido declarado como un atributo de la clase):
mp = MediaPlayer.create(this, R.raw.zelda_nes);
  • Modifica el manejador del botón Reproducir para que cada vez que se pulse éste se deshabilite, se habiliten los botones Pausa y Detener, y empiece a reproducirse el clip de audio mediante la invocación del método start del objeto MediaPlayer.
Nota
Para habilitar o deshabilitar botones usaremos el método setEnabled, que recibe como parámetro un booleano.
  • Modifica el manejador del botón Detener para que cada vez que se pulse se deshabilite dicho botón y el botón Pausa, se habilite el botón Reproducir, y se detenga la reproducción del audio mediante el método stop. Invoca también el método prepare del objeto MediaPlayer para dejarlo todo preparado por si se desea reproducir de nuevo el audio.
  • Modifica el manejador del botón Pausa. Si el audio estaba en reproducción el texto del botón pasará a ser Reanudar y se pausará la reproducción por medio del método pause. Si ya estaba en pausa el texto del botón volverá a ser Pausa y se reanudará la reproducción del audio. No olvides cambiar la etiqueta del botón a Pausa si se pulsa el botón Detener.
  • Observa que cuando detienes la reproducción con stop y la reanudas con start el archivo de audio continúa reproduciéndose en el punto donde se detuvo. ¿Qué tendrías que hacer para que al pulsar el botón Reproducir la reproducción comenzara siempre por el principio?
  • Libera los recursos asociados al objeto MediaPlayer en el método onDestroy. No olvides invocar al método onDestroy de la superclase.

Evento de finalización de la reproducción (*)

El objeto MediaPlayer no pasa automáticamente al estado de detenido una vez que se reproduce completamente el clip de audio, sino que es necesario detener la reproducción a mano. Por lo tanto, en este ejercicio vamos a añadir un manejador para el evento que se dispara cuando el clip de audio finaliza. Añade el siguiente código en el método onCreate, tras la inicialización del objeto MediaPlayer:

mp.setOnCompletionListener(new OnCompletionListener() {
			public void onCompletion(MediaPlayer mp) {
				// TODO Rellena con tu código
				
			}
        });

Lo que tiene que hacer este manejador es exactamente lo mismo que se debería hacer en el caso de haber pulsado el botón de Detener, es decir, habilitar el botón Reproducir, deshabilitar el resto, e invocar al método stop.

Reproducir un clip de vídeo usando VideoView

Para este ejercicio se te proporciona en las plantillas el proyecto Video, que contiene una única actividad para controlar la reproducción de un clip de video, que se incluye también en las plantillas de la sesión (fichero tetris.3gp). En este caso tendremos un botón etiquetado como Reproducir, un botón etiquetado como Detener y una vista de tipo TextView que usaremos para mostrar la duración del vídeo, el cual se mostrará en una vista de tipo VideoView.

Los pasos que debes seguir son los siguientes:

  • Almacena el vídeo en la tarjeta SD de tu dispositivo emulado, en la carpeta /mnt/sdcard/DCIM/.
  • Modifica el manejador del botón Reproducir para que cuando éste se pulse se deshabilite y se habilite el botón Detener.
  • Modifica el manejador del botón Detener para que cuando éste se pulse se deshabilite y se habilite el botón Reproducir.
  • Prepara el vídeo a reproducir al pulsar el botón Reproducir con la siguiente línea de código (pero no utilices el método start para reproducirlo todavía):
superficie.setVideoPath("/mnt/sdcard/DCIM/tetris.3gp");
  • Detén la ejecución del vídeo cuando se pulse el botón Detener por medio del método stopPlayback.
  • Para poder reproducir el vídeo y poder obtener su duración y mosrtrarla en el TextView, hemos de esperar a que la superficie donde se va a reproducir esté preparada. Para ello hemos de implementar el manejador para el evento OnPreparedListener de la vista VideoView. Añade el manejador:
superficie.setOnPreparedListener(new OnPreparedListener() {
	public void onPrepared(MediaPlayer mp) {
		// Tu código aquí
	}
});
  • Añade código en el manejador anterior para comenzar la reproducción por medio del método start. Obtén la duración en minutos y segundos por medio del método getDuration del VideoView y muéstrala en el TextView con el formato mm:ss.
Nota
El método getDuration devuelve la duración del vídeo en milisegundos.