我正在尝试使用隐式意图ACTION_SEND将其他应用程序中的图像共享到我的应用程序。
在从Chrome浏览器共享搜索图像时,应用会收到内容URI的意图,如下所示:
content://com.android.chrome.FileProvider/images/screenshot/1457448067808912906311.jpg
如何从此类内容URI中获取文件路径?所有其他应用如Facebook,Google +都在这样做。 我正在使用FileChooser来获取其他类型的内容URI的文件路径(例如,来自图库)。
到处寻找,没有多少帮助。 有人可以建议如何使用这些内容URI吗?
答案 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);