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 笔记 ------当你获得文件路劲时获取此文件的信息

Android从Uri获取视频图片的真实地址

Android:从服务器下载真实大小的图像

如何使用带有arcore的Android获取以mm为单位的真实图片尺寸

Android - 获取从文件资源管理器中选择的 .txt 文件的真实路径

Android:如何获取匹配缩略图 URI 的文件路径?