Je connais le chemin absolu d'une image (disons, par exemple, /sdcard/cats.jpg). Existe-t-il un moyen d'obtenir l'URI du contenu de ce fichier?
En fait dans mon code, je télécharge une image et l'enregistre à un endroit particulier. Afin de définir l'image dans une instance d'ImageView, actuellement j'ouvre le fichier en utilisant le chemin, récupère les octets et crée un bitmap, puis définit le bitmap dans l'instance d'ImageView. C'est un processus très lent, mais si je pouvais obtenir le contenu uri, je pourrais très facilement utiliser la méthode imageView.setImageUri(uri)
Réponses:
Essayez avec:
Ou avec:
la source
Uri.fromFile
ne fonctionnera pas sur android 26+, vous devez utiliser le fournisseur de fichiersMETTRE À JOUR
J'avais la même question pour mon activité d'exploration de fichiers. Vous devez savoir que le contenturi pour le fichier ne prend en charge que les données de médiastore comme l'image, l'audio et la vidéo. Je vous donne le code pour obtenir le contenu de l'image uri en sélectionnant une image depuis sdcard. Essayez ce code, peut-être que cela fonctionnera pour vous ...
la source
MediaStore.Images.Media
àMediaStore.Video.Media
, mais toujours pas de chance.// Ce code fonctionne pour les images sur 2.2, je ne sais pas si d'autres types de médias
la source
La solution acceptée est probablement la meilleure solution pour vos besoins, mais pour répondre à la question dans la ligne d'objet:
Dans mon application, je dois obtenir le chemin des URI et obtenir l'URI des chemins. L'ancien:
Ce dernier (ce que je fais pour les vidéos, mais peut également être utilisé pour l'audio ou les fichiers ou d'autres types de contenu stocké en substituant MediaStore.Audio (etc.) à MediaStore.Video):
Fondamentalement, la
DATA
colonneMediaStore
(ou la sous-section de celle-ci que vous interrogez) stocke le chemin du fichier, vous utilisez donc ces informations pour le rechercher.la source
OpenableColumns.DISPLAY_NAME & OpenableColumns.SIZE
si l'application d'envoi suit même les "règles". J'ai trouvé que certaines applications majeures ne renvoient que ces deux champs et pas toujours le_data
champ. Dans le cas où vous n'avez pas le champ de données qui contient normalement un chemin direct vers le contenu, vous devez d'abord lire le contenu et l'écrire dans un fichier ou en mémoire, puis vous avez votre propre chemin.Vous pouvez utiliser ces deux façons en fonction de l'utilisation
Uri uri = Uri.parse("String file location");
ou
Uri uri = Uri.fromFile(new File("string file location"));
J'ai essayé les deux façons et les deux œuvres.
la source
Le moyen le plus simple et le plus robuste pour créer
content://
de l' URI de contenu à partir d'un fichier est d'utiliser FileProvider . L'URI fourni par FileProvider peut également être utilisé pour fournir également l'URI pour le partage de fichiers avec d'autres applications. Pour obtenir File Uri à partir d'un chemin absolu,File
vous pouvez utiliser DocumentFile.fromFile (nouveau fichier (chemin, nom)), il est ajouté dans Api 22 et renvoie null pour les versions ci-dessous.la source
Il est tard, mais peut aider quelqu'un à l'avenir.
Pour obtenir l'URI de contenu d'un fichier, vous pouvez utiliser la méthode suivante:
FileProvider.getUriForFile(Context context, String authority, File file)
Il renvoie l'URI du contenu.
Vérifiez ceci pour savoir comment configurer un
FileProvider
la source
Obtention de l'ID de fichier sans écrire de code, juste avec les commandes CLI du shell adb:
la source
Permission Denial: Do not have permission in call getContentProviderExternal() from pid=15660, uid=10113 requires android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY
sauf si vous êtes enraciné.Est préférable d'utiliser une validation pour prendre en charge les versions antérieures à Android N, par exemple:
https://es.stackoverflow.com/questions/71443/reporte-crash-android-os-fileuriexposedexception-en-android-n
la source
Vous pouvez essayer l'extrait de code ci-dessous
la source