从搜索到的图像的内容URI获取绝对文件路径

时间:2016-03-08 15:02:41

标签: android android-intent uri filepath android-fileprovider

我正在尝试使用隐式意图ACTION_SEND将其他应用程序中的图像共享到我的应用程序。

在从Chrome浏览器共享搜索图像时,应用会收到内容URI的意图,如下所示: content://com.android.chrome.FileProvider/images/screenshot/1457448067808912906311.jpg

如何从此类内容URI中获取文件路径?所有其他应用如Facebook,Google +都在这样做。 我正在使用FileChooser来获取其他类型的内容URI的文件路径(例如,来自图库)。

到处寻找,没有多少帮助。 有人可以建议如何使用这些内容URI吗?

2 个答案:

答案 0 :(得分:3)

  

如何从此类内容URI中获取文件路径?

你没有,因为Uri后面根本没有文件,更不用说你可以访问的文件了。 Uri可能指向:

  • 外部存储设备上的本地文件
  • 其他应用的内部存储上的本地文件
  • 可移动存储上的本地文件
  • 加密且需要动态解密的本地文件
  • 数据库中BLOB列中保存的字节流
  • 首先需要由其他应用下载的内容
  • ......等等
  

Facebook,Google +等所有其他应用都在这样做

不,他们不是。他们正在使用ContentResolver和:

  • openInputStream()读取与内容相关的字节
  • getType()获取与内容关联的MIME类型
  • query()OpenableColumns获取与内容相关联的尺寸和显示名称

答案 1 :(得分:3)

如果您绝对需要该文件的本地副本,则需要打开InputStream将内容复制到您知道路径的本地文件,然后从那里开始。旁注:番石榴ByteStreams#copy是一种简单的方法。

当然这个文件不再由原始的Uri源支持,所以我不认为这是你想要的。相反,您应该使用Uri的API。看看Storage Access Framework

修改

以下是从InputStream

获取Uri的方法
InputStream inputStream = getContentResolver().openInputStream(uri);