DocumentContract上的ContentResolver查询列出所有不考虑选择的文件

问题描述 投票:1回答:1

我正在尝试从目录中获取具有某种MIME类型的所有文件-我需要所有图像。

我使用了一些示例代码,在其中将MediaStore用作URI,但后来却发现很难为所选目录过滤该代码,因为结果集中返回的URI与我提供的URI格式不同...

所以我找到了此示例代码https://github.com/googlesamples/android-DirectorySelection

它在选定的子树上查询DocumentContract,现在需要过滤所需的MIME类型。

问题是:无论我提供什么作为选择参数,它总是会列出在该目录中找到的所有文件/目录。

我什至尝试使用“ 1 = 2”作为选择,但这仍然列出了所有内容。任何想法我在做什么错了吗?

val childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(uri,DocumentsContract.getTreeDocumentId(uri))

        val childCursor = contentResolver.query(
            childrenUri,
            arrayOf(DocumentsContract.Document.COLUMN_DISPLAY_NAME, COLUMN_MIME_TYPE),
            "$COLUMN_MIME_TYPE=?",
            Array(1){MimeTypeMap.getSingleton().getExtensionFromMimeType("jpg")},
            null
        )
        Log.i("ADDFOLDER", "files: ${childCursor.count}")
        try {
            while (childCursor.moveToNext()) {
                Log.d(
                    TAG, "found child=" + childCursor.getString(0) + ", mime=" + childCursor
                        .getString(1)
                )
            }
        } finally {
            closeQuietly(childCursor)
        }
android android-contentresolver
1个回答
0
投票

FileSystemProvider不支持对子对象的选择或排序args,它已损坏。

https://github.com/aosp-mirror/platform_frameworks_base/blob/53a9ccaa926945149b4546c67b50ce1ae88ba777/core/java/com/android/internal/content/FileSystemProvider.java#L285

基础DocumentsProvider也为子查询剥离选择args,所以我永远都不会依赖它。您可以使用搜索文档Uri进行过滤,但仍然忽略排序顺序(编辑:更重要的是,这是递归搜索,因此它将在任何子文件夹中搜索。)*

*发件人:https://www.reddit.com/r/androiddev/comments/b80qqt/weekly_questions_thread_april_01_2019/ek9oew6/

© www.soinside.com 2019 - 2024. All rights reserved.