Im Grunde versuche ich, das Gallery
in Android zu öffnen und den Benutzer auswählen zu lassen multiple images
. Jetzt wurde diese Frage häufig gestellt, aber ich bin mit den Antworten nicht zufrieden. Hauptsächlich, weil ich in meiner IDE etwas Interessantes in de docs gefunden habe (darauf komme ich später zurück) und daher keinen benutzerdefinierten Adapter verwenden möchte, sondern nur den Vanille-Adapter.
Jetzt lautet mein Code für die Auswahl eines Bildes:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);
Jetzt werden Ihnen die Leute auf SO und anderen Websites sagen, dass Sie zwei Möglichkeiten haben:
1) Verwenden Sie nicht , ACTION_GET_CONTENT
sondern ACTION_SEND_MULTIPLE
stattdessen.
Dieser funktioniert nicht. Dieser ist gemäß den Dokumenten für sending
Dateien und nicht retrieving
und genau das ist es, was es tut. Bei Verwendung von ACTION_SEND_MULTIPLE wurde auf meinem Gerät ein Fenster geöffnet, in dem ich eine Anwendung auswählen muss, an die meine Daten gesendet werden sollen. Das ist nicht das, was ich will, also frage ich mich, wie die Leute dies mit dieser Lösung erreicht haben. Vermisse ich etwas?
2) Implementieren Sie eine custom Gallery
. Dies ist meine letzte Option, die ich in Betracht ziehen werde, weil ich imho nicht das bin, wonach ich suche, weil ich sie selbst stylen muss UND warum zum Teufel können Sie einfach nicht mehrere Bilder in der Vanille-Galerie auswählen?
Es muss eine Option dafür geben. Nun ist das Interessante, was ich gefunden habe, Folgendes:
Ich habe dies in der Beschreibung der Dokumentation von gefunden ACTION_GET_CONTENT
.
Wenn der Anrufer mehrere zurückgegebene Elemente verarbeiten kann (der Benutzer führt eine Mehrfachauswahl durch), kann er EXTRA_ALLOW_MULTIPLE angeben, um dies anzuzeigen.
Das ist ziemlich interessant. Hier beziehen sie sich auf den Anwendungsfall, in dem ein Benutzer mehrere Elemente auswählen kann?
Später heißt es in den Dokumenten:
Sie können EXTRA_ALLOW_MULTIPLE verwenden, damit der Benutzer mehrere Elemente auswählen kann.
Das ist also ziemlich offensichtlich, oder? Das ist das, was ich benötige. Aber meine folgende Frage ist: Wo kann ich das hinstellen EXTRA_ALLOW_MULTIPLE
? Das Traurige ist, dass ich dieses Nein nirgendwo im Entwickler.android-Handbuch finden kann und dass dies auch nicht als Konstante in der INTENT-Klasse definiert ist.
Kann mir jemand dabei helfen EXTRA_ALLOW_MULTIPLE
?
quelle
EXTRA_ALLOW_MULTIPLE
Sie mehrere Elemente auswählen. Rufen Sie die URIs ab, indem Sie diegetClipData()
zurückgegebene Absicht in aufrufenonActivityResult
. Das einzige Problem ist, dass das Galerie-Widget keine Mehrfachauswahl zulässt. In diesem Fall wird durch Klicken auf ein Bild die Auswahl beendet und Sie können die URI (des einzelnen Elements) abrufen, indem Sie diegetData
zurückgegebene Absicht aufrufenAntworten:
Die Option EXTRA_ALLOW_MULTIPLE wird für die Absicht über die Methode Intent.putExtra () festgelegt:
Ihr Code oben sollte folgendermaßen aussehen:
Hinweis: Die
EXTRA_ALLOW_MULTIPLE
Option ist nur in Android API 18 und höher verfügbar.quelle
Intent.getClipData
. Es hat das Array von ClipData Item.Definieren Sie diese Variablen in der Klasse:
Angenommen, onClick auf eine Schaltfläche sollte die Galerie öffnen, um Bilder auszuwählen
Dann sollten Sie die onActivityResult-Methode überschreiben
HINWEIS: Die Galerie bietet Ihnen nicht die Möglichkeit, mehrere Bilder auszuwählen. Daher öffnen wir hier alle Bilder, in denen Sie mehrere Bilder auswählen können. und vergessen Sie nicht, die Berechtigungen zu Ihrem Manifest hinzuzufügen
SEHR WICHTIG: getData (); Um ein einzelnes Bild zu erhalten, habe ich es hier in imageEncoded String gespeichert. Wenn der Benutzer mehrere Bilder auswählt, sollten diese in der Liste gespeichert werden
Sie müssen also überprüfen, welche Null ist, um die andere zu verwenden
Ich wünsche Ihnen einen schönen Versuch und an andere
quelle
Viele dieser Antworten haben Ähnlichkeiten, aber allen fehlt der wichtigste Teil, der darin enthalten ist
onActivityResult
. Überprüfen Sie vor dem Überprüfen , ob erdata.getClipData
null istdata.getData
Der Code zum Aufrufen der Dateiauswahl:
Der Code, mit dem alle Bilder ausgewählt werden:
Beachten Sie, dass in der Android-Auswahl auf einigen Geräten Fotos und Galerien verfügbar sind. Mit Fotos können mehrere Bilder ausgewählt werden. Galerie erlaubt jeweils nur einen.
quelle
getData()
ist diese manchmal NICHT null, sondern hat nur eine Uri. Wenn Sie behandeln möchten, wenn ein Benutzer mehrere Dateien auswählt , überprüfen Sie diesgetClipData()
zuvor.getData()
Wenn die Clipdaten nicht null sind, hat der Benutzer möglicherweise mehrere Bilder ausgewählt. Die Behandlung von getClipData vor getData, aber die Behandlung beider Fälle ist wichtig, um verschiedene Geräte zu unterstützen und gleichzeitig mehrere Uris zuzulassen.Ich hoffe, diese Antwort ist nicht zu spät. Da das Galerie-Widget standardmäßig keine Mehrfachauswahl unterstützt, können Sie jedoch die Rasteransicht anpassen, die Ihre Mehrfachauswahlabsicht akzeptiert hat. Die andere Option besteht darin, die Galerieansicht zu erweitern und Ihren eigenen Code hinzuzufügen, um eine Mehrfachauswahl zu ermöglichen.
Dies ist die einfache Bibliothek, die dies tun kann: https://github.com/luminousman/MultipleImagePick
Update :
Aus dem Kommentar von @ ilsy geht hervor, dass CustomGalleryActivity in dieser Bibliothek
manageQuery
veraltet ist. Daher sollte es in diese Antwort geändert werdengetContentResolver().query()
und ihrcursor.close()
gefallenquelle
getContentResolver().query()
im UI-Thread verwenden. Lesen Sie mehr über Loader und Support Library..cacheOnDisc()
auch veraltet, also ändern Sie es.cacheOnDisc(true)
mit boolean paramInstanz initialisieren:
In onActivityResult müssen Sie diesen If-else 2-Block schreiben. Eine für ein einzelnes Bild und eine für mehrere Bilder.
Wichtigster Teil: Holen Sie sich den Bildpfad von uri :
Hoffe das kann dir helfen.
quelle
Ich habe null von der
Cursor
. Dann fand eine Lösung, um dasUri
inBitmap
das umzuwandeln, das perfekt funktioniert.Hier ist die Lösung, die für mich funktioniert:
quelle
Hallo unten Code funktioniert gut.
Sie möchten mehr Klarstellungen. http://mylearnandroid.blogspot.in/2014/02/multiple-choose-custom-gallery.html
quelle
Ich hatte auch das gleiche Problem. Ich wollte auch, dass Benutzer problemlos Fotos aufnehmen können, während sie Fotos aus der Galerie auswählen. Ich konnte keinen nativen Weg finden, dies zu tun, deshalb habe ich beschlossen, ein OpenSource-Projekt zu erstellen. Es ähnelt MultipleImagePick, ist aber nur eine bessere Möglichkeit, es zu implementieren.
https://github.com/giljulio/android-multiple-image-picker
quelle
Probieren Sie diesen IntentChooser aus . Fügen Sie einfach einige Codezeilen hinzu, den Rest habe ich für Sie erledigt.
PS: Wie in den obigen Antworten erwähnt, ist EXTRA_ALLOW_MULTIPLE nur für API> = 18 verfügbar. Einige Galerie-Apps stellen diese Funktion nicht zur Verfügung (Google Fotos und Dokumente (
com.android.documentsui
)).quelle
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);