Está en la página 1de 14

HERRAMIENTAS DE PROGRAMACIÓN MÓVIL

SEMANA 5
Multimedia en Android

Todos los derechos de autor son de la exclusiva propiedad de IACC o de los otorgantes de sus licencias. No está
permitido copiar, reproducir, reeditar, descargar, publicar, emitir, difundir, poner a disposición del público ni 1
ESTE
utilizarDOCUMENTO
los contenidos paraCONTIENE LAdeSEMANA
fines comerciales 5
ninguna clase.
2
ESTE DOCUMENTO CONTIENE LA SEMANA 5
ÍNDICE

MULTIMEDIA EN ANDROID ................................................................................................................. 4


OBJETIVOS ESPECÍFICOS ........................................................................................................................... 4
INTRODUCCIÓN ...................................................................................................................................... 4
1. MEDIASTORE ............................................................................................................................... 5
2. TOMA DE FOTOGRAFÍAS ............................................................................................................. 7
3. REPRODUCCIÓN DE AUDIO Y VIDEO ........................................................................................... 9
COMENTARIO FINAL.......................................................................................................................... 11
REFERENCIAS........................................................................................................................................ 12

3
ESTE DOCUMENTO CONTIENE LA SEMANA 5
MULTIMEDIA EN ANDROID

OBJETIVOS ESPECÍFICOS
 Caracterizar la capacidad de los dispositivos de capturar y reproducir archivos multimedia.

 Utilizar MediaStore para la manipulación de archivos multimedia en Android.

INTRODUCCIÓN
Una característica fundamental de los smartphones, independiente del sistema operativo que
utilicen, es la capacidad para manipular medios, ya sean fotografías, videos o audio.

Las empresas que desarrollan aplicaciones compiten entre ellas por entregar a los usuarios la
mejor experiencia de uso. Una de las formas de hacerlo es otorgarles las herramientas para utilizar
estas características, las que constituyen uno de los elementos más cotizados en la actualidad por
los usuarios para la adquisición de un smartphone.

4
ESTE DOCUMENTO CONTIENE LA SEMANA 5
1. MEDIASTORE

Android provee una manera de registrar distintos tipos de medios como audio, video e imágenes
para ser consumidas o utilizadas por alguna aplicación. Esto puede ser conveniente si la aplicación
en cuestión es, por ejemplo, un reproductor de música o un editor de imágenes. El MediaStore es
el proveedor para estos metadatos e incluye información acerca de los medios como por ejemplo
título, artista, tamaño y ubicación.

Si la aplicación realiza cualquier tipo de registro de archivos en este contexto, el desarrollador opta
por dejar disponible el contenido para ser accedido por cualquier otra aplicación que sea capaz de
consumirlo. Cuando se crea un archivo, es posible utilizar el objeto MediaScannerConnection para
agregar el archivo y su metadata al MediaStore.

Si se borra el archivo desde el sistema de archivos, los metadatos permanecen en el MediaStore


hasta que Android lea el sistema buscando nuevos medios, lo que sucede normalmente cuando el
sistema se está iniciando o cuando se invoca explícitamente desde el código fuente de la
aplicación, de la siguiente manera:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

Si bien es cierto este método funciona, consume mucho tiempo y recursos, ya que todo el sistema
de archivos (memoria interna y tarjeta SD) debe ser releído. Una alternativa es borrar
explícitamente el archivo del MediaStore. Existen dos maneras de hacer esto: la primera es
consultar por el contenido del MediaStore, según un cierto patrón de texto, y borrar basándose en
el ID único con el que el MediaStore lo identifica. La otra manera, más fácil, es especificar el
predicado en la sentencia de borrado. En el ejemplo, se borra un archivo de audio según su
nombre y ruta, pero el método es válido para cualquier tipo de medio según cualquier metadato
(como la duración, o dimensiones de una imagen).

