android - 如何在 api 级别 30 中使用 MediaStore API 获取 pdf uri?
问题描述
我正在使用媒体商店在回收站视图中列出 pdf。媒体存储不会在 android 10 及更高版本上加载非媒体文件,但适用于媒体文件
在build.gradle
compileSdkVersion 30
buildToolsVersion "30.0.2"
minSdkVersion 21
targetSdkVersion 30
FetchPdf.kt
class FetchPdf(private val applicationContext: Context) {
private val arrayList = ArrayList<Pdf>()
fun getPdf(): ArrayList<Pdf>{
val collection = MediaStore.Files.getContentUri("external")
val projection = arrayOf(
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATE_MODIFIED,
MediaStore.Files.FileColumns.DISPLAY_NAME,
MediaStore.Files.FileColumns.SIZE,
MediaStore.Files.FileColumns.DATA
)
val mimeType = "application/pdf"
val whereClause = MediaStore.Files.FileColumns.MIME_TYPE + " IN ('" + mimeType + "')"
val orderBy = MediaStore.Files.FileColumns.DATE_MODIFIED + " DESC"
val cursor: Cursor? = applicationContext.contentResolver.query(
collection,
projection,
whereClause,
null,
orderBy
)
if (cursor != null) {
val idCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID)
val nameCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME)
val sizeCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE)
val dataCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA)
if (cursor.moveToFirst()) {
do {
val fileUri: Uri = Uri.withAppendedPath(
MediaStore.Files.getContentUri("external"),
cursor.getString(idCol)
)
val name = cursor.getString(nameCol)
val data = cursor.getString(dataCol)
val size = cursor.getLong(sizeCol)
arrayList.add(Pdf(name, fileUri.toString(), data))
} while (cursor.moveToNext())
}
cursor.close()
}
return arrayList
}
}
在清单中:
我只有
READ_EXTERNAL_STORAGE
权限
我试过的:
我试图改变
MediaStore.Files.FileColumns.DATA
为MediaStore.Files.FileColumns.RELATIVE_PATH
不工作
我尝试递归遍历每个文件夹仍然无法正常工作
任何帮助,将不胜感激。
解决方案
推荐阅读
- sql - 使用 case 表达式求和
- ios - MainViewController 有没有办法知道何时调用了 press IBAction 函数?
- python - 使用 SQLite3 将值从变量导入数据库表时基于 Str 的 ValueError
- java - 尽管已安装,但未找到 Ubuntu 18.04 Java 命令
- acumatica - 如何在 Acumatica 中自动创建和 SFTP 传输快照?
- react-native - React Native StackNavigator Reference Null on Props
- jquery - jquery 通过单击将 append() 元素相互切换
- rabbitmq - RabbitMQ 中的优先级是如何实现的
- python - 如何通过 peewee 在 sqlite 中存储 python 列表和字典数据类型
- react-native - 为什么 fontfamily 样式不适用于反应原生项目