android - Android Q - 如何获取下载文件夹的真实路径
问题描述
使用 Intent.ACTION_OPEN_DOCUMENT_TREE 我得到了这个 uri:
content://com.android.providers.downloads.documents/tree/downloads
我怎样才能将它转换为/storage/emulated/0/Download
- 真正的路径?我不想用
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
因为已弃用。
编辑:我需要公共位置的真实路径进行下载,因为在 android Q 上,这是应该存储公共文档的文件夹。
解决方案
根据文档,将 DCIM/... 用于 RELATIVE_PATH,其中 ... 是您的自定义子目录。所以,你会得到这样的结果:
val resolver = context.contentResolver
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "CuteKitten001")
put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/PerracoLabs")
}
val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
resolver.openOutputStream(uri).use {
// TODO something with the stream
}
请注意,由于 RELATIVE_PATH 是 API 级别 29 的新功能,因此您需要在较新的设备上使用此方法,并在较旧的设备上使用 getExternalStoragePublicDirectory()。
推荐阅读
- coldfusion - 从 ColdFusion 11 升级到 ColdFusion 2016 后,应用程序文件无法正常工作
- javascript - 将数组对象渲染到 FlatList React Native
- google-sheets - 我想在谷歌表中自动“L”列
- google-chrome - 如何以编程方式识别最新版本的 chrome
- python - 字符串的正则表达式
- android - 如何使用线性布局将视图定位到边框
- javascript - 如何在Javascript中从数组创建树(父子)对象
- javascript - 在 React Native 中将线放在图标下方
- android - 如何在 Jetpack Compose 中获取上下文
- java - Java:将相同的listArray传递给下一个函数后丢失了一个项目