ACTION_GET_CONTENT: ¿Cómo obtener el fin del archivo al buscar varios tipos de archivo?

Estoy utilizando una intención para permitir que el usuario seleccione un archivo, y después de que el usuario ha hecho que quiero saber qué tipo de archivo de tipo es el archivo seleccionado.

La intención:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); 

En mi onActivityResult quiero extraer el camino de la intención a través de intention.getData () y todo su "submethods" (getScheme (), getLastPathSegment () etc). Sin embargo, sólo obtengo el Uri para el archivo seleccionado.

Ejemplo de Uris:

 Uri: content://media/external/audio/media/15185 //This is an audiofile Uri: content://media/external/audio/media/20 //Another audiofile Uri: content://media/external/images/media/20577 //this is a picture Uri: file:///storage/emulated/0/testWed%20Apr%2017%2011%3A10%3A34%20CEST%202013 //This is a file 

He visto soluciones de cómo obtener la ruta absoluta cuando el usuario sólo está autorizado a elegir imágenes o audios. Pero ¿cómo puedo obtener el absolutePath (el camino real con el nombre y el final del archivo, por ejemplo MyPicture.jpeg) si quiero permitir que el usuario seleccione entre diferentes tipos de archivo?

El código que he estado twiggling con para intentar conseguir el path-name en onActivityResult (int requestCode, int resultCode

  String fileName = data.getData().getLastPathSegment().toString(); System.out.println("Uri: " +data.getData().toString()); File f = new File(fileName); System.out.println("TrYinG wIWThA Da FiLE: " +f.getAbsolutePath()); System.out.println("FileNAME!!!: "+fileName); 

Por fin de archivo estoy asumiendo que quiere decir la extensión de archivo? (Es decir, mp4)

Si es así, puede utilizar ContentResolver para obtener el mimetype:

 String mimeType = getContentResolver().getType(sourceUri); 

Esto le dará el tipo mimet suponiendo que están dentro de la MediaStore que deberían si tiene el contenido Uri . Así que obtendrás algo como "image / png", "video / mp4", etc.

A continuación, puede utilizar MimeTypeMap para obtener la extensión de archivo del tipo mimetype:

 String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); 

Tenga en cuenta que nunca debe subcadenar el tipo de mimet después de "/" para obtener la extensión como algunos mimetype no utiliza su extensión, como archivos ".mov" que tiene el tipo de MIME "video / quicktime"

  • ¿Cómo puedo escuchar el montaje de la tarjeta SD en Android?
  • File.canWrite () dice "true" pero no puedo escribir en almacenamiento extraíble (kit kat)
  • Android Mediaplayer: problema de setDataSource para el archivo de medios descargado
  • Cómo obtener Galley Thumbnail para la carpeta de imágenes en particular en android?
  • ¿Cómo encontrar el almacenamiento interno (Almacenamiento predeterminado del teléfono) y el almacenamiento externo (tarjeta SD extraíble) en android?
  • Almacenamiento extraíble (externo) vía sdcard por los fabricantes
  • Abrir el selector de archivos de mi actividad de Android
  • Android External App Install (en la tarjeta SD), vuelva a cargar las alarmas del alarmmanager al re-montar a través del receptor
  • Cómo escanear la tarjeta SD para la extensión particular de los archivos en android?
  • Los archivos de tarjeta SD actualizados mediante programación no se actualizan en Windows Explorer
  • Abra una aplicación de cámara por intención y guardar la imagen en el SD y imageView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.