Domanda

Sto cercando di ottenere un oggetto FileInputStream su un'immagine che l'utente seleziona dalla galleria di immagini. Questo è il URI Android restituito da android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI

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

Quando si tenta di costruire un oggetto URI Java da questo oggetto, ricevo un IllegalArgumentException con la descrizione fatta eccezione schema di file Prevista URI: contenuto: // media / esterno / immagini / media / 3 considerando che l'androide URI mostra lo schema come contenuti

Aggiorna : Mai trovato una soluzione per la domanda iniziale. Ma se si desidera che il flusso di byte di un'immagine nella galleria immagini, questo pezzo di codice farà.

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
È stato utile?

Soluzione

È possibile utilizzare il metodo toString del Uri Android in combinazione del costruttore basato String del URI Java.

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

Android URI | Java URI

Altri suggerimenti

Trovato il modo corretto per aprire InputStream da URI contenuti:

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

Questo è tutto!

C'è una soluzione alla tua domanda iniziale (convertire Uri a URI):

  1. ottenere il percorso vero e proprio del file (guarda questo codice: Ottenere il nome del file e il percorso da URI da MediaStore )

  2. Prendi l'URI utilizzando il percorso reale e il costruttore: URI (String uri)

Se avete bisogno di maggiori dettagli, guarda qui:

come eliminare un video registrati utilizzando un Intent con ACTION_VIDEO_CAPTURE?

Ho votato per la risposta di jgilrincon. Non posso commentare a causa della bassa reputazione, e qui va un po 'di informazioni aggiuntive - è possibile utilizzare FileHelper.java dal progetto Apache Cordova, ha funzioni di cui avete bisogno per la gestione di file dalle stringhe Uri, considerando MediaStore così (e la cartella beni app)

In particolare questo metodo fornisce InputStream da Uri:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)

Dato che il COSTRUTTRICE String non funziona Hai provato solo costruire la vostra auto?

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

Si potrebbe anche voler di verificare che il vostro ottenere dati validi fuori dalla classe URI Android. I documenti elencati nella mia altra risposta discutere di come lo fa praticamente alcun controllo degli errori. Se c'è infatti un errore della classe appena sputa fuori spazzatura in ogni caso e non genera alcuna eccezione. Quale potrebbe molto probabilmente il motivo per cui la classe Java che fa fare la convalida è un'eccezione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top