12

Ich verwende ACTION_PICK Absicht, ein Bild aus der Galerie auszuwählen. Einige Alben wie "Posts", "Profilfotos" usw. sind mit dem Picasa-Symbol gekennzeichnet. Für Bilder aus solchen Alben bekomme ich eine URI dieses ähnlich:Wie lade ich ein Picasa-Bild von URI?

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

ich ein Bild von diesem URI laden ContentResolver und BitmapFactory ohne Probleme mit:

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

Aber ich bin nicht in der Lage zu laden ein Bild, das den gespeicherten URI verwendet, nachdem ich die Anwendung neu gestartet habe. Ich erhalte diese Einstellung, wenn decodeStream() genannt wird:

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 

I

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

auf die Manifest-Datei hinzufügen versucht, aber es hat nicht geholfen.

Ich denke, mein Problem ist ähnlich wie this one, aber keine Lösung gibt es dort, nur ein Workaround. Ist es möglich, eine Berechtigung zum Zugriff auf einen gespeicherten URI anzufordern?

+2

Die Content-URIs Öffnung am ehesten zeitlich begrenzte und nur Arbeiten im Rahmen des ACTION_PICK. Sie müssen das Bild in Ihrer App zwischenspeichern, da es keine Garantie gibt, dass der Inhalt später verfügbar ist. – 323go

+0

ich schwöre im gona in das gleiche Problem, Lieblings wieder – JRowan

+0

Haben Sie eine Lösung dafür gefunden? Ich stehe vor dem gleichen Problem. –

Antwort

4

Versuchen Eingangsstrom wie dies

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