如何解决如何使用MediaStore从Android 10上的特定文件夹读取图像
我正在尝试从DCIM / Folder_Name(应用程序保存图像的位置)中读取图像。我只需要从该Folder_Name中像画廊一样显示图像。 我尝试将MediaStore与query和cursor一起使用。但是我只使用存储桶名称列出存储桶名称,该名称是包含图像的文件夹的名称。我不知道如何只过滤Folder_name及其内容。这是我的代码。
val projection= arrayOf(MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID,MediaStore.Images.Media.BUCKET_ID)
val cursor: Cursor? = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,projection,"",null,MediaStore.Images.Media.DEFAULT_SORT_ORDER)
cursor?.moveToFirst()
if(cursor!=null){
while (!cursor.isAfterLast){
Log.d("CURSOr","Name "+cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME)))
cursor.moveToNext()
}
}
cursor?.close()
如何在Android 10中使用选择查询来选择所需的文件夹内容 谢谢。
解决方法
我对RELATIVE_PATH
常量而不是BUCKET_DISPLAY_NAME
(只是给你最后一个文件夹的名称)进行了投影,并使用以下代码选择了LIKE %DCIM/Test%
以过滤出结果DCIM/Test
文件夹中。
val projection = arrayOf(_ID,DATE_ADDED,BUCKET_DISPLAY_NAME,RELATIVE_PATH)
val selection = "${MediaStore.MediaColumns.RELATIVE_PATH} LIKE ?"
val selectionArgs = arrayOf("%DCIM/Test%") // Test was my folder name
val sortOrder = "$DATE_ADDED DESC"
app.contentResolver.query(
EXTERNAL_CONTENT_URI,projection,selection,selectionArgs,sortOrder
)?.use {
val id = it.getColumnIndexOrThrow(_ID)
val bucket = it.getColumnIndexOrThrow(BUCKET_DISPLAY_NAME)
val date = it.getColumnIndexOrThrow(DATE_ADDED)
val path = it.getColumnIndexOrThrow(RELATIVE_PATH)
while (it.moveToNext()) {
// Iterate the cursor
}
}
此方法的唯一缺点是RELATIVE_PATH
可用于API级别29(Q)及更高级别。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。