12

Я использую ACTION_PICK, чтобы выбрать изображение из галереи. Некоторые альбомы, такие как «Сообщения», «Фотографии профиля» и т. Д. Отмечены значком Picasa. Для изображений из таких альбомов, которые я получаю URI похож на это:Как загрузить изображение Picasa из URI?

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

я могу загрузить изображение из этого URI, используя ContentResolver и BitmapFactory без проблем:

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

+0

Я клянусь им, что эта проблема, любимая снова – JRowan

+0

Вы нашли решение для этого? Я столкнулся с той же проблемой. –

ответ

4

Попробуйте открыть входной поток, как этот

ContentResolver res = context.getContentResolver(); 
Uri uri = Uri.parse(intent.getData().toString()); 
res.openInputStream(uri); 
Смежные вопросы