Android getRealPathFromURI()不使用ICS&;基于Picasa的图像
我正在尝试获取图像的本地路径,以便将其上载到服务器。当使用pre-ICS时,它将通过Android getRealPathFromURI()不使用ICS&;基于Picasa的图像,android,android-gallery,picasa,Android,Android Gallery,Picasa,我正在尝试获取图像的本地路径,以便将其上载到服务器。当使用pre-ICS时,它将通过getRealPathFromURI(theURI) 但是,对于ICS,URI将包含一个uriString,类似于:content://com.google.android.gallery3d.provider/picasa/item/12312312312312 运行getRealPathFromURI(theURI)返回null 我现在是否需要提取上述uriString并通过API手动下载图像(如果我检测到它
getRealPathFromURI(theURI)
但是,对于ICS,URI将包含一个uriString
,类似于:content://com.google.android.gallery3d.provider/picasa/item/12312312312312
运行getRealPathFromURI(theURI)
返回null
我现在是否需要提取上述uriString
并通过API手动下载图像(如果我检测到它是Picasa gallery图像),而不是本地存储的图像?还是我完全错过了什么
谢谢你的建议
编辑:
似乎我在寻找一个错误的问题
在下面的链接中发现问题。。。这正是我所期望的我需要做的。相当恼人的谷歌/安卓没有更优雅地处理这个问题
要正确处理从库中获取图像,您需要处理三种情况:
这就是我在运行安卓4.0+的设备上发现的 作为示例,您给出的ICS URI是一个带有content://scheme的URI,因此应该有一个ContentProvider来负责这一点。 因此,getRealPathFromURI()使用的技巧有什么用途?只需让ContentResolver为您完成以下工作:
InputStream inStream = getContentResolver().openInputStream(theUri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
这个链接非常有用。我们知道在使用谷歌硬盘时有一个文件吗?我猜ContentResolver的目的是对数据源进行抽象。您不需要知道数据在哪里,也不需要知道如何获取数据。可能是一个文件。可能是来自谷歌硬盘的数据。你不在乎。