首页 文章

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

提问于
浏览
19

在类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 回答

  • 39

    它是 "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);
    

相关问题