2009-12-07 11 views
9

así que estoy tratando de permitir al usuario elegir una pieza particular de los medios de comunicación con mi aplicación Android usando el método descrito aquí: Access pictures from Pictures app in my android appVídeos acceder y fotos en Android 1.5 +

Funciona muy bien, a excepción de la hecho de que aparentemente solo puedo elegir entre Video o Foto para presentar al usuario, no ambos al mismo tiempo. ¿Hay una buena manera de hacer esto con:

startActivityForResult (nueva Intención (Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);

Gracias!

+0

Para colmo de males - cuando se utiliza el método con el vídeo - que en realidad no se permitirá al usuario elegir los medios de comunicación - que sólo juega cuando seleccionarlo - y no mostrará miniaturas. ¿Voy a reescribir la galería? ¿Hay alguna manera de que pueda llamar a la Galería y luego hacer que devuelva el Uri por un medio seleccionado? – FunnyLookinHat

Respuesta

17

Lo he usado varias veces. La mejor manera es algo así como:

Intent mediaChooser = new Intent(Intent.ACTION_GET_CONTENT); 
//comma-separated MIME types 
mediaChooser.setType("video/*, images/*"); 
startActivityForResult(mediaChooser, 1); 

Incluso si esto no es absolutamente exacto, se ha trabajado muy bien en todo lo que he utilizado en Abrirá una actividad Galería-esque con una lista en miniatura. cada imagen/video en la galería del usuario. El intento devuelto al onActivityResult() tiene un extra llamado "DATA" que será un contenido: // URI para los medios seleccionados.

EDIT: ¡Uy, para obtener el URI para el medio seleccionado en realidad se desea llamar getData() en la intención que se pasa a onActivityResult()

+2

Robert - Por alguna razón, cada vez que uso la siguiente línea, aparece un selector vacío: mediaChooser.setType ("video/*, images/*"); También lo he intentado sin suerte ... mediaChooser.setType ("video/*, image/*"); Sin embargo, cada uno individualmente funciona bien ... es decir, mediaChooser.setType ("video/*"); mediaChooser.setType ("image/*"); ¿Podría pegar un fragmento de código exacto que funciona? **** EDITAR - Parece que esto ya no funciona después de la versión 2.0 – FunnyLookinHat

+3

¡Hola! ¡Estoy usando Android 1.6 y NO funciona! Solo la imagen o solo videos están bien. ¿Alguna idea? – Karoly

+1

No funciona en 2.3 –

1

Kivy - La manera más fácil es crear una intención para seleccionar un fragmento de soporte y restringirlo a vídeo:

Intent pickMedia = new Intent(Intent.ACTION_GET_CONTENT); 
pickMedia.setType("video/*"); 
startActivityForResult(pickMedia,12345); 

Nota - 12345 es el número entero que su aplicación necesita para escuchar en una solicitud de devolución de llamada para que pueda enviar lo información que reciba cualquier lugar donde necesite.

A continuación, deberá también tener la misma actividad de la escucha de la información para ser enviado de vuelta de esa intención:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 12345) { 
      if (resultCode == Activity.RESULT_OK) { 
       Uri selectedVideoLocation = data.getData(); 

       // Do something with the data... 
      } 

     } 
    } 

fresca?

+1

La pregunta era sobre el acceso a videos Y fotos, no solo videos. La respuesta que dio solo se refiere al video. –

+0

Desafortunadamente no puedes hacer eso en Android 2.0+ - el método falso de mediaChooser.setType ("video/*, images/*"); no funcionará, y a menos que usted cree su propia actividad del selector que busque los medios y los devuelva a la pantalla de un seleccionador, lo mejor que podrá hacer es darle al usuario una opción entre una Imagen de video. – FunnyLookinHat

+0

No sé lo que han hecho en 4.2.x, pero elegir varios tipos de mime parece funcionar bien :) –

1
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
startActivityForResult(intent, 1); 
1

probar este

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 
startActivityForResult(intent, 101); 
Cuestiones relacionadas