Une photo par intention
Lancer l'application photo
Les appareils Android possèdent de nombreux périphériques dont des caméras pour prendre des photos en autre.
Forcement, des applications seront livrées pour pouvoir les utiliser.
Dans votre application, il ne sera pas forcement utile de tout redévelopper, vous pourrez donc demander à Android de lancer une application pour l'un de ces périphériques via des intentions.
C'est donc sans surprise que cette possibilité existe pour les caméras !
Comme il s'agit de récupérer une image, il faudra utiliser startActivityForResult()
Par exemple:
public final static int TAKE_PICTURE=1; // Constante positionnée à la valeur que l'on veut, celle-ci servira lors du retour de résultat.
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), TAKE_PICTURE);
Récupérer une vignette de la photo prise
Dans cette utilisation simple, l'application retournera (éventuellement) une vignette de l'image capturée sous forme de Bitmap.
que l'on pourra afficher dans un objet de type ImageView par exemple.
Avec un exemple de layout nommé activity_main.xml
Et son AndroidManifest.xml
Récupérer la photo prise
Si vous voulez plus qu'une vignette, mais bien la photo en intégralité, il faudra passer un paramètre supplémentaire à l'application: Le fichier destination sous forme d'URI. D'où le code précédant un peu plus complet:
Voici l'extrait de code:
// Préparation d'un fichier qui contiendra la photo prise
File file = new File(Environment.getExternalStorageDirectory(), "maphoto.jpg");
outputFileUri = Uri.fromFile(file);
// Utilisation de l'application par défaut pour utiliser la caméra
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
La photo enregistrée se nommera "maphoto.jpg" et sera stockée sur la carte micro SD (ou le premier volume déclaré comme stockage externe via Environment.getExternalStorageDirectory()). Vous pouvez aussi utiliser Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) pour connaître le répertoire public réservé aux images.
Vous noterez qu'il n'y a aucun contrôle, ce programme se plantera donc lamentablement si une erreur se produit lors de la récupération de volume externe de stockage, ...