Para hacer consultas al MediaStore, se debe pensar de forma similar a SQL: se necesita formar la
consulta especificando la tabla (la tabla de contenido externo de MediaStore), las columnas que se
necesitan y una clausula where, que identifica el contenido. Para ejecutar la consulta, se utiliza el
método ContentResolver.query().

5
ESTE DOCUMENTO CONTIENE LA SEMANA 5
Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

En el código anterior se hace la consulta solamente por el ID de la canción, pero puede hacerse
por cualquier combinación de columnas. La referencia a todas las columnas que pueden ser
usadas se encuentra en:

https://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html

El siguiente código permite listar los archivos de música existentes en la base de datos de
MediaStore utilizando su URI:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

6
ESTE DOCUMENTO CONTIENE LA SEMANA 5
2. TOMA DE FOTOGRAFÍAS

Los smartphones se han transformado rápidamente en computadores móviles y también han


reemplazado a muchos otros dispositivos electrónicos. Una de las primeras características que se
incluyeron en la nueva generación de teléfonos fue la cámara de fotos. Actualmente es difícil
imaginar un teléfono que no tenga cámara y los dispositivos Android no son la excepción; desde
un comienzo el SDK otorga soporte para utilizar el hardware de la cámara para capturar imágenes.

La forma más fácil y directa de hacer muchas cosas en Android es aprovechar alguna aplicación ya
existente en el teléfono. Esto se hace utilizando un intent. Un intent es un componente de Android
documentado como una “descripción de una acción a ser realizada” (Gargenta, 2011). En la
práctica los intents se utilizan para echar a andar otras aplicaciones para hacer algo o para cambiar
entre actividades de una misma aplicación.

Como todos los dispositivos Android tienen cámara, también tienen la aplicación para sacar
fotografías. Y al igual que todas las aplicaciones en Android, la cámara también incluye un
intentfilter, que le permite a los desarrolladores utilizar las capacidades de la cámara sin tener que
construir una aplicación desde cero. Los intentfilters no son exclusivos de la aplicación de la
cámara, sino que cada aplicación puede implementarlos.

Un intentfilter es un medio para que un desarrollador pueda especificar que su aplicación ofrece
una característica particular. Como todo en las aplicaciones Android, los intentfilters se declaran
en el AndroidManifest.xml y no solo pueden definirse para la aplicación completa, sino que
pueden declararse para un activity en particular de la aplicación.

Para utilizar la cámara, se debe incluir el siguiente intentfilter en su archivo de manifest. Este
intentfilter está contenido en los tags de las actividades de la cámara:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

Para poder utilizar la cámara a través de un intent, simplemente se inicializa un objeto que será
capturado por el filtro correspondiente:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

7
ESTE DOCUMENTO CONTIENE LA SEMANA 5
En la práctica, probablemente no se desea crear el intent con un string puesto “en duro” (es una
mala práctica de desarrollo). En este caso, se puede especificar el mismo string como una
constante existente en la clase MediaStore: ACTION_IMAGE_CAPTURE. La razón principal por la
que se debiera utilizar la constante en vez del string, es que si la palabra del intent cambia en el
futuro, ACTION_IMAGE_CAPTURE también va a cambiar, de modo que no es necesario modificar
la aplicación. De esta forma, el código quedaría de la siguiente manera:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

El método startActivity() inicia la llamada a la aplicación que controla la cámara por default.

Ahora bien, startActivity() inicia la cámara, pero por lo general se desea traer los datos de vuelta a
la aplicación que se está desarrollando. Esto se hace con el método startActivityForResult(). En el
caso de la cámara, la imagen vuelve en forma de bitmap y, por ende, se le pueden aplicar todos los
métodos de esa clase.

Un ejemplo completo sería:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

8
ESTE DOCUMENTO CONTIENE LA SEMANA 5
Cuando se invoca startActivityForResult(), el desarrollador debe programar el método
onActivityResult(), que se encarga de procesar la respuesta del intent. Este método tiene tres
parámetros: un requestCode que es el código de envío para la otra aplicación, un resultCode que
es un código que retorna la aplicación ejecutada en el intent y el intent mismo.

