2.3. MULTIMEDIA
En este capítulo vamos a mostrarle cómo añadir multimedia a nuestras aplicaciones Android.2.3.1. REPRODUCCIÓN DE AUDIO
Android es compatible con salidas de sonido y música a través de la clase MediaPlayer del paquete android.media. Vamos a realizar un sencillo ejemplo que va a reproducir sonidos cuando se pulse una tecla del teclado.Caso práctico
Vamos a comenzar creando un nuevo proyecto de Android utilizando los siguientes parámetros en el cuadro de diálogo: Application Name: Learnimbus Audio Project Name: LearnimbusAudio Package Name: com.learnimbus.ejemplo.audio Create Activity: Audio Min SDK: 8 Target SDK: Android 2.3 Una vez creado el nuevo proyecto, debemos conseguir unos cuantos sonidos en mp3 y debemos copiarlos en la carpetares/raw de nuestro proyecto. Esto nos generará en la clase R un símbolo Java. Las carpetas quedarán de la siguiente manera.Pasemos al código. Debemos rellenar la actividad Audio, declarando un campo llamado mp que almacenará una instancia de la clase MediaPlayer. En nuestra aplicación tendremos activa una MediaPlayer:
Con el método setVolumeControlStream() le vamos a indicar a Android, que mientras nuestra aplicación se esté ejecutando, cuando el usuario pulse la tecla de subir o bajar el volumen, se ajuste el volumen multimedia u otros medios en vez de hacerlo para el timbre del teléfono.
Ahora debemos de interceptar cada pulsación de tecla y reproducir el sonido elegido para ello. Debemos modificar el método Activity.onKeyDown() añadiendo el siguiente código en nuestra clase Audio:
Con este método primero seleccionamos un recurso (mp3) en base a la tecla que fue pulsada. Desde ese momento, llamamos al método release() para detener cualquier sonido que se estuviese reproduciendo y liberamos
cualquier recurso que estuviese asociado al MediaPlayer. Si no hiciésemos esto, el programa fallaría, ya que a continuación, cuando utilizamos el método create() para crear un nuevoMediaPlayer, utilizando el recurso seleccionado y llamamos al método start() (este método es asíncrono, por lo tanto, devuelve inmediatamente con independencia de lo que tarde el sonido en terminar) tendría todavía el recurso anterior y daría fallo al llamarlo. Para dejar un poco más bonita la aplicación, en la pantalla principal vamos a poner unas pequeñas instrucciones de cómo interactuar con la aplicación. Debemos modificar el resource y añadir la siguiente string al archivo main.xml:
Y el layout.xml modificarlo para que muestre el recurso anteriormente definido:
Si ejecutamos la aplicación y pulsamos sobre una de las teclas, deberíamos oír un sonido. Si no disponemos de teclado físico en el teléfono, mantenemos pulsada la tecla “Menú" del teléfono hasta que salga el teclado en pantalla.
2.3.1.1. Formatos compatibles
Habría que diferenciar entre compatibilidad teórica, compatibilidad en el emulador y compatibilidad en dispositivos reales. En teoría, Android es compatible con los siguientes tipos de archivos: ■ WMA. ■ MIDI. ■ AAC. ■ OGG. ■ AMR. ■ WAV. ■ MP3. Realizando diferentes pruebas, hemos podido comprobar que los formatos que realmente funcionan en el emulador son OGG, WAV y MP3, así que son los que te recomendamos usar a la hora de realizar aplicaciones.2.3.2. REPRODUCCIÓN DE VIDEO
Para poder reproducir vídeo en nuestras aplicaciones usaremos la misma clase que para el audio, MediaPlayer, y funciona de la misma forma que lo hace con el audio. Lo que deberemos crear una Surfacepara que el reproductor utilice las imágenes, haciendo uso de los métodos onstart() y onstop() para controlar la reproducción. Pero en vez de realizar otro proyecto ejemplo de la claseMediaPlayer, lo que haremos será usar la clase videoview.Caso práctico
Vamos a comenzar creando un nuevo proyecto de Android utilizando los siguientes parámetros en el cuadro de diálogo:Application Name: Learnimbus Video Project Name: LearnimbusVideo Package Name: com.learnimbus.ejemplo.video Create Activity: Video Min SDK: 8 Target SDK: Android 2.3
Una vez creado el nuevo proyecto cambiamos el archivores/layout/main.xml por éste:
Con esto hemos creado un nuevo componente videoviewque nos va a ocupar toda la pantalla, y será donde visualizaremos el vídeo.
Ahora en la clase video,java cambiamos el métodoonCreate() por lo siguiente:
Debemos insertar en la carpeta sdcard/video el archivo de vídeo que deseemos reproducir. Valdrá cualquier vídeo que hayamos grabado con la videocámara del móvil y con poner el nombre del archivo en la línea de nuestro código.
Con el método setVideoPath() definimos la ubicación del archivo. Y con vídeo. start() abrimos el archivo, lo redimensionamos al tamaño del contenedor para poder mantener la relación de aspecto y comenzamos a reproducirlo.
Pero aún nos faltaría darle un poco de presencia, para que el vídeo ocupe la pantalla completa y desaparezca la barra de título y la barra de estado. Para ello debemos modificar elAndroidManifest.xml:
Si a mitad de reproducción gira la pantalla, observaremos que el vídeo se reinicia desde el principio. Y eso es debido a que Android da por hecho que su programa no sabe nada acerca de las rotaciones de pantalla. Lo que hace Android es destruir y volver a crear la actividad desde cero, con lo que se vuelve a llamar al onCreate(), lo que implica la reapertura del vídeo.
Existen dos formas para poder optimizar la transición. La manera fácil es
implementaronRetainNonConfigurationinstance() en su actividad y guardar alguno de sus datos que se mantendrán en las llamadas a onDestroy() y onCreate(). Al volver,
utilizamos getLastNonCofigurationlnstance() en la nueva instancia de su actividad para traer dicha información. De esta manera, mantendremos las referencias a su intención actual e hilos de ejecución.