MediaStore - Uri查询所有类型的文件(媒体和非媒体)

时间:2012-04-30 12:55:22

标签: android mediastore

在班级MediaStore.Files中,它提到了

  

媒体提供者表,其中包含媒体存储中所有文件的索引,包括非媒体文件。

我对查询PDF等非媒体文件感兴趣。

我正在使用CursorLoader来查询数据库。构造函数的第二个参数需要一个Uri参数,很容易获得媒体类型音频,图像和视频,因为每个参数都为它们定义了EXTERNAL_CONTENT_URIINTERNAL_CONTENT_URI常量。

对于MediaStore.Files,没有这样定义的常量。我尝试使用getContentUri()方法,但无法找出volumeName的参数值。我尝试给出“/ mnt / sdcard”以及将设备连接到我的系统时出现的卷名,但是徒劳无功。

我看到similar question on Google Groups,但未解决。

编辑:我也尝试过使用Uri.fromFile(新文件(“/ mnt / sdcard /”))和Uri.parse(新文件(“/ mnt / sdcard”)。toString())但是没有找不到。

1 个答案:

答案 0 :(得分:40)

它是"external""internal",虽然内部(系统文件)在这里可能没用。

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

如果只想要.pdf,可以查看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);