Donc, fondamentalement, ce que j'essaie de réaliser, c'est d'ouvrir le Gallery
sous Android et de laisser l'utilisateur sélectionner multiple images
. Maintenant, cette question a été posée fréquemment mais je ne suis pas satisfait des réponses. Principalement parce que j'ai trouvé quelque chose d'intéressant dans de docs dans mon IDE (j'y reviendrai plus tard) et que je ne veux donc pas utiliser d'adaptateur personnalisé mais juste celui de la vanille.
Maintenant, mon code pour sélectionner une image est:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), 1);
Maintenant, les gens sur SO et d'autres sites Web vous diront que vous avez 2 options:
1) Ne pas utiliser ACTION_GET_CONTENT
mais à la ACTION_SEND_MULTIPLE
place.
Celui-ci ne fonctionne pas. Celui-ci est conforme à la documentation pour les sending
fichiers et non retrieving
et c'est exactement ce qu'il fait. Lorsque j'utilise ACTION_SEND_MULTIPLE, une fenêtre s'ouvre sur mon appareil et je dois sélectionner une application à laquelle envoyer mes données. Ce n'est pas ce que je veux, alors je me demande comment les gens ont réalisé cela avec cette solution. Est-ce que je rate quelque chose?
2) Implémentez un custom Gallery
. Maintenant, c'est ma dernière option que je vais envisager car à mon humble avis, ce n'est pas ce que je recherche car je dois le coiffer moi-même ET pourquoi diable vous ne pouvez tout simplement pas sélectionner plusieurs images dans la galerie vanille?
Il doit y avoir une option pour cela. Maintenant, la chose intéressante que j'ai trouvée est la suivante:
j'ai trouvé cela dans la description de la documentation ACTION_GET_CONTENT
.
Si l'appelant peut gérer plusieurs éléments retournés (l'utilisateur effectuant une sélection multiple), il peut alors spécifier EXTRA_ALLOW_MULTIPLE pour l'indiquer.
C'est assez intéressant. Ici, ils font référence au cas d'utilisation où un utilisateur peut sélectionner plusieurs éléments?
Plus tard, ils disent dans la documentation:
Vous pouvez utiliser EXTRA_ALLOW_MULTIPLE pour permettre à l'utilisateur de sélectionner plusieurs éléments.
C'est donc assez évident, non? C'est de quoi j'ai besoin. Mais ma question suivante est: où puis-je mettre cela EXTRA_ALLOW_MULTIPLE
? Le plus triste est que je ne trouve pas cela nulle part dans le guide developer.android et que cela n'est pas non plus défini comme une constante dans la classe INTENT.
Quelqu'un peut-il m'aider avec ça EXTRA_ALLOW_MULTIPLE
?
la source
EXTRA_ALLOW_MULTIPLE
vous permet de sélectionner plusieurs éléments. Obtenez les URI en appelant l'getClipData()
intention renvoyée dansonActivityResult
. Le seul problème est que le widget de la galerie ne permet pas la sélection multiple. Dans ce cas, cliquer sur n'importe quelle image terminera le choix et vous pourrez obtenir l'URI (d'un seul élément) en appelant l'getData
intention renvoyéeRéponses:
L'option EXTRA_ALLOW_MULTIPLE est définie sur l'intention via la méthode Intent.putExtra ():
Votre code ci-dessus devrait ressembler à ceci:
Remarque: l'
EXTRA_ALLOW_MULTIPLE
option n'est disponible que dans l'API Android 18 et versions ultérieures.la source
Intent.getClipData
. Il a le tableau de ClipData Item.Définissez ces variables dans la classe:
Supposons qu'en cliquant sur un bouton, il devrait ouvrir la galerie pour sélectionner des images
Ensuite, vous devez remplacer la méthode onActivityResult
NOTEZ QUE: la galerie ne vous donne pas la possibilité de sélectionner plusieurs images, nous ouvrons donc ici tous les studios d'images que vous pouvez sélectionner multi-images à partir d'elles. et n'oubliez pas d'ajouter les autorisations à votre manifeste
TRÈS IMPORTANT: getData (); pour obtenir une seule image et je l'ai stockée ici dans imageEncoded String si l'utilisateur sélectionne plusieurs images, elles doivent être stockées dans la liste
Il faut donc vérifier laquelle est nulle pour utiliser l'autre
Je vous souhaite un bon essai et aux autres
la source
Beaucoup de ces réponses ont des similitudes mais il manque toutes la partie la plus importante qui se trouve
onActivityResult
, vérifiez sidata.getClipData
est nul avant de vérifierdata.getData
Le code pour appeler le sélecteur de fichiers:
Le code pour obtenir toutes les images sélectionnées:
Notez que le sélecteur d'Android a des photos et une galerie disponibles sur certains appareils. Photos permet de sélectionner plusieurs images. La galerie n'en autorise qu'un à la fois.
la source
getData()
ne sera parfois PAS nul mais n'aura qu'un seul Uri. Si vous souhaitez gérer lorsqu'un utilisateur sélectionne plusieurs fichiers, vérifiezgetClipData()
avantgetData()
- si les données de clip ne sont pas nulles, l'utilisateur peut avoir sélectionné plusieurs images. Gérer getClipData avant getData, mais gérer les deux cas est important pour prendre en charge différents appareils tout en autorisant plusieurs Uris.J'espère que cette réponse n'est pas en retard. Parce que le widget de galerie ne prend pas en charge la sélection multiple par défaut, mais vous pouvez personnaliser la vue en grille qui a accepté votre intention de sélection multiple. L'autre option consiste à étendre la vue de la galerie et à ajouter votre propre code pour permettre une sélection multiple.
C'est la bibliothèque simple qui peut le faire: https://github.com/luminousman/MultipleImagePick
Mise à jour : à
partir du commentaire de @ ilsy, CustomGalleryActivity dans cette bibliothèque utilise
manageQuery
, qui est obsolète, elle devrait donc être remplacée pargetContentResolver().query()
etcursor.close()
comme cette réponsela source
getContentResolver().query()
dans le fil de l'interface utilisateur. En savoir plus sur les chargeurs et la bibliothèque de support..cacheOnDisc()
également obsolète, alors changez-le en.cacheOnDisc(true)
avec unInitialiser l'instance:
Dans onActivityResult Vous devez écrire ce bloc If-else 2. Un pour une seule image et un autre pour plusieurs images.
La partie la plus importante, obtenir le chemin de l'image depuis uri :
J'espère que cela peut vous aider.
la source
Je suis nul du
Cursor
. Puis trouvé une solution pour convertir leUri
enBitmap
qui fonctionne parfaitement.Voici la solution qui fonctionne pour moi:
la source
Salut le code ci-dessous fonctionne bien.
Vous souhaitez plus de précisions. http://mylearnandroid.blogspot.in/2014/02/multiple-choose-custom-gallery.html
la source
J'ai également eu le même problème. Je voulais également que les utilisateurs puissent prendre des photos facilement tout en sélectionnant des photos dans la galerie. Impossible de trouver un moyen natif de le faire, j'ai donc décidé de créer un projet open source. C'est un peu comme MultipleImagePick mais c'est juste une meilleure façon de l'implémenter.
https://github.com/giljulio/android-multiple-image-picker
la source
Essayez celui-ci IntentChooser . Ajoutez simplement quelques lignes de code, j'ai fait le reste pour vous.
PS: comme mentionné dans les réponses ci-dessus, EXTRA_ALLOW_MULTIPLE n'est disponible que pour l'API> = 18. Et certaines applications de galerie ne rendent pas cette fonctionnalité disponible (Google Photos et Documents (
com.android.documentsui
) fonctionnent.la source
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);