J'essaie d'obtenir un objet FileInputStream
sur une image que l'utilisateur sélectionne dans la galerie d'images. Ceci est l'androïde URI
retourné par android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
Android - comment puis-je convertir un objet android.net.Uri en objet java.net.URI?
: // media/externe/images/media/3
Lorsque je tente de construire un objet URI java de cet objet, je reçois un IllegalArgumentException avec la description d'exception système de fichier attendu URI: contenu: // médias/externes/images/médias/3 alors que l'URI android montre le schéma que contenu
n'a jamais trouvé une solution pour la question initiale. Mais si vous voulez le flux d'octets d'une image dans la galerie d'images, ce morceau de code le fera.
Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
Merci. J'ai essayé ça. Il donne une exception (java.net.URI devrait avoir un schéma valide) – lostInTransit
c'est faux et échouera si l'URI a des caractères qui ont besoin d'encodage (comme l'espace). android.net.Uri.toString() décode les caractères encodés, et java.net.URI lèvera une exception si vous essayez de le construire sur une chaîne non-encodée. la bonne solution 'huri = new java.net.URI (URLEncoder.encode (auri.toString()," UTF-8 "));' –
@Jeffrey: Uri.toString() retourne les caractères encodés sur mon Android 4.1.2 périphérique –