Wie wähle ich ein Bild aus der Galerie (SD-Karte) für meine App?
Diese Frage wurde ursprünglich gebeten, für Android 1.6.
Arbeite ich auf Fotos Optionen in meiner app.
Ich habe einen button und eine Bildansicht in meine Tätigkeit. Wenn ich auf die Schaltfläche umleiten würde, um die Galerie, und ich würde in der Lage sein, um ein Bild auszuwählen. Das ausgewählte Bild erscheint in meinem Bildansicht.
InformationsquelleAutor der Frage Praveen | 2010-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aktualisierte Antwort, fast 5 Jahre später:
Den code in der original-Antwort nicht mehr zuverlässig funktioniert, da die Bilder aus verschiedenen Quellen manchmal zurück mit einem anderen Inhalt URI, d.h.
content://
eher alsfile://
. Eine bessere Lösung ist, verwenden Sie einfachcontext.getContentResolver().openInputStream(intent.getData())
wie die Rückgabe eines InputStream, dass Sie behandeln können, wie Sie möchten.Beispielsweise
BitmapFactory.decodeStream()
arbeitet perfekt in dieser situation, Sie können auch verwenden Sie dann die Optionen und inSampleSize Feld zur Neuberechnung von großen Bildern und vermeiden Sie Probleme mit dem Speicher.Aber Dinge wie Google Drive zurück URIs für Bilder, die eigentlich nicht heruntergeladen wurden, noch. Daher benötigen Sie für die getContentResolver () - code auf einem hintergrund-thread.
Original Antwort:
Den anderen Antworten erklärt, so senden Sie die Absicht, aber Sie hat nicht gut erklären wie mit der Antwort. Hier einige Beispiel-code, wie das geht:
Danach, Sie habe das ausgewählte Bild gespeichert "yourSelectedImage" zu tun, was Sie will. Dieser code funktioniert, indem man den Ort des Bildes in den ContentResolver Datenbank, aber das allein ist noch nicht genug. Jedes Bild hat etwa 18 Spalten mit Informationen, die von Ihrer filepath, 'Datum Letzte änderung', um die GPS-Koordinaten, wo das Foto aufgenommen wurde, obwohl viele der Felder sind nicht tatsächlich verwendet werden.
Zeit zu sparen, da Sie nicht wirklich brauchen, die anderen Felder, cursor-Suche mit einem filter. Der filter funktioniert, indem Sie den Namen der Spalte, die Sie wollen, MediaStore.Bilder.Media.DATEN, die den Pfad, und dann geben, string [], um den cursor Abfrage. Die cursor-Abfrage mit dem Pfad, aber Sie wissen nicht, welche Spalte es, bis Sie die
columnIndex
code. Das wird einfach die Nummer der Spalte, basierend auf seinen Namen, das gleiche wie bei der Filterung. Sobald Sie haben, sind Sie endlich in der Lage, zu decodieren und das Bild in eine bitmap mit der letzten Zeile des Codes, die ich gab.InformationsquelleAutor der Antwort Steve Haley
Beginnen Absicht
Prozess Ergebnis
Alternativ können Sie auch eine Neuberechnung Ihres Bildes zu vermeiden, OutOfMemory-Fehler.
InformationsquelleAutor der Antwort siamii
Haben Sie, um die Galerie zu starten Vorsatz für ein Ergebnis.
Dann in
onActivityForResult
rufenintent.getData()
um die Uri des Bildes. Dann brauchen Sie, um das Bild aus dem ContentProvider.InformationsquelleAutor der Antwort Robby Pond
Hier ist ein getesteter code für Bild und video.Es wird Arbeit für alle APIs, die weniger als 19 und mehr als 19 als gut.
Bild:
Video:
.
InformationsquelleAutor der Antwort Muhammad Umair Shafique
Tun dies, um starten Sie die Galerie und lassen die Benutzer wählen Sie ein Bild:
Dann in Ihre
onActivityResult()
verwenden Sie den URI des Bildes, der zurückgegeben wird, um das Bild auf Ihrem Bildansicht.InformationsquelleAutor der Antwort Mark B
InformationsquelleAutor der Antwort Sheetal More
InformationsquelleAutor der Antwort Muhammad Usman Ghani
Einige Gründe, die Antwort auf alle Fragen in diesem thread, in
onActivityResult()
versuchen zur Nachbearbeitung der empfangenenUri
wie immer den echten Pfad des Bildes und verwenden Sie dannBitmapFactory.decodeFile(path)
um dieBitmap
.Ist dieser Schritt nicht erforderlich. Die
ImageView
Klasse hat eine Methode namenssetImageURI(uri)
. Übergeben Sie Ihre uri zu es und Sie getan werden sollte.Für ein komplett lauffähiges Beispiel, könnten Sie werfen Sie einen Blick hier: http://androidbitmaps.blogspot.com/2015/04/loading-images-in-android-part-iii-pick.html
PS:
Immer die
Bitmap
in eine separate variable würde Sinn machen in Fällen, wo das Bild geladen werden ist zu groß um in den Speicher passt, und ein scale-down-operation ist notwendig, um zu verhindern, dassOurOfMemoryError
, wie gezeigt, in der @siamii Antwort.InformationsquelleAutor der Antwort Andy Res
call chooseImage Methode wie-
InformationsquelleAutor der Antwort Akshay Paliwal
InformationsquelleAutor der Antwort ASHISH KUMAR Tiwary
Nachdem ich alle Antworten. Ich schlage vor, mitAndroid Logger .
Können Sie stellen Sie einfach eine boolean, die app ist loggable oder nicht. Aus der Dokumentation
Gibt es viele Funktionen dieser Bibliothek können Sie finden Sie in Dokumentation.
Bonus : Protokolle dieser Bibliothek sieht wie folgt aus. Ist das nicht cool!
InformationsquelleAutor der Antwort Khemraj