12

Używam intencji, aby wybrać obraz z galerii. Niektóre albumy, takie jak "Posty", "Zdjęcia profilowe" itd. Są oznaczone ikoną Picasa. W przypadku obrazów z takich albumów dostaję URI podobny do tego:Jak załadować obraz z Picasa z identyfikatora URI?

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

mogę załadować obraz z tego URI za pomocą ContentResolver i BitmapFactory bez problemu:

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

Ale jestem w stanie załadować obraz przy użyciu zapisanego identyfikatora URI po ponownym uruchomieniu aplikacji. Dostaję to kiedy decodeStream() nazywa się:

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 

Próbowałem dodać

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

do pliku manifestu, ale to nie pomogło.

Myślę, że mój problem jest podobny do this one, ale nie podano tam rozwiązania, tylko obejście problemu. Czy można poprosić o pozwolenie na dostęp do zapisanego identyfikatora URI?

+2

Content-URI są najczęściej ograniczone w czasie, a tylko praca w kontekście ACTION_PICK. Będziesz musiał buforować obraz w swojej aplikacji, ponieważ nie ma gwarancji, że zawartość będzie dostępna później. – 323go

+0

przysięgam im gona wpadać w ten sam problem, znowu ulubiony – JRowan

+0

Czy znalazłeś rozwiązanie tego problemu? Stoję w obliczu tego samego problemu. –

Odpowiedz

4

Spróbuj otworzyć strumień wejściowy jak ten

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