J'essaie d'ouvrir une image / image dans l'application intégrée Gallery depuis l'intérieur de mon application.
J'ai un URI de l'image (l'image est située sur la carte SD).
Avez-vous des suggestions?
android
image
android-intent
gallery
Michael Kessler
la source
la source
Réponses:
Ceci est une solution complète. Je viens de mettre à jour cet exemple de code avec les informations fournies dans la réponse ci-dessous par @mad. Consultez également la solution ci-dessous de @Khobaib expliquant comment traiter les images picasa.
Mettre à jour
Je viens de revoir ma réponse d'origine et j'ai créé un projet Android Studio simple que vous pouvez commander à partir de github et importer directement sur votre système.
https://github.com/hanscappelle/SO-2169649
(notez que la sélection de fichiers multiples nécessite encore du travail)
Sélection d'une seule image
Avec prise en charge des images des explorateurs de fichiers grâce à l'utilisateur fou.
Sélection de plusieurs images
Étant donné que quelqu'un a demandé ces informations dans un commentaire, il est préférable de recueillir des informations.
Définissez un paramètre supplémentaire
EXTRA_ALLOW_MULTIPLE
sur l'intention:Et dans la vérification de la gestion des résultats pour ce paramètre:
Notez que cela n'est pris en charge que par l'API niveau 18+.
la source
Voici une mise à jour du code fin publié par hcpl. mais cela fonctionne aussi avec le gestionnaire de fichiers OI, le gestionnaire de fichiers astro ET la galerie multimédia (testé). donc je suppose que cela fonctionnera avec tous les gestionnaires de fichiers (y en a-t-il beaucoup d'autres que ceux mentionnés?). fait quelques corrections au code qu'il a écrit.
la source
else return null;
engetPath(Uri uri)
pourreturn uri.getPath();
et se débarrasser de la premièrefilemanagerstring = selectedImageUri.getPath();
vérification. De cette façon, vous ne faites qu'un seul appel àgetPath(Uri)
et récupérez le chemin d'accès (que ce soit la galerie ou un gestionnaire de fichiers utilisé).Les méthodes de hcpl fonctionnent parfaitement avant KitKat, mais ne fonctionnent pas avec l'API DocumentsProvider. Pour cela, suivez simplement le tutoriel Android officiel pour les fournisseurs de documents: https://developer.android.com/guide/topics/providers/document-provider.html -> ouvrez un document, section Bitmap.
J'ai simplement utilisé le code de hcpl et l'ai étendu: si le fichier avec le chemin récupéré vers l'image lève une exception, j'appelle cette fonction:
Testé sur Nexus 5.
la source
base avec le code ci-dessus, j'ai reflété le code comme ci-dessous, peut-être qu'il est plus approprié:
la source
J'ai parcouru la solution de @hcpl & @mad. La solution de hcpl prend bien en charge l'image locale dans la galerie et mad a fourni une meilleure solution en plus de cela - elle aide également à charger l'image OI / Astro / Dropbox. Mais dans mon application, tout en travaillant sur bibliothèque picasa qui est maintenant intégrée dans la galerie Android, les deux solutions échouent.
J'ai cherché et analysé un peu et j'ai finalement trouvé une solution meilleure et élégante qui surmonte cette limitation. Merci à Dimitar Darazhanski pour son blog, qui m'a aidé dans ce cas, j'ai un peu modifié pour le rendre plus facile à comprendre. Voici ma solution va -
Vérifiez-le et faites-moi savoir s'il y a un problème. Je l'ai testé et cela fonctionne bien dans tous les cas.
J'espère que cela aidera tout le monde.
la source
En supposant que vous avez un dossier d' images dans votre répertoire de carte SD pour les images uniquement.
Ensuite, vous pouvez décider de ce que vous aimeriez faire avec le contenu de votre activité.
C'était un exemple pour récupérer le nom du chemin de l'image, testez-le avec votre code juste pour vous assurer que vous pouvez gérer les résultats qui reviennent. Vous pouvez modifier le code selon vos besoins pour mieux répondre à vos besoins.
Mon conseil est d'essayer de faire fonctionner correctement la récupération des images, je pense que le problème est le contenu de l'accès aux images sur la carte SD. Jetez un œil à Affichage des images sur la carte SD .
Si vous pouvez obtenir cela et le faire fonctionner, probablement par l'exemple en fournissant un fournisseur correct, vous devriez être en mesure de trouver une solution pour votre code.
Tenez-moi au courant en mettant à jour cette question avec vos progrès. Bonne chance
la source
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=file:///sdcard/images/* }
startActivityforResult
et fournir une activité. C'est à cela que je faisais référence pour décider quoi faire ensuite, ma mauvaise.startActivityForResult(intent, 1);
et j'obtiens toujours cette erreur ... Ce code est situé en dehors de l'activité, mais j'ai une référence à l'activité et j'appelle lastartActivityForResult
méthode sur cette référence - c'est peut-être la raison?1
quoi ton passage? EssayezIMAGE_PICK
Intent.ACTION_PICK
au lieu deIntent.ACTION_GET_CONTENT
. Qu'entendez-vous parIMAGE_PICK
? Il n'y a pas une telle constante. J'ai aussi essayéintent.setData(Uri.fromFile(new File("/sdcard/image/")));
. J'ai essayé toutes les combinaisons possibles de celles-ci et rien ne semble fonctionner ...c'est ma revisite de ce sujet, rassemblant toutes les informations ici, ainsi que d'autres questions pertinentes sur le débordement de pile. Il renvoie les images d'un fournisseur, tout en gérant les conditions de mémoire insuffisante et la rotation des images. Il prend en charge les gestionnaires de galerie, picasa et de fichiers, comme la boîte de dépôt. L'utilisation est simple: en entrée, le constructeur reçoit le résolveur de contenu et l'uri. La sortie est le bitmap final.
Références:
la source
Il existe deux didacticiels utiles sur le sélecteur d'images avec le code source téléchargeable ici:
Comment créer un sélecteur d'images Android
Comment sélectionner et recadrer l'image sur Android
Cependant, l'application sera forcée de fermer un jour, vous pouvez la corriger en ajoutant l'attribut android: configChanges dans l'activité principale du fichier Manifest comme:
Il semble que l'API de la caméra ait perdu le contrôle de l'orientation, cela l'aidera donc. :)
la source
Étape 1 Code pour ouvrir la galerie pour sélectionner des photos:
Étape 2 Code pour obtenir des données
onActivityResult
:la source
READ_EXTERNAL_STORAGE
Pour afficher des images et des vidéos, essayez ceci:
la source
Juste au cas où cela aiderait; Je fais cela pour obtenir le bitmap:
la source
Les réponses ci-dessus sont correctes. J'ai rencontré un problème différent: dans le HTC M8, mon application se bloque lors de la sélection d'une image dans la galerie. Je reçois une valeur nulle pour le chemin de l'image. J'ai corrigé et optimisé avec la solution suivante. dans la méthode onActivityResult
}
la source
la source
la source
Récupérer un type de fichier spécifique
Cet exemple obtiendra une copie de l'image.
Ouvrez un type de fichier spécifique
Lors de l'exécution sur 4.4 ou supérieur, vous demandez d'ouvrir un fichier géré par une autre application
Source primaire
la source
En plus des réponses précédentes, si vous rencontrez des problèmes pour obtenir le bon chemin (comme AndroZip), vous pouvez utiliser ceci:
la source
Veuillez trouver la réponse pour la sélection d'une seule image de la galerie
la source
Le moyen le plus rapide d'ouvrir une image à partir d'une galerie ou d'un appareil photo.
Référence originale: obtenir l'image de la galerie dans Android par programmation
La méthode suivante recevra l'image de la galerie ou de la caméra et l'affichera dans une ImageView. L'image sélectionnée sera stockée en interne.
code pour xml
Classe JAVA
la source
voici mon exemple, pourrait ne pas être exactement votre cas.
en supposant que vous obtenez le format base64 de votre fournisseur d'API, donnez-lui un nom de fichier et une extension de fichier, enregistrez-le à un certain emplacement dans le système de fichiers.
N'oubliez pas de configurer un fournisseur de fichiers approprié à la première place dans AndroidManifest.xml
où le chemin du fichier est un xml dans ... / res / xml / file_path.xml
Pour faire court, préparez d'abord le fournisseur de fichiers, passez Uri à Intent pour une source d'image connue et accessible, sinon, enregistrez l'image à l'emplacement souhaité, puis passez l'emplacement (en tant qu'Uri) à Intent.
la source