Alors je ne développe pas sous Android, mais il parait que l'API officielle de l'appareil photo (Camera) est foireuse et très galère à implémenter dans une application. C'est pourquoi Dmitry Zaitsev a développé Fotoapparat, une bibliothèque libre qui permet d'utiliser l'appareil photo d'un téléphone Android sans se prendre la tête.

Voici comment prendre une photo avec FotoApparat :

Fotoapparat fotoapparat = Fotoapparat .with(context) .into(cameraView) .build();

fotoapparat.start();

fotoapparat .takePicture() .saveToFile(someFile);

Grâce à Fotoapparat, vous spécifiez quel type de photo vous voulez (résolution, activation du flash, mise au point...etc), vous lancez ou stoppez la preview et vous pouvez fournir à vos utilisateurs l'interface pour prendre la photo.

Par exemple pour activer ou stopper la preview :

@Override protected void onStart() { super.onStart();

fotoapparat.start();
}

@Override protected void onStop() { super.onStop();

fotoapparat.stop();
}

Et pour sauver la photo en JPG et en BMP :

PhotoResult photoResult = fotoapparat.takePicture();

// save to file
photoResult.saveToFile(new File( getExternalFilesDir("photos"), "photo.jpg" ));

// obtain
Bitmap photoResult .toBitmap() .whenAvailable(bitmapPhoto -> { imageView.setImageBitmap(bitmapPhoto.bitmap);

De plus, il est possible de récupérer les images de la preview, d'utiliser la camera frontale, dorsale ou une camera extérieure et il y a des fonctionnalités de logs si vous voulez débugger.

Bref, c'est cool. Par contre, ça ne gère pas encore tout ce qui est vidé.

+ d'infos ici.

Source