Ich versuche, ein Bild in der in der Galerie integrierten App aus meiner Anwendung heraus zu öffnen.
Ich habe eine URI des Bildes (das Bild befindet sich auf der SD-Karte).
Hast du irgendwelche Vorschläge?
android
image
android-intent
gallery
Michael Kessler
quelle
quelle
Antworten:
Dies ist eine Komplettlösung. Ich habe diesen Beispielcode gerade mit den Informationen aktualisiert, die in der Antwort unten von @mad angegeben sind. Überprüfen Sie auch die unten stehende Lösung von @Khobaib, in der erklärt wird, wie mit Picasa-Bildern umgegangen wird.
Aktualisieren
Ich habe gerade meine ursprüngliche Antwort überprüft und ein einfaches Android Studio-Projekt erstellt, das Sie aus Github auschecken und direkt auf Ihr System importieren können.
https://github.com/hanscappelle/SO-2169649
(Beachten Sie, dass die Auswahl mehrerer Dateien noch Arbeit erfordert.)
Einzelbildauswahl
Mit Unterstützung für Bilder von Datei-Explorern dank User Mad.
Mehrere Bilder auswählen
Da jemand diese Informationen in einem Kommentar angefordert hat und es besser ist, Informationen zu sammeln.
Legen Sie einen zusätzlichen Parameter
EXTRA_ALLOW_MULTIPLE
für die Absicht fest:Und in der Ergebnisbehandlung auf diesen Parameter prüfen:
Beachten Sie, dass dies nur von API Level 18+ unterstützt wird.
quelle
Hier ist ein Update des von hcpl veröffentlichten Feincodes. Dies funktioniert jedoch auch mit dem OI-Dateimanager, dem Astro-Dateimanager UND der Mediengalerie (getestet). Ich denke, es wird mit jedem Dateimanager funktionieren (gibt es viele andere als die genannten?). hat einige Korrekturen an dem Code vorgenommen, den er geschrieben hat.
quelle
else return null;
ingetPath(Uri uri)
zureturn uri.getPath();
und von dem ersten loszuwerdenfilemanagerstring = selectedImageUri.getPath();
überprüfen. Auf diese Weise rufen Sie nur einmal aufgetPath(Uri)
und erhalten den Pfad zurück (unabhängig davon, ob die Galerie oder ein Dateimanager verwendet wurde).Die Methoden von hcpl funktionieren perfekt vor KitKat, jedoch nicht mit der DocumentsProvider-API. Folgen Sie dazu einfach dem offiziellen Android-Tutorial für Dokumentanbieter: https://developer.android.com/guide/topics/providers/document-provider.html -> Öffnen Sie ein Dokument im Abschnitt Bitmap.
Ich habe einfach den Code von hcpl verwendet und ihn erweitert: Wenn die Datei mit dem abgerufenen Pfad zum Bild eine Ausnahme auslöst, rufe ich diese Funktion auf:
Getestet auf Nexus 5.
quelle
Basis mit dem obigen Code, ich habe den Code wie unten reflektiert, kann es besser geeignet sein:
quelle
Ich habe die Lösung von @hcpl & @mad durchgesehen. Die Lösung von hcpl unterstützt gut lokale Bilder in der Galerie und mad bietet darüber hinaus eine bessere Lösung - sie hilft auch beim Laden von OI / Astro / Dropbox-Bildern. Während ich an meiner Picasa-Bibliothek arbeite , die jetzt in die Android-Galerie integriert ist, schlagen in meiner App beide Lösungen fehl.
Ich habe ein bisschen gesucht und analysiert und bin schließlich zu einer besseren und eleganteren Lösung gekommen, die diese Einschränkung überwindet. Dank Dimitar Darazhanski für seinen Blog, der mir in diesem Fall geholfen hat, habe ich ein wenig modifiziert, um das Verständnis zu erleichtern. Hier ist meine Lösung geht -
Überprüfen Sie es und lassen Sie mich wissen, wenn es ein Problem damit gibt. Ich habe es getestet und es funktioniert in jedem Fall gut.
Hoffe das wird allen helfen.
quelle
Vorausgesetzt , dass Sie eine haben Bild nur für Bilder - Ordner in Ihrem SD-Karte Verzeichnis.
Dann können Sie entscheiden, was Sie mit dem Inhalt in Ihrer Aktivität tun möchten.
Dies war ein Beispiel, um den Pfadnamen für das Bild abzurufen. Testen Sie dies mit Ihrem Code, um sicherzustellen, dass Sie mit den zurückkommenden Ergebnissen umgehen können. Sie können den Code nach Bedarf ändern, um ihn Ihren Anforderungen anzupassen.
Mein Rat ist, zu versuchen, dass das Abrufen von Bildern ordnungsgemäß funktioniert. Ich denke, das Problem ist der Inhalt des Zugriffs auf die Bilder auf der SD-Karte. Schauen Sie sich Anzeigen von Bildern auf SD-Karte an .
Wenn Sie dies zum Laufen bringen können, wahrscheinlich anhand des Beispiels, in dem ein korrekter Anbieter angegeben ist, sollten Sie in der Lage sein, eine Problemumgehung für Ihren Code zu finden.
Halten Sie mich auf dem Laufenden, indem Sie diese Frage mit Ihrem Fortschritt aktualisieren. Viel Glück
quelle
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=file:///sdcard/images/* }
startActivityforResult
eine Aktivität anrufen und bereitstellen. Darauf bezog ich mich bei der Entscheidung, was als nächstes passieren soll, mein schlechtes.startActivityForResult(intent, 1);
und erhalte immer noch diesen Fehler ... Dieser Code befindet sich außerhalb der Aktivität, aber ich habe einen Verweis auf die Aktivität und rufe diestartActivityForResult
Methode für diesen Verweis auf - vielleicht ist dies der Grund?1
das für ein Tod ? Versuchen SieIMAGE_PICK
Intent.ACTION_PICK
stattIntent.ACTION_GET_CONTENT
. Was meinst du damitIMAGE_PICK
? Es gibt keine solche Konstante. Ich habe es auch versuchtintent.setData(Uri.fromFile(new File("/sdcard/image/")));
. Ich habe alle möglichen Kombinationen davon ausprobiert und nichts scheint zu funktionieren ...Dies ist meine Wiederholung dieses Themas, bei der alle Informationen hier sowie andere relevante Fragen zum Stapelüberlauf gesammelt werden. Es gibt Bilder von einem Anbieter zurück, während Speicherprobleme und Bildrotation behandelt werden. Es unterstützt Galerie-, Picasa- und Dateimanager wie Dropbox. Die Verwendung ist einfach: Als Eingabe erhält der Konstruktor den Inhaltsauflöser und die URL. Die Ausgabe ist die endgültige Bitmap.
Verweise:
quelle
Hier finden Sie zwei nützliche Tutorials zur Bildauswahl mit herunterladbarem Quellcode:
So erstellen Sie eine Android-Bildauswahl
Auswählen und Zuschneiden von Bildern unter Android
Die App muss jedoch irgendwann geschlossen werden. Sie können dies beheben, indem Sie das Attribut android: configChanges zur Hauptaktivität in der Manifest-Datei hinzufügen, z.
Es scheint, dass die Kamera-API die Kontrolle über die Ausrichtung verloren hat, sodass dies hilfreich ist. :) :)
quelle
Schritt 1 Code zum Öffnen der Galerie zur Auswahl von Bildern:
Schritt 2 Code zum Abrufen von Daten
onActivityResult
:quelle
READ_EXTERNAL_STORAGE
Versuchen Sie Folgendes, um Bilder und Videos anzuzeigen:
quelle
Nur für den Fall, dass es hilft; Ich mache das, um die Bitmap zu bekommen:
quelle
Die obigen Antworten sind korrekt. Ich hatte ein anderes Problem, bei dem meine Anwendung in HTC M8 abstürzte, wenn ein Bild aus der Galerie ausgewählt wurde. Ich erhalte den Nullwert für den Bildpfad. Ich habe mit der folgenden Lösung behoben und optimiert. in der onActivityResult-Methode
}}
quelle
quelle
quelle
Rufen Sie einen bestimmten Dateityp ab
In diesem Beispiel erhalten Sie eine Kopie des Bildes.
Öffnen Sie einen bestimmten Dateityp
Wenn Sie mit 4.4 oder höher arbeiten, fordern Sie an, eine Datei zu öffnen, die von einer anderen App verwaltet wird
Originalquelle
quelle
Zusätzlich zu früheren Antworten können Sie Folgendes verwenden, wenn Sie Probleme haben, den richtigen Pfad zu finden (wie AndroZip):
quelle
Hier finden Sie die Antwort für das ausgewählte Einzelbild aus der Galerie
quelle
Schnellster Weg, um Bilder von der Galerie oder Kamera zu öffnen.
Originalreferenz: Bild aus der Galerie in Android programmgesteuert abrufen
Die folgende Methode empfängt Bilder von der Galerie oder Kamera und zeigt sie in einer ImageView an. Das ausgewählte Bild wird intern gespeichert.
Code für XML
JAVA Klasse
quelle
Hier ist mein Beispiel, möglicherweise nicht genau wie Ihr Fall.
Angenommen, Sie erhalten das Base64-Format von Ihrem API-Anbieter, geben Sie ihm einen Dateinamen und eine Dateierweiterung und speichern Sie es an einem bestimmten Speicherort im Dateisystem.
Vergessen Sie nicht, zunächst einen geeigneten Dateianbieter in AndroidManifest.xml einzurichten
Dabei ist der Dateipfad eine XML-Datei in ... / res / xml / file_path.xml
Kurz gesagt, halten Sie zuerst den Dateianbieter bereit, übergeben Sie Uri an Intent, um eine bekannte und zugängliche Bildquelle zu erhalten. Andernfalls speichern Sie das Bild am gewünschten Ort und übergeben Sie den Ort (als Uri) an Intent.
quelle