J'essaie d'obtenir un objet FileInputStream
sur une image que l'utilisateur sélectionne dans la galerie d'images. Il s'agit du Android URI
renvoyé par Android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
content://media/external/images/media/3
Lorsque j'essaye de construire un objet Java URI à partir de cet objet, j'obtiens un IllegalArgumentException
avec la description de l'exception Schéma de fichier attendu dans URI: content: // media/external/images/media/ alors que l'URI Android montre le schéma sous la forme conten
Mise à jour: Jamais trouvé de solution à la question d'origine. 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());
Vous pouvez utiliser la méthode toString
du Android Uri
en combinaison avec le constructeur basé sur String
du Java URI
.
Android.net.Uri auri = new Android.net.Uri(what ever);
Java.net.URI juri = new Java.net.URI(auri.toString());
Trouvé la bonne façon d'ouvrir InputStream à partir de l'URI de contenu:
InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);
C'est tout!
J'ai voté pour la réponse de jgilrincon. Je ne peux pas commenter en raison de la faible réputation, et voici quelques informations supplémentaires - vous pouvez utiliser FileHelper.Java du projet Apache Cordova, il a des fonctions dont vous avez besoin pour la gestion des fichiers à partir des chaînes Uri, compte tenu du médiastore ainsi (et le dossier des ressources de l'application)
En particulier, cette méthode fournit InputStream d'Uri:
public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)
Il existe une solution à votre question d'origine (convertir Uri en URI):
Obtenez le vrai chemin de fichier (regardez ce code: Obtenez le nom de fichier et le chemin de l'URI de mediastore )
Obtenez l'URI en utilisant le chemin réel et le constructeur: URI (String uri)
Si vous avez besoin de plus de détails, regardez ici:
Comment supprimer une vidéo enregistrée en utilisant une intention avec ACTION_VIDEO_CAPTURE?
Puisque la construction de chaînes ne fonctionne pas, avez-vous essayé de la construire vous-même?
Android.net.URI auri = new Android.net.URI(what ever);
Java.net.URI juri = new Java.net.URI(auri.getSchema(),
auri.getSchemaSpecificPart(),
auri.getFragment());
Vous pouvez également vérifier que vos données valides sont extraites de la classe Android URI. Les documents répertoriés dans mon autre réponse expliquent comment il ne fait pratiquement aucune vérification d'erreur. erreur, la classe crache de toute façon des ordures et ne lève aucune exception. Ce qui pourrait très probablement être la raison pour laquelle la classe Java qui effectue la validation lève une exception.