Una ejecución exitosa del intent siempre retorna un resultCode igual a “RESULT_OK”, que si bien
es cierto está escrito como string, es un int. Intent posee la foto obtenida, pero está dentro de un
objeto llamado Bundle, que es la manera de pasar datos entre aplicaciones y actividades. Es
correcto pensar en un Bundle como si fuera una caja con objetos que hay que darle a otra
aplicación o actividad. Un intent standard siempre tiene una etiqueta llamada “data” dentro del
Bundle y es ese el objeto que se debe transformar en el tipo de objeto que se necesita recibir. Es
por eso que existe una línea:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

El código anterior retorna una imagen muy pequeña. Esto se puede arreglar agregando un Bundle
al momento de ejecutar el intent. Este Bundle tiene la ubicación de la tarjeta SD donde se desea
guardar la imagen. Este código es más complejo y está disponible en el material de la semana.
(ejemploCamara.zip).

3. REPRODUCCIÓN DE AUDIO Y VIDEO

La reproducción de estos archivos es la continuación del listado de la sección anterior. Android


soporta reproducción de audio y video en diversos formatos. En los contenidos adicionales de la
semana está la lista de todos los formatos disponibles.

La reproducción de audio puede hacerse también a través de un intent. Existe un intent genérico
llamado action view. El action view decide cuál es la mejor aplicación para resolver una petición de
intent para un determinado tipo de archivo y la ejecuta. Si hay más de una aplicación que acepta
ese tipo de archivo, se presenta una lista al usuario, quien elige la aplicación que será ejecutada,
por ejemplo:

Fuente: material elaborado para esta asignatura (Héctor Horta, 2015)

9
ESTE DOCUMENTO CONTIENE LA SEMANA 5
Ahora bien, no es obligatorio utilizar el reproductor de medios del dispositivo y es posible crear
uno propio utilizando la clase MediaPlayer. El código de ejemplo está dentro del material de la
semana (ejemploAudio.zip).

Para archivos de video, el ejemplo es similar, pero se debe utilizar además la clase VideoView para
que se encargue del despliegue del archivo. El ejemplo completo está en el material de la semana
(ejemploVideo.zip).

10
ESTE DOCUMENTO CONTIENE LA SEMANA 5
COMENTARIO FINAL

En esta semana se vio cómo abrir archivos de medios y cómo obtener la metadata de dichos
archivos. Se entregaron códigos de ejemplo para probar. Si estos ejemplos se integran bien, se
pueden realizar aplicaciones de reproducción de medios de gran calidad. Esta labor de integración
es parte del estudio. Si bien es cierto se entregan aplicaciones completas y funcionales, es
importante darse cuenta de que aquellas partes que sirven para otras aplicaciones pueden ser
utilizadas.

11
ESTE DOCUMENTO CONTIENE LA SEMANA 5
REFERENCIAS
Gargenta, M. (2011). Learning Android. California: O’Reilly.

Van Every, S. (2009). Pro Android Media: Developing Graphics, Music, Video and Rich Media Apps
for Smartphones and Tablets. New York: Apress.

Sander (2013). Querying And Removing Media FromThe Android MediaStore. Recuperado el 28 de
marzo de 2015 de: http://goo.gl/jjjfzB

Java2s (s. f.). List the MediaStore. Recuperado el 28 de marzo de 2015 de:
http://goo.gl/rnBTsD

12
ESTE DOCUMENTO CONTIENE LA SEMANA 5
PARA REFERENCIAR ESTE DOCUMENTO, CONSIDERE:

IACC (2015). Multimedia en Android. Herramientas de Programación Móvil. Semana 5.

13
ESTE DOCUMENTO CONTIENE LA SEMANA 5
14
ESTE DOCUMENTO CONTIENE LA SEMANA 5

También podría gustarte