12

Tôi đang sử dụng mục đích ACTION_PICK để chọn hình ảnh từ thư viện. Một số album như "Bài đăng", "Ảnh tiểu sử", v.v. được đánh dấu bằng biểu tượng Picasa. Đối với hình ảnh từ các album như vậy tôi có được một URI tương tự như sau:Cách tải hình ảnh Picasa từ URI?

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

tôi có thể tải một hình ảnh từ URI này sử dụng ContentResolverBitmapFactory với không có vấn đề:

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

Nhưng tôi không thể tải một hình ảnh sử dụng URI được lưu trữ sau khi tôi khởi động lại ứng dụng. Tôi nhận được điều này khi decodeStream() được gọi là:

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 

Tôi cố gắng thêm

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

đến file manifest nhưng nó đã không giúp đỡ.

Tôi nghĩ rằng vấn đề của tôi tương tự như this one, nhưng không có giải pháp nào được cung cấp ở đó, chỉ có giải pháp thay thế. Có thể yêu cầu quyền truy cập URI được lưu trữ không?

+2

Nội dung-URI có nhiều khả năng giới hạn thời gian, và chỉ hoạt động trong bối cảnh của ACTION_PICK. Bạn sẽ cần lưu vào bộ nhớ cache hình ảnh trong ứng dụng của mình vì không có gì đảm bảo rằng nội dung thậm chí có sẵn sau này. – 323go

+0

Tôi thề im gona chạy vào cùng một vấn đề, yêu thích một lần nữa – JRowan

+0

Bạn đã tìm thấy một giải pháp cho điều này? Tôi đang đối mặt với vấn đề tương tự. –

Trả lời

4

Thử mở input stream như thế này

ContentResolver res = context.getContentResolver(); 
Uri uri = Uri.parse(intent.getData().toString()); 
res.openInputStream(uri); 
Các vấn đề liên quan