web-dev-qa-db-fra.com

MediaStore - Uri pour interroger tous les types de fichiers (multimédias et non multimédias)

Dans la classe MediaStore.Files , il est mentionné que,

Table de fournisseur de médias contenant un index de tous les fichiers du stockage multimédia, y compris les fichiers non multimédias.

Je souhaite rechercher des fichiers non multimédias tels que PDF.

J'utilise CursorLoader pour interroger la base de données. Le deuxième paramètre du constructeur nécessite un argument Uri qui est facile à obtenir pour les types de média Audio, Images et Vidéo car chacun d'eux a une constante EXTERNAL_CONTENT_URI Et INTERNAL_CONTENT_URI Définie pour eux.

Pour MediaStore.Files, il n'y a pas une telle constante définie. J'ai essayé d'utiliser la méthode getContentUri() mais je n'ai pas pu trouver la valeur d'argument pour volumeName. J'ai essayé de donner "/ mnt/sdcard" et aussi le nom du volume qui apparaît lorsque je connecte l'appareil à mon système mais en vain.

J'ai vu un question similaire sur Google Groupes mais cela n'est pas résolu.

EDIT: J'ai également essayé d'utiliser Uri.fromFile (nouveau fichier ("/ mnt/sdcard /")) et Uri.parse (nouveau fichier ("/ mnt/sdcard"). ToString ()) mais cela n'a pas fonctionné non plus .

20

Il est "external" ou "internal" bien que les fichiers internes (fichiers système) ne soient probablement pas utiles ici.

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 tu veux .pdf vous seul pouviez vérifier le mimetype

// 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);
41
zapl