我正在开展一项活动和相关任务,允许用户从图库中选择一张图片作为他们的个人资料图片。一旦做出选择,图像就会通过其 API 上传到 Web 服务器。我有这个来自画廊的工作常规图像。但是,如果所选图像来自Picasa 网络相册,则不会返回任何内容。
我做了很多调试,并将问题缩小到这种方法。
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
//cursor is null for picasa images
if(cursor!=null)
{
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
else return null;
}
Picasa 图像返回一个空光标。 然而, MediaStore.Images.Media.DATA对他们来说不是空的。它只返回一个#id,所以我猜测该地址没有实际的位图数据。Picasa 图像是否完全存储在设备本地?
我还从文档中注意到MediaStore.Images.ImageColumns.PICASA_ID存在。此值适用于选定的 picasa 图片,但不适用于其他图库图片。我在想我可以使用这个值来获取图像的 URL,如果它没有存储在本地,但我在任何地方都找不到关于它的任何信息。