2012-04-30 19 views
17

Nella classe di classe MediaStore.Files, la sua hanno detto che,MediaStore - Uri per interrogare tutti i tipi di file (media e non media)

media tabella dei provider che contiene un indice di tutti i file nella memoria dei media, tra cui file non multimediali.

Sono interessato a eseguire query per file non multimediali come PDF.

Sto utilizzando CursorLoader per interrogare il database. Il secondo parametro per il costruttore richiede un argomento Uri che è facile da ottenere per i tipi di file Audio, Immagini e Video poiché ognuno di essi ha una costante EXTERNAL_CONTENT_URI e INTERNAL_CONTENT_URI definita per essi.

Per MediaStore.Files non esiste una costante definita. Ho provato a utilizzare il metodo getContentUri() ma non sono riuscito a capire il valore dell'argomento per volumeName. Ho provato a dare "/ mnt/sdcard" e anche il nome del volume che appare quando connetto il dispositivo al mio sistema, ma invano.

Ho visto un similar question on Google Groups ma non è stato risolto.

EDIT: (. New File ("/ mnt/sdcard") toString()) Ho anche provato ad utilizzare Uri.fromFile (new File ("/ mnt/sdcard /")) e Uri.parse ma che didn' o risolvi entrambi.

+0

solo i file non-media? Come in nessun '.jpg'' .avi' '.mp3' ma solo' .txt' etc? – zapl

+0

Sì. Solo file non multimediali. Per '.jpg',' .avi', ecc. Posso usare le classi Audio, Video e Immagini. –

risposta

34

È "external" o "internal" anche se interno (file di sistema) probabilmente non è utile qui.

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); 

Se volete .pdf solo si potrebbe verificare il 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

Grazie mille! :) Come l'hai capito? Ho cercato parecchio su Internet. Mi sono imbattuto in "external" ma l'ho usato come questo Uri.fromParts ("content", "external", "") che non ha funzionato. –

+0

Osservando i codici sorgente - 'Uri.parse (" content: // media/external/file ")' o 'Uri.fromParts (" content "," media/external/file ", null)' dovrebbe fare lo stesso – zapl

+0

è compatibile per Android 2.2? + ... –