Android Q - 如何获取下载文件夹的真实路径
Posted
技术标签:
【中文标题】Android Q - 如何获取下载文件夹的真实路径【英文标题】:Android Q - How to get real path of Downloads folder 【发布时间】:2020-02-05 12:20:14 【问题描述】:有了 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 上,这是应该存储公共文档的文件夹。
【问题讨论】:
您使用的是 Kotlin 还是 Java? 我正在使用java 尝试使用 getExternalFilesDir()、getExternalCacheDir() 或 getExternalMediaDir()(Context 上的方法)而不是 Environment.getExternalStorageDirectory()。 谢谢,所有这些方法都返回真实路径,但来自私人文件夹,而不是公共位置,我更新了我的问题。location for downloads, because on android Q, this is the folder where should be stored public documents.
我认为有一个 Documents 目录。
【参考方案1】:
根据文档,将 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()。
【讨论】:
也许我不明白你的答案,但我不知道如何从 Uri 获取真正的下载路径(Android Q 文件夹中的什么我应该在哪里存储公共文档)。 点击此链接找到Real_Path:developer.android.com/reference/android/provider/… 不幸的是,它不起作用。 resolver.query(uri, new String[]MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.RELATIVE_PATH, null, null, null);为第二个字段返回 null,首先正确返回显示名称。也许它只适用于文件,而不适用于文件夹:(在 Q 模拟器上测试 这个答案根本没有回答这个问题。以上是关于Android Q - 如何获取下载文件夹的真实路径的主要内容,如果未能解决你的问题,请参考以下文章
Android 笔记 ------当你获得文件路劲时获取此文件的信息
如何使用带有arcore的Android获取以mm为单位的真实图片尺寸