Ich versuche, ein FileInputStream
-Objekt für ein Bild abzurufen, das der Benutzer aus der Bildergalerie auswählt. Dies ist die Android URI
zurückgegeben von Android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
content://media/external/images/media/3
Wenn ich versuche, aus diesem Objekt ein Java URI-Objekt zu erstellen, erhalte ich ein IllegalArgumentException
mit der Ausnahmebeschreibung Erwartetes Dateischema in URI: content: // media/external/images/media/ wohingegen der Android URI das Schema als content anzeigt
pdate: Nie eine Lösung für die ursprüngliche Frage gefunden. Wenn Sie jedoch den Bytestrom eines Bildes in der Bildergalerie sehen möchten, wird dieser Code dies tun.
Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
Sie können die toString
- Methode von Android Uri
in Kombination mit dem String
- basierten Konstruktor von Java URI
.
Android.net.Uri auri = new Android.net.Uri(what ever);
Java.net.URI juri = new Java.net.URI(auri.toString());
So öffnen Sie InputStream über die Inhalts-URI:
InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);
Das ist alles!
Ich habe für die Antwort von jgilrincon gestimmt. Ich kann aufgrund der schlechten Reputation keinen Kommentar abgeben und hier einige zusätzliche Informationen - Sie können FileHelper.Java aus dem Apache Cordova-Projekt verwenden. Es enthält Funktionen, die Sie für die Dateibearbeitung aus Uri-Strings benötigen, unter Berücksichtigung des Mediastores auch (und App-Assets-Ordner)
Insbesondere bietet diese Methode InputStream von Uri:
public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)
Es gibt eine Lösung für Ihre ursprüngliche Frage (Uri in URI konvertieren):
Holen Sie sich den realen Dateipfad (schauen Sie sich diesen Code an: Holen Sie sich den Dateinamen und den Pfad von der URI aus dem Mediastore )
Holen Sie sich die URI mit dem realen Pfad und dem Konstruktor: URI (String uri)
Wenn Sie weitere Informationen benötigen, schauen Sie hier:
Wie lösche ich ein Video, das mit einem Intent mit ACTION_VIDEO_CAPTURE aufgenommen wurde?
Da das Konstruieren von Strings nicht funktioniert, haben Sie versucht, es selbst zu 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());
Möglicherweise möchten Sie auch überprüfen, ob Ihre gültigen Daten aus der Android URI-Klasse stammen. In den in meiner anderen Antwort aufgeführten Dokumenten wird erläutert, wie praktisch keine Fehlerüberprüfung durchgeführt wird fehler die klasse spuckt sowieso nur müll aus und wirft keine ausnahmen. was sehr wahrscheinlich der grund sein könnte, warum die Java klasse, die die validierung durchführt, eine ausnahme auslöst.