34

MediaStore.Files类中,它提到,

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

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

我正在使用 CursorLoader 来查询数据库。构造函数的第二个参数需要一个 Uri 参数,该参数对于媒体类型 Audio、Images 和 Video 很容易获得,因为它们中的每一个都为它们定义了一个EXTERNAL_CONTENT_URI常量INTERNAL_CONTENT_URI

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

我在 Google Groups 上看到了类似的问题,但没有解决。

编辑:我也尝试使用 Uri.fromFile(new File("/mnt/sdcard/")) 和 Uri.parse(new File("/mnt/sdcard").toString()) 但这也没有成功.

4

1 回答 1

56

它是"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);
于 2012-04-30T13:25:40.340 回答