2012-04-30 16 views
17

En la clase de la clase MediaStore.Files, su mencionado que,MediaStore - Uri para consultar todos los tipos de archivos (los medios de comunicación y no los medios de comunicación)

tabla de proveedores de medios que contiene un índice de todos los archivos en el almacenamiento de medios, incluyendo archivos no multimedia

Estoy interesado en consultar archivos no multimedia como PDF.

Estoy usando CursorLoader para consultar la base de datos. El segundo parámetro para el constructor requiere un argumento Uri que es fácil de obtener para los tipos de medios Audio, Imágenes y Video ya que cada uno de ellos tiene una constante EXTERNAL_CONTENT_URI y INTERNAL_CONTENT_URI definida para ellos.

Para MediaStore.Files no existe una constante definida. Intenté usar el método getContentUri(), pero no pude encontrar el valor de argumento para volumeName. Intenté dar "/ mnt/sdcard" y también el nombre del volumen que aparece cuando conecto el dispositivo a mi sistema pero en vano.

Vi un similar question on Google Groups pero eso no está resuelto.

EDITAR: También traté de usar Uri.fromFile (nuevo archivo ("/ mnt/sdcard /")) y Uri.parse (nuevo archivo ("/ mnt/sdcard"). ToString()) pero no lo hice t funcionar bien.

+0

sólo los archivos de los medios de comunicación no? Como en ningún '.jpg'' .avi' '.mp3' pero solo' .txt', etc. – zapl

+0

Sí. Solo archivos no multimedia. Para '.jpg',' .avi', etc. Puedo usar las clases de Audio, Video e Imágenes. –

Respuesta

34

Es "external" o "internal" aunque interna (archivos de sistema) probablemente no sea útil aquí.

ContentResolver cr = context.getContentResolver(); 
Uri uri = MediaStore.Files.getContentUri("external"); 

// every column, although that is huge waste, you probably need 
// BaseColumns.DATA (the path) only. 
String[] projection = null; 

// exclude media files, they would be here also. 
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "=" 
     + MediaStore.Files.FileColumns.MEDIA_TYPE_NONE; 
String[] selectionArgs = null; // there is no ? in selection so null here 

String sortOrder = null; // unordered 
Cursor allNonMediaFiles = cr.query(uri, projection, selection, selectionArgs, sortOrder); 

Si desea .pdf solamente se puede comprobar el tipo MIME

// only pdf 
String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?"; 
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("pdf"); 
String[] selectionArgsPdf = new String[]{ mimeType }; 
Cursor allPdfFiles = cr.query(uri, projection, selectionMimeType, selectionArgsPdf, sortOrder); 
+0

¡Muchas gracias! :) ¿Cómo te diste cuenta? Busqué bastante en Internet. Me encontré con "externo" pero lo usé como este Uri.fromParts ("contenido", "externo", "") que no funcionó. –

+0

Al mirar los códigos fuente - 'Uri.parse (" contenido: // media/externo/archivo ")' o 'Uri.fromParts (" contenido "," media/externo/archivo ", nulo)' debería hacer lo mismo – zapl

+0

¿es compatible con Android 2.2? + ... –

Cuestiones relacionadas