Ce que j'essaie de faire semble très simple, mais après quelques jours de recherche, je n'arrive pas à le comprendre.
J'ai une application qui permet à l'utilisateur de sélectionner plusieurs images (jusqu'à 5). J'utilise un ImageView
. Lorsque l'utilisateur clique sur le ImageView
, je souhaite lui permettre de
- Sélectionnez l'image dans la galerie, ou
- Utilisez l'appareil photo pour capturer une image.
J'ai commencé par utiliser l' ACTION_GET_CONTENT
intention, et cela fonctionne bien pour accéder à la galerie. Alors j'ai essayé d'utiliser l' ACTION_PICK_ACTIVITY
intention pour permettre à l'utilisateur de choisir une caméra ou une galerie:
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*");
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);
Mais il semble que je ne puisse en ajouter qu'un EXTRA_INTENT
. Le menu s'affiche comme prévu, mais les seules options sont Galerie et Fichiers .... pas de caméra).
Y a-t-il un moyen meilleur / plus simple de faire cela qui me manque? Merci pour toute aide.
Réponses:
Vous devrez créer votre propre boîte de dialogue de sélection fusionnant les deux résultats de résolution d'intention.
Pour ce faire, vous devrez interroger le PackageManager avec PackageManager.queryIntentActivities () pour les deux intentions d'origine et créer la liste finale des intentions possibles avec une nouvelle intention pour chaque activité récupérée comme ceci:
(J'ai écrit ceci directement ici pour que cela ne se compile pas)
Ensuite, pour plus d'informations sur la création d'une boîte de dialogue personnalisée à partir d'une liste, voir https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog
la source
Comment lancer une seule intention pour sélectionner des images de la Galerie ou de l'appareil photo, ou de toute application enregistrée pour parcourir le système de fichiers.
Plutôt que de créer une boîte de dialogue avec une liste d'options d'intention, il est préférable d'utiliser Intent.createChooser pour accéder aux icônes graphiques et aux noms courts des différentes applications de navigateur de système de fichiers `` Camera '', `` Gallery '' et même tiers. comme «Astro», etc.
Cela décrit comment utiliser l'intention de sélection standard et y ajouter des intentions supplémentaires.
la source
final String fname = Utils.getUniqueImageFilename();
ne fonctionne pas ... il ditUtils cannot be resolved
:(Utils.getUniqueImageFilename()
est ma propre méthode pour générer un nom de fichier unique. Il existe de nombreuses façons de procéder. L'un des plus simples consiste à utiliser quelque chose comme"img_"+ System.currentTimeMillis() + ".jpg"
. Un autre estFile.createTempFile()
.if (data == null || data.getData() == null)
.J'ai trouvé ça . En utilisant:
pour l'une des intentions, l'utilisateur a la possibilité de sélectionner des «documents» dans Android 4, ce que j'ai trouvé très déroutant. Utiliser ceci à la place montre l'option 'galerie':
la source
J'ai également eu ce problème et ce que j'ai fait a été de créer un AlertDialog et d'utiliser la méthode setItems () avec l'écouteur DialogInterface:
la source
J'ai fusionné quelques solutions pour créer un utilitaire complet pour choisir une image dans la galerie ou l'appareil photo. Voici les fonctionnalités de ImagePicker util (également dans une librairie Github ):
Capture d'écran:
Modifier : Voici un fragment de code pour obtenir une intention fusionnée pour les applications Galerie et Appareil photo. Vous pouvez voir le code complet sur ImagePicker util (également dans une bibliothèque Github ):
la source
getRotationFromCamera
(ImagePicker.java
) et quelle valeur il renvoie? Sur quel téléphone testez-vous?boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
ce code vous aidera, en ce sens qu'il y a deux boutons un pour l'appareil photo et un autre pour la galerie, et l'image sera affichée dans ImageView
https://github.com/siddhpuraamitr/Choose-Image-From-Gallery-Or-Camera
la source
Pour ceux qui obtiennent une erreur sur 4.4 à la hausse en essayant d'utiliser la sélection d'image, vous pouvez utiliser le code ci-dessous.
Plutôt que de créer une boîte de dialogue avec une liste d'options d'intention, il est préférable d'utiliser Intent.createChooser pour accéder aux icônes graphiques et aux noms courts des différentes applications de navigateur de système de fichiers `` Camera '', `` Gallery '' et même tiers. comme «Astro», etc.
Cela décrit comment utiliser l'intention de sélection standard et y ajouter des intentions supplémentaires.
la source
Cela devrait résoudre le problème null outputFileUri de Tina:
Remarque: j'utilise ce code dans android.support.v4.app.Fragment vos méthodes remplacées peuvent changer en fonction de la version de Fragment / Activité que vous utilisez.
la source
Vous pouvez créer une boîte de dialogue d'options
Ouvrir la caméra:
Ouvrir la galerie:
Pour obtenir le résultat de la sélection
Méthode pour enregistrer l'image capturée
la source
Problème d'image trop gros résolu et éviter de manquer de mémoire.
la source
Ajout de ma solution - il renverra un rappel, que ce soit de la caméra ou de la cuisine à côté de l'intention:
la source
Vous pouvez essayer ceci:
la source
C'est simple en utilisant AlertDialog et Intent.ACTION_PICK
la source
S'appuyant sur la réponse de David, mes deux sous de la
onActivityResult()
part. Il prend en charge les changements introduits dans 5.1.1 et détecte si l'utilisateur a sélectionné une ou plusieurs images de la bibliothèque.la source
Essayez de cette façon
Ensuite, créez une méthode onactivityresult et faites quelque chose comme ça
Voir ceci http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
la source
J'avais travaillé dur sur la sélection d'images de la caméra ou de la galerie et créé une classe utilitaire pour ce travail. Avec l'utilisation de ces classes «Sélectionner une caméra ou une galerie d'images est trop facile», il vous a suffi de 5 à 10 minutes de votre développement.
ImagePickerUtils: - http://www.codesend.com/view/f8f7c637716bf1c693d1490635ed49b3/
BitmapUtils: - http://www.codesend.com/view/81c1c2a3f39f1f7e627f01f67be282cf/
ConvertUriToFilePath: - http://www.codesend.com/view/f4668a29860235dd1b66eb419c5a58b5/
MediaUtils: - https://codeshare.io/5vKEMl
Nous devons ajouter ces autorisations dans menifest:
Cette fonction de classe (checkAndRequestPermissions) vérifie automatiquement l'autorisation dans Android-Marshmallow et Android - Nougat.
J'espère que cela vous aidera.Si quelqu'un a des suggestions pour améliorer ces cours, veuillez ajouter votre avis dans les commentaires.
la source
Selon la réponse de David Manpearl
https://stackoverflow.com/a/12347567/7226732
il suffit de modifier onActivityResult () comme
et définissez la capture ou choisissez des images dans la vue image.
la source