首页 > 解决方案 > 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 上,这是应该存储公共文档的文件夹。

标签: androiddirectorydownloadrealpath

解决方案


根据文档,将 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()。


推荐阅读