【问题标题】:Get real path from URI? Android 9+从 URI 获取真实路径?安卓 9+
【发布时间】:2019-11-15 13:21:51
【问题描述】:

我有我的文件的 uri。现在我需要获取发送它们的真实路径。 (uri 就像:“content://some-path”)。

这适用于 Android 9

【问题讨论】:

  • 为什么需要文件路径?
  • @PPartisan 发出 POST 多部分请求
  • 您尝试使用哪些库/函数来发出 POST Multipart 请求,因为它们可能能够采用 FileDescriptor 对象而不是文件名,您可以使用 Android 9 +
  • @Andrew Retrofit 2,但我需要能够发送文件的路径!

标签: java android


【解决方案1】:

因此,对于 Android 9+,您只能在应用程序私有存储区域内使用文件路径,否则您必须使用 URI 和 ContentResolvers

9+变化详情见https://developer.android.com/training/data-storage/files/external-scoped

所以我在使用 Retrofit2 时看到了三个解决方案

  1. 从 contentResolver 中获取 Java FileDescriptor 并从 contentResolver 中读取文件,将其写入应用程序的私有存储区。然后,您可以像往常一样从该文件副本中获取 Java 文件对象。这类似于 ViVekH 建议的stackoverflow.com/a/52814247/3518278
  2. 从 contentResolver 获取 Java FileDescriptor 并将其读入内存字节数组。我不是 Retrofit2 用户,但我相信您可以从 Byte 数组而不是 Java File 对象创建请求正文或 Multipart 部分。
  3. 使用 RetroFit2 / OKHTTP 提出功能请求,以便能够为其提供 Java FileDescriptor 对象而不是 File 对象

注意contentResolver 您可以查询它以获取“显示名称”作为路径的文件名部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多