Android- come posso convertire oggetto android.net.Uri per oggetto java.net.URI?
-
05-09-2019 - |
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());
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());
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):
-
ottenere il percorso vero e proprio del file (guarda questo codice: Ottenere il nome del file e il percorso da URI da MediaStore )
-
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.