android - 在 Mediastore Uri 和 DocumentFile Uri 之间转换时出错:“无法确定是否为子项”
问题描述
这是场景:
我正在编写一个应用程序,它要求用户打开一个目录,并且该应用程序正在加载目录中的所有图像(然后执行移动或删除等基本操作)。因为listFiles
速度很慢,我正在使用MediaStore
API 获取图像(查询_data
从 received 获取的列DocumentFile
Uri
)并在需要时将它们转换DocumentFile
为如下:
// Given MediaStore Uri:
val docUri = MediaStore.getDocumentUri(context, mediaUri)
return DocumentFile.fromSingleUri(context, docUri)
问题是,有时我会得到:
java.lang.IllegalArgumentException: Failed to determine if primary:DirectoryA/image.jpg is child of primary:DirectoryB/image.jpg: java.io.FileNotFoundException: Missing file for primary:DirectoryB/image at /storage/emulated/0/DirectoryB
...当我尝试在目录中获取DocumentFile
一些内容时(第一行)。出于某种原因,Android 会尝试检查是否应该在不同的目录中?(也许图像在某个时候存在?)。image.jpg
DirectoryA
image.jpg
顺便说一句,当我移动我正在使用的图像时DocumentsContract.moveDocument
。
*应用程序是 Android 10+。
更新:我如何查询 MediaStore:
context.contentResolver.query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
arrayOf(MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA),
MediaStore.Images.ImageColumns.DATA + " like ? and " + MediaStore.Images.ImageColumns.DATA + " not like ?",
arrayOf("$path/%", "$path/%/%"),
null
)
这适用于 Android Q,带有targetSdkVersion 29
.
解决方案
推荐阅读
- php - PHP DOMDocument saveHTML 添加字符
- flutter - 颤振情绪识别器api?
- c# - 将对象参数从一个类传递到另一个类
- c++ - 从 diskpart 读取输出
- python - PyQt5。如何在与 ContextMenu 连接的 QTextEdit 中获取光标位置?
- angularjs - 无法在angularjs中显示json数据
- javascript - expressJS 上的异步函数
- .htaccess - 从站点上的特定文件夹中删除 HTTPS
- java - 没有嵌套评估时,Eclipse“无法执行嵌套评估”错误
- asp.net-web-api - 使用 FluentValidation 进行更深入的数据库验证是不好的做法吗?