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

36
在类MediaStore.Files中提到,它是一个包含所有媒体存储中文件索引的媒体提供程序表,包括非媒体文件。
我想查询PDF等非媒体文件。
我正在使用CursorLoader查询数据库。构造函数的第二个参数需要一个Uri参数,对于音频、图像和视频等媒体类型,很容易获取每个类型的EXTERNAL_CONTENT_URIINTERNAL_CONTENT_URI常量。
对于MediaStore.Files,没有这样定义的常量。我尝试使用getContentUri()方法,但无法弄清楚volumeName的参数值。我尝试了提供"/mnt/sdcard"和连接设备时出现的卷名,但都没有成功。
我看到在Google Groups上有一个类似的问题,但尚未解决。
编辑:我还尝试使用Uri.fromFile(new File("/mnt/sdcard/"))和Uri.parse(new File("/mnt/sdcard").toString()),但都没有成功。

只包括非媒体文件吗?也就是说没有“.jpg”、“.avi”、“.mp3”,只有“.txt”等文件? - zapl
是的,只有非媒体文件。对于 .jpg.avi 等文件,我可以使用音频、视频和图像类。 - Shyam Prasad Murarka
1个回答

60

虽然内部文件(系统文件)在这里可能没有用,但它是"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 文件,你可以检查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);

非常感谢! :) 你是怎么想到的?我在互联网上搜索了很多,虽然找到了“external”,但是使用Uri.fromParts("content", "external", "")并没有成功。 - Shyam Prasad Murarka
1
通过查看源代码 - Uri.parse("content://media/external/file")Uri.fromParts("content", "media/external/file", null) 应该是相同的。 - zapl
@Kushan2 要么在Java代码中删除where子句并进行过滤,要么将所有MIME类型添加到where子句中,例如像https://dev59.com/lG025IYBdhLWcg3wChKb - https://sqlite.org/lang_select.html - zapl
字符串值在MediaStore中作为常量可用(例如VOLUME_EXTERNAL)。有关更多详细信息,请参阅文档 - jkemming

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接