从 Uri Android Lollipop 获取路径名

get Path name from Uri Android Lollipop

棒棒糖版。

我使用这个 code 从 Uri 确定文件路径。工作正常,但如果我从下载的应用程序中选择文件 - getRealPathFromURI_API19 功能对我不起作用。例如,这种情况下的整个 Id 等于 /document/4,我的应用程序崩溃了。

好的,我对此函数进行了一些更改,"id" Uri“/document/4”现在等于 4,但函数 returns 为空。

是否可以从任何应用程序获取所选图像的文件路径? 我需要 ExifInterface 的文件路径。

Works fine

仅针对您尝试过的少数设备,针对您尝试过的一个文件源 (MediaStore)。

Is it possible get file path for choosed image from any app?

没有。 A Uri is not a File。任何 Uri 都不需要转换为文件路径,因为 Uri 可能不代表文件,更不用说您的应用有权访问的文件了。对您来说,Uri 是另一个应用程序拥有的内容的不透明地址,就像 URL 是 Web 服务器拥有的内容的不透明地址一样。而且,正如您无法神奇地将 URL 转换为您可以使用的文件路径一样,您也无法神奇地将 Uri 转换为您可以使用的文件路径。

I need file path for ExifInterface.

实际上,您需要读取或可能写入与 Uri 关联的 EXIF headers,您认为它指向包含这些 headers 的图像。虽然 ExifInterface 允许您这样做,但它是为应用程序设计的,可以使用它们自己的图像,而不是来自 third-party 个应用程序的图像。

您的选择是:

  • Uri上使用ContentResolveropenInputStream(),将图片复制到本地,之后就可以使用ExifInterface

  • 使用一些其他更灵活的 EXIF 代码。例如,the EXIF classes from the AOSP Mms app 可以从 InputStream

  • 中读取 EXIF headers