12

我使用ACTION_PICK意图从图库中选择图像。一些相册如“帖子”“个人资料照片”等都标有Picasa图标。对于从这样的专辑图片,我得到一个URI与此类似:如何从URI加载Picasa图像?

content://com.google.android.gallery3d.provider/picasa/item/5769844615871490082 

我可以用ContentResolverBitmapFactory没有问题加载此URI的图像:

final InputStream ist = context.getContentResolver().openInputStream(intent.getData()); 
final Bitmap bitmap = BitmapFactory.decodeStream(ist); 

但我无法加载重新启动应用程序后使用存储的URI映像。我得到这个当decodeStream()叫做:

03-11 12:34:56.502: A/libc(1172): Fatal signal 11 (SIGSEGV) at 0x00000408 (code=1), thread 1462 03-11 12:34:56.502: 
    W/ActivityManager(478): Permission Denial: opening provider 
    com.android.gallery3d.provider.GalleryProvider from 
    ProcessRecord{41cdd220 1172:com.mycompany.myapp/u0a10085} 
    (pid=1172, uid=10085) requires 
    com.google.android.gallery3d.permission.GALLERY_PROVIDER or 
    com.google.android.gallery3d.permission.GALLERY_PROVIDER 

我试图

<uses-permission android:name="com.google.android.gallery3d.permission.GALLERY_PROVIDER"/> 

添加到清单文件,但它并没有帮助。

我认为我的问题类似于this one,但没有给出解决方案,只有解决方法。是否可以请求访问存储的URI的权限?

+2

内容-URI是最有可能的时间限制,只有在ACTION_PICK方面所作的工作。您需要将图像缓存到您的应用中,因为不能保证内容在以后可用。 – 323go 2013-03-11 03:21:34

+0

我发誓我即使戈纳遇到同样的问题,最喜欢 – JRowan 2013-03-11 03:27:37

+0

你有没有找到这个解决方案?我面临同样的问题。 – 2013-09-19 06:43:03

回答

4

尝试打开输入流这样

ContentResolver res = context.getContentResolver(); 
Uri uri = Uri.parse(intent.getData().toString()); 
res.openInputStream(uri);