65 votes

Android - Comment puis-je convertir un objet android.net.Uri en objet java.net.URI?

Merci pour toute aide.

Je suis en train d'essayer d'obtenir un FileInputStream objet sur une image que l'utilisateur sélectionne à partir de la galerie de photos. C'est de l'android URI retourné par android.fournisseur de.MediaStore.Les Images.Médias.INTERNAL_CONTENT_URI

contenu://media/externe/images/media/3

Quand j'ai essayé de construire un java URI de l'objet à partir de cet objet, j'obtiens une IllegalArgumentException avec la description de l'exception Prévue fichier de schéma d'URI: contenu://media/externe/images/media/3 alors que l'android URI montre le schéma de contenu

Jamais trouvé une solution pour la question d'origine. Mais si vous voulez le flux d'octets d'une image dans la galerie d'images, ce bout de code va le faire.

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

59voto

Brian Gianforcaro Points 11985

Vous pouvez utiliser la méthode toString de l'URI android en combinaison avec le constructeur String de l'URI java.

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

URI Android | URI Java

43voto

Fedor Points 29890

Trouver le bon moyen d'ouvrir InputStream à partir de l'URI du contenu:

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

C'est tout!

3voto

jgilrincon Points 70

Il existe une solution à votre question de départ (convertir Uri URI):

  1. Obtenez le vrai chemin d'accès au fichier (regardez ce code: android obtenir le nom de fichier et le chemin d'accès à partir de l'uri de la mediastore)

  2. Obtenez de 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 à l'aide d'une Intention avec ACTION_VIDEO_CAPTURE

2voto

Mixaz Points 104

J'ai voté pour jgilrincon de réponse. Je ne peux pas faire de commentaires en raison de la faible réputation, et voici quelques informations supplémentaires - vous pouvez utiliser FileHelper.java à partir de Apache Cordova projet, il a des fonctions que vous avez besoin pour la gestion des fichiers à partir des chaînes Uri, compte tenu de mediastore ainsi (et l'app actifs dossier)

En particulier, cette méthode fournit des InputStream de Uri:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)

0voto

Brian Gianforcaro Points 11985

Depuis la Chaîne de la construction ne fonctionne pas avez-vous essayé tout simplement de la construction de votre 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());

Vous pouvez également double vérifier que votre obtenir des données valides de Android classe URI. Les documents énumérés dans mon autre réponse discuter de la façon dont il fait à peu près pas de contrôle d'erreur. Si il n'y a en effet une erreur de la classe, juste crache des ordures de toute façon et ne jette pas des exceptions. Ce qui pourrait très probablement être la raison pour laquelle la classe java qui fait la validation est en train de lancer une exception.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X