webentwicklung-frage-antwort-db.com.de

Android - wie kann ich ein Android.net.Uri-Objekt in ein Java.net.URI-Objekt konvertieren?

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());
57
lostInTransit

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());

Android URI | Java URI

51

So öffnen Sie InputStream über die Inhalts-URI:

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

Das ist alles!

40
Fedor

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)
2
Mixaz

Es gibt eine Lösung für Ihre ursprüngliche Frage (Uri in URI konvertieren):

  1. 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 )

  2. 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?

2
jgilrincon

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.

0