Je veux écrire un module où sur un clic d'un bouton la caméra s'ouvre et je peux cliquer et capturer une image. Si je n'aime pas l'image, je peux la supprimer et cliquer sur une autre image, puis sélectionner l'image et elle devrait revenir en arrière et afficher cette image dans l'activité.
278
Réponses:
Voici un exemple d'activité qui lancera l'application appareil photo, puis récupérera l'image et l'affichera.
Notez que l'application appareil photo elle-même vous donne la possibilité de revoir / reprendre l'image, et une fois qu'une image est acceptée, l'activité l'affiche.
Voici la mise en page utilisée par l'activité ci-dessus. Il s'agit simplement d'un LinearLayout contenant un Button avec id button1 et une ImageView avec id imageview1:
Et un dernier détail, n'oubliez pas d'ajouter:
et si la caméra est facultative pour la fonctionnalité de votre application. assurez-vous de définir require à false dans l'autorisation. comme ça
à votre manifest.xml.
la source
<uses-feature/>
l'android:required="false"
attribut:<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>
Bitmap photo = (Bitmap) data.getExtras().get("data");
ne saisit pas l'image qui a été prise. Il saisit une miniature de l'image qui a été prise.Mise à jour (2020)
Google a ajouté une nouvelle
ActivityResultRegistry
API qui « vous permet de gérer lestartActivityForResult()
+onActivityResult()
ainsi querequestPermissions()
+onRequestPermissionsResult()
flux sans écraser les méthodes dans votre activité ou Fragment, va apporter une plus la sécurité de type par l' intermédiaireActivityResultContract
et fournit des crochets pour tester ces flux » - la source .L'API a été ajoutée dans androidx.activity 1.2.0-alpha02 et androidx.fragment 1.3.0-alpha02 .
Vous pouvez donc maintenant faire quelque chose comme:
Jetez un œil à la documentation pour savoir comment utiliser la nouvelle API de résultat d'activité: https://developer.android.com/training/basics/intents/result#kotlin
Il existe de nombreux contrats ActivityResultContracts intégrés qui vous permettent de faire différentes choses, comme choisir des contacts, demander des autorisations, prendre des photos ou prendre des vidéos. Vous êtes probablement intéressé par ActivityResultContracts.TakePicture illustré ci-dessus.
Notez que androidx.fragment 1.3.0-alpha04 déconseille les API
startActivityForResult()
+onActivityResult()
etrequestPermissions()
+onRequestPermissionsResult()
sur Fragment. Il semble donc queActivityResultContracts
c'est la nouvelle façon de faire les choses à partir de maintenant.Réponse originale (2015)
Il m'a fallu quelques heures pour que cela fonctionne. Le code est presque un copier-coller de developer.android.com , avec une différence mineure.
Demandez cette autorisation sur
AndroidManifest.xml
:Sur votre
Activity
, commencez par définir ceci:Ensuite, lancez ceci
Intent
dans unonClick
:Ajoutez la méthode de support suivante:
Recevez ensuite le résultat:
Ce qui l'a fait fonctionner est le
MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath))
, qui est différent du code de developer.android.com . Le code d'origine m'a donné unFileNotFoundException
.la source
android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/JPEG_20180823_102340_722874009725833047.jpg exposed beyond app through ClipData.Item.getUri()
. Une idée pour réparer ceci? @AlbertVilaCalvostorageDir = Context.getFilesDir();
à la place de FilestorageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);
. Sinon, j'obtenais une erreur d'autorisation refusée.Prendre une photo + choisir dans la galerie:
la source
ResultCode == 1
à l'intérieurResultCode == RESULT_OK
?requestCode==1
, aide à identifier qui a initié la demande.Je sais que c'est un fil assez ancien, mais toutes ces solutions ne sont pas terminées et ne fonctionnent pas sur certains appareils lorsque l'utilisateur fait pivoter la caméra car les données dans onActivityResult sont nulles. Voici donc une solution que j'ai testée sur de nombreux appareils et que je n'ai rencontré aucun problème jusqu'à présent.
Déclarez d'abord votre variable Uri dans votre activité:
Ensuite, créez votre dossier temporaire pour stocker l'image capturée et faites l'intention de capturer l'image par la caméra:
Et maintenant, voici l'une des choses les plus importantes, vous devez enregistrer votre uriFilePath dans onSaveInstanceState, car si vous ne le faisiez pas et que l'utilisateur faisait pivoter son appareil lors de l'utilisation de la caméra, votre uri serait nul.
Après cela, vous devriez toujours récupérer votre uri dans votre méthode onCreate:
Et voici la dernière partie pour obtenir votre Uri dans onActivityResult:
PS N'oubliez pas d'ajouter des autorisations pour Camera et Ext. l'écriture de stockage dans votre manifeste.
la source
Ici, vous pouvez ouvrir la caméra ou la galerie et définir l'image sélectionnée en vue d'image
Ajouter des autorisations dans le manifeste
Dans onCreate ()
Afficher la boîte de dialogue des options (pour sélectionner l'image de la caméra ou de la galerie)
Obtenir une photo de la galerie
Obtenir une photo de l'appareil photo
Une fois que l'image est sélectionnée ou capturée,
Il est maintenant temps de stocker l'image
Demander la permission
la source
Vous devez vous renseigner sur l' appareil photo . (Je pense que pour faire ce que vous voulez, vous devez enregistrer l'image actuelle dans votre application, y sélectionner / supprimer, puis rappeler la caméra pour réessayer, plutôt que de réessayer directement à l'intérieur de la caméra.)
la source
Voici le code que j'ai utilisé pour capturer et enregistrer l'image de la caméra, puis l'afficher dans imageview. Vous pouvez utiliser selon vos besoins.
Vous devez enregistrer l'image de la caméra à un emplacement spécifique, puis la récupérer à partir de cet emplacement, puis la convertir en tableau d'octets.
Voici la méthode pour ouvrir l'activité de capture de l'image de la caméra.
alors votre méthode onActivityResult () devrait être comme ça.
Voici la méthode getBitmap () utilisée dans onActivityResult (). J'ai fait toutes les améliorations de performances possibles tout en obtenant une image bitmap de capture de caméra.
J'espère que ça aide!
la source
Capturez la photo de l'appareil photo + choisissez l'image de la galerie et placez-la en arrière-plan de la mise en page ou de la vue d'image. Voici un exemple de code.
la source
En activité:
dans layout.xml:
dans manifest.xml:
la source
Vous pouvez utiliser un appareil photo personnalisé avec une image miniature. Vous pouvez regarder mon projet .
la source
J'ai créé une boîte de dialogue avec l'option de choisir Image dans la galerie ou l'appareil photo. avec un rappel comme
Au début, nous devons définir l'autorisation dans AndroidManifest car nous devons écrire un magasin externe lors de la création d'un fichier et de la lecture d'images de la galerie
Créez un fichier file_paths dans app / src / main / res / xml / file_paths.xml
avec chemin
Ensuite, nous devons définir le fichier Provier pour générer un uri de contenu pour accéder au fichier stocké dans un stockage externe
Disposition du journal
ImagePicker Dailog
}
Appelez une activité ou un fragment comme celui-ci Définissez ImagePicker dans Fragment / Activity
Appelez ensuite le journal de bord en cliquant sur le bouton
la source
Voici le code complet:
N'oubliez pas d'ajouter également des autorisations pour la caméra.
la source
Vous pouvez utiliser ce code pour l'écouteur onClick (vous pouvez utiliser ImageView ou le bouton)
Pour afficher dans votre imageView
Remarque: insérez-la dans le manifeste
la source
Utilisez le code suivant pour capturer une image à l'aide de votre appareil photo mobile. Si vous utilisez Android avec une version supérieure à Lolipop, vous devez également ajouter la demande d'autorisation.
la source
Bitmap photo = (Bitmap) data.getExtras().get("data");
obtient une miniature de la caméra. Il y a un article sur la façon de stocker une image dans un stockage externe à partir de l'appareil photo. lien utilela source
Veuillez suivre cet exemple avec cette implémentation en utilisant le support Kotlin et Andoirdx:
Et le résultat de l'activité:
Vous pouvez obtenir plus de détails sur https://github.com/joelmmx/take_photo_kotlin.git
J'espère que ça t'aide!
la source