Was ich versuche zu tun, scheint sehr einfach zu sein, aber nach ein paar Tagen der Suche kann ich es nicht ganz herausfinden.
Ich habe eine Anwendung, mit der der Benutzer mehrere (bis zu 5) Bilder auswählen kann. Ich benutze eine ImageView
. Wenn der Benutzer auf klickt ImageView
, möchte ich ihm die Option dazu erlauben
- Wählen Sie das Bild aus der Galerie oder
- Verwenden Sie die Kamera, um ein Bild aufzunehmen.
Ich habe mit der ACTION_GET_CONTENT
Absicht angefangen , und das funktioniert gut, um zur Galerie zu gelangen. Also habe ich versucht, die ACTION_PICK_ACTIVITY
Absicht zu nutzen, dem Benutzer die Auswahl einer Kamera oder Galerie zu ermöglichen:
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*");
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);
Aber anscheinend kann ich nur einen hinzufügen EXTRA_INTENT
. Das Menü wird wie erwartet angezeigt, aber die einzigen Optionen sind Galerie und Dateien (keine Kamera).
Gibt es einen besseren / einfacheren Weg, den ich vermisse? Vielen Dank für jede Hilfe.
Antworten:
Sie müssen einen eigenen Auswahldialog erstellen, in dem beide Ergebnisse der Absichtsauflösung zusammengeführt werden.
Dazu müssen Sie den PackageManager mit PackageManager.queryIntentActivities () für beide ursprünglichen Absichten abfragen und die endgültige Liste möglicher Absichten mit einer neuen Absicht für jede abgerufene Aktivität wie folgt erstellen:
(Ich habe dies direkt hier geschrieben, damit es möglicherweise nicht kompiliert wird.)
Weitere Informationen zum Erstellen eines benutzerdefinierten Dialogfelds aus einer Liste finden Sie unter https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog
quelle
So starten Sie eine einzelne Absicht, um Bilder aus der Galerie oder der Kamera oder einer Anwendung auszuwählen, die zum Durchsuchen des Dateisystems registriert ist.
Anstatt einen Dialog mit einer Liste von Intent-Optionen zu erstellen, ist es viel besser, Intent.createChooser zu verwenden, um Zugriff auf die grafischen Symbole und Kurznamen der verschiedenen Browser-Apps für "Kamera", "Galerie" und sogar für Dateisysteme von Drittanbietern zu erhalten wie 'Astro' usw.
Hier wird beschrieben, wie Sie die Standard-Auswahlabsicht verwenden und zusätzliche Absichten hinzufügen.
quelle
final String fname = Utils.getUniqueImageFilename();
funktioniert nicht ... es heißtUtils cannot be resolved
:(Utils.getUniqueImageFilename()
ist meine eigene Methode zum Generieren eines eindeutigen Dateinamens. Es gibt viele Möglichkeiten, dies zu tun. Eine der einfachsten ist es, so etwas zu verwenden"img_"+ System.currentTimeMillis() + ".jpg"
. Ein anderer istFile.createTempFile()
.if (data == null || data.getData() == null)
.Ich fand diese . Verwenden von:
Für eine der Absichten zeigt der Benutzer die Option, "Dokumente" in Android 4 auszuwählen, was ich sehr verwirrend fand. Wenn Sie dies stattdessen verwenden, wird die Option "Galerie" angezeigt:
quelle
Ich hatte auch dieses Problem und habe einen AlertDialog erstellt und die setItems () -Methode zusammen mit dem DialogInterface-Listener verwendet:
quelle
Ich habe einige Lösungen zusammengeführt, um ein Bild aus der Galerie oder Kamera vollständig auszuwählen. Dies sind die Funktionen von ImagePicker util (auch in einer Github-Bibliothek ):
Bildschirmfoto:
Bearbeiten : Hier ist ein Codefragment, um eine zusammengeführte Absicht für Galerie- und Kamera-Apps zusammenzuführen. Sie können den vollständigen Code bei ImagePicker util sehen (auch in einer Github-Bibliothek ):
quelle
getRotationFromCamera
(ImagePicker.java
) eingegeben wird und welchen Wert sie zurückgibt ? In welchem Telefon testen Sie?boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
Dieser Code hilft Ihnen dabei, dass es zwei Schaltflächen gibt, eine für die Kamera und eine für die Galerie, und das Bild wird in ImageView angezeigt
https://github.com/siddhpuraamitr/Choose-Image-From-Gallery-Or-Camera
quelle
Für diejenigen, die beim Versuch, die Bildauswahl zu verwenden, Fehler auf 4.4 nach oben erhalten, kann der folgende Code verwendet werden.
Anstatt einen Dialog mit einer Liste von Intent-Optionen zu erstellen, ist es viel besser, Intent.createChooser zu verwenden, um Zugriff auf die grafischen Symbole und Kurznamen der verschiedenen Browser-Apps für "Kamera", "Galerie" und sogar für Dateisysteme von Drittanbietern zu erhalten wie 'Astro' usw.
Hier wird beschrieben, wie Sie die Standard-Auswahlabsicht verwenden und zusätzliche Absichten hinzufügen.
quelle
Dies sollte sich um Tinas Null outputFileUri-Problem kümmern:
Hinweis: Ich verwende diesen Code in android.support.v4.app.Fragment. Ihre überschriebenen Methoden können sich je nach verwendeter Fragment- / Aktivitätsversion ändern.
quelle
Sie können einen Optionsdialog erstellen
Kamera öffnen:
Galerie öffnen:
Um ein Auswahlergebnis zu erhalten
Methode zum Speichern des aufgenommenen Bildes
quelle
Behebung eines zu großen Image-Problems und Vermeidung von Speichermangel.
quelle
Hinzufügen meiner Lösung - es wird ein Rückruf zurückgegeben, egal ob von der Kamera oder von der Kombüse neben der Absicht:
quelle
Sie können dies versuchen:
quelle
Dies ist einfach, indem Sie AlertDialog und Intent.ACTION_PICK verwenden
quelle
Aufbauend auf Davids Antwort, meine zwei Pennys
onActivityResult()
. Es kümmert sich um die in 5.1.1 eingeführten Änderungen und erkennt, ob der Benutzer ein einzelnes oder mehrere Bilder aus der Bibliothek ausgewählt hat.quelle
Versuchen Sie es auf diese Weise
Erstellen Sie dann eine Aktivitätsergebnismethode und führen Sie so etwas aus
Siehe dieses http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
quelle
Ich hatte hart an der Bildauswahl für Kamera oder Galerie gearbeitet und eine Util-Klasse für diese Arbeit erstellt. Mit der Verwendung dieser Klasse "Die Auswahl einer Bildkamera oder Galerie ist zu einfach" dauerte Ihre Entwicklung nur 5-10 Minuten.
ImagePickerUtils: - http://www.codesend.com/view/f8f7c637716bf1c693d1490635ed49b3/
BitmapUtils: - http://www.codesend.com/view/81c1c2a3f39f1f7e627f01f67be282cf/
ConvertUriToFilePath: - http://www.codesend.com/view/f4668a29860235dd1b66eb419c5a58b5/
MediaUtils: - https://codeshare.io/5vKEMl
Wir müssen diese Berechtigung im Menifest hinzufügen:
Diese Klassenfunktion (checkAndRequestPermissions) überprüft die Berechtigung automatisch in Android-Marshmallow und Android-Nougat.
Ich hoffe, es hilft Ihnen. Wenn jemand einen Vorschlag zur Verbesserung dieser Klasse hat, fügen Sie bitte Ihre Bewertung in den Kommentaren hinzu.
quelle
Laut David Manpearl antworten Sie auf
https://stackoverflow.com/a/12347567/7226732
wir müssen nur onActivityResult () wie ändern
und stellen Sie die Aufnahme ein oder wählen Sie Bilder in der Bildansicht aus.
quelle