从URI获取真实路径? Android 9+

时间:2019-11-15 13:21:51

标签: java android

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

这是针对Android 9

1 个答案:

答案 0 :(得分:1)

因此,在Android 9+中,您只能在应用程序专用存储区域内使用文件路径,否则必须使用URI和ContentResolver

有关9+中更改的详细信息,请参见https://developer.android.com/training/data-storage/files/external-scoped

所以我在使用Retrofit2时会看到三种解决方案

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

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