我正在尝试从Google同步照片中的一个文件夹中获取图库应用中的图片 . 选择图像后,Uri正在正确传回 . 但是当我试图在存储设备上获取该图像的实际路径时,我可以使用它,它会崩溃 . 这个问题似乎特别针对 picasa content provider .
在Nexus S和Nexus 7以及其他设备上进行了测试 .
E/AndroidRuntime(14572): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.google.android.gallery3d.provider/picasa/item/5427003652908228690 }}
这里,dat字段似乎正确地传递了Uri,但是当我尝试获取图像的位置时,它会崩溃并出现以下错误 .
W/GalleryProvider(14381): unsupported column: _data
似乎Picasa相册的内容提供商没有_data字段 .
获取位置的代码是:
// imageUri is the Uri from above.
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(imageUri, proj,null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(column_index);
cursor.close();
此图片似乎唯一支持的列包括:[user_account,picasa_id,_display_name,_size,mime_type,datetaken,纬度,经度,方向]
我们如何获得此图像的实际位置 . 如果我们不应该使用此图像, these images shouldn't be shown to the user in the first place.
启动图库应用程序的意图是:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
7 回答
我现在浪费了很多时间,现在我找到了一个解决方案,在所有情况下都可以工作,没有特殊线程或任何东西的魔法下载 . 以下方法从用户选择的内容返回流,这适用于野外的所有内容 .
经过大量的研究,我觉得有太多的变通方法可以做一些看起来很简单的事情 . 所以,我继续编写了一个小型库来处理所有复杂的文件,并且碰巧适用于我能想到的所有可能的场景 . 试一试,看看这是否有帮助 .
http://techdroid.kbeanie.com/2013/03/easy-image-chooser-library-for-android.html
这是一个初始实现 . 虽然它几乎可以处理所有情况,但可能会有一些错误 . 如果您使用此库,请告诉我您的反馈,如果可以的话,可以进一步改进 .
我在一年前面临同样的问题..我告诉你我的解决方案(代码很乱,请重构它) . 所以,你有从图库返回的图像URI:
现在我们需要下载图像的功能:
ImageInfo是我的类,用于存储图像的路径及其方向 .
基于@drindt答案,下面的代码从Google Photo Cloud 同步但未在设备文件中提供下载的临时
File
路径 .下面的技巧对我有用,我在这里做的是如果URI中有任何权限url,那么我使用下面的代码创建一个临时图像并返回相同的内容URI .
我回答了类似的问题question here as well..
我用这种方法,对我来说很好,希望这会对你有所帮助....
ACTIVITYRESULT_CHOOSEPICTURE是调用startActivity时使用的int(intent,requestCode);
如果上面的代码不起作用,只需参考这个链接...它将显示方式
http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/
最后以经典解决方案结束......使用Document.util,它涵盖了所有权限:-1-在你的onActivityResult()里面: -
2-创建类DocumentUtils: -
}
3-此外,您还需要ImageLoader.java中的以下功能:-