Frage

Ich versuche, ein FileInputStream Objekt auf einem Bild zu bekommen, dass der Benutzer von der Bildergalerie auswählt. Dies ist der Android-URI von android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI zurückgegeben

content://media/external/images/media/3

Wenn ich versuche, ein Java-URI-Objekt von diesem Objekt zu konstruieren, erhalte ich eine IllegalArgumentException mit Ausnahme Beschreibung Erwartetes Dateischema in URI: Inhalt: // media / extern / images / media / 3 während der android-URI zeigt das Schema als Inhalt

Aktualisieren : Nie fand eine Lösung für die ursprüngliche Frage. Aber wenn Sie den Byte-Strom eines Bildes in der Bildergalerien wollen, ist dieses Stück Code wird das tun.

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
War es hilfreich?

Lösung

Sie könnten die toString Methode des Androiden Uri in Kombination des String basierten Konstruktor des Java URI verwenden.

android.net.Uri auri = new android.net.Uri(what ever);
java.net.URI juri = new java.net.URI(auri.toString());

Android URI | Java URI

Andere Tipps

Gefunden die richtige Art und Weise Input von Inhalt URI zu öffnen:

InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);

Das ist alles!

Es gibt eine Lösung, um Ihre ursprüngliche Frage (konvertieren Uri URI):

  1. Erleben Sie den wirklichen Dateipfad (suchen Sie diesen Code: Wie ein Video löschen Verwendung eines Intent mit ACTION_VIDEO_CAPTURE aufgezeichnet?

Ich habe für jgilrincon Antwort. Ich kann nicht aufgrund der geringen Ruf kommentieren, und hier geht einige zusätzliche Informationen - Sie FileHelper.java von Apache Cordova-Projekt, hat es Funktionen, die Sie für die Datei benötigen von Strings Uri Handhabung, wenn man bedenkt Mediastore als auch (und Ordner app Assets)

Vor allem dieser Methode bietet Input von Uri:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)

Da der String Konstruieren nicht haben funktioniert versucht Sie es Ihre Selbst nur konstruieren?

android.net.URI auri = new android.net.URI(what ever);
java.net.URI juri = new java.net.URI(auri.getSchema(),
                                     auri.getSchemaSpecificPart(),
                                     auri.getFragment());

Sie können auch verdoppeln wollen überprüfen, ob Ihre gültige Daten aus Android URI Klasse zu bekommen. Die docs wie in meiner anderen Antwort aufgeführt diskutieren, wie es funktioniert so ziemlich keine Fehlerprüfung. Wenn es infact ein Fehler ist die Klasse spuckt nur Müll sowieso und keine Ausnahmen wirft. Welche sehr wahrscheinlich, könnte die Java-Klasse sein, warum die Validierung tut, ist eine Ausnahme zu werfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top