我有文件的uri。现在,我需要找到发送它们的真实路径。 (uri就像:“ content:// some-path”)。
这是针对Android 9
答案 0 :(得分:1)
因此,在Android 9+中,您只能在应用程序专用存储区域内使用文件路径,否则必须使用URI和ContentResolver
有关9+中更改的详细信息,请参见https://developer.android.com/training/data-storage/files/external-scoped
所以我在使用Retrofit2时会看到三种解决方案
FileDescriptor
,然后从contentResolver中读取文件,然后将其写入应用程序的专用存储区域。然后,您可以从文件的该副本中正常获取Java文件对象。这类似于ViVekH FileDescriptor
,并将其读入内存中的Byte数组。我不是Retrofit2用户,但我相信您可以从字节数组而不是Java File
对象创建请求正文或Multipart部件。FileDescriptor
对象而不是File
对象注意contentResolver
,您可以查询它以获取“显示名称”作为路径的文件名部分。