Le flash

 

Le flash peut être un élément présent sur la caméra utilisée. Dans ce cas, il sera vu comme un paramètre de la caméra, il faudra instancier un Parameters pour pouvoir l'utiliser:

Camera.Parameters parameters = camera.getParameters();

 

Les différents mode du flash

Les différents modes du flash sont:

FLASH_MODE_ON: Dans ce cas, l'appareil utilisera toujours le flash en mode snapshot. Suivant les drivers, il pourra être utilisé en mode preview ou auto-focus.

FLASH_MODE_OFF: L'appareil n'utilisera jamais le flash.

FLASH_MODE_AUTO: Après mesure de la luminosité ambiante, l'appareil décide s'il faut ou non utiliser le flash en mode preview, auto-focus ou snapshot (dépendant du driver de l'appareil).

FLASH_MODE_TORCH: mode particulier qui permet d'avoir le flash constament allumé (pour filmer par exemple). Ce mode est utilisable lorsque la caméra est en mode preview, auto-focus ou snapshot.

Image non trouvée !Ce mode est très énergivore !!! La durée de vie de la batterie va s'en ressentir !

FLASH_MODE_RED_EYE: Permet d'envoyer des flashs avant la prise de photo pour éviter l'effet yeux rouges sur la photo.

Les constantes présentées ici faisant partie de la classe Parameters.

 

Tester la présence des différents modes

Pour vérifier que l'un de ces modes est disponible sur l'appareil, vous utiliserez:

List<String> flashModes = pamaters.getSupportedFlashModes();

Qui retourne une liste de string des modes disponibles. ou null si le flash n'est pas supporté par la caméra utilisée.

Vous pourrez ensuite tester l'un des modes avec:

if (flashModes.contains(Parameters.FLASH_MODE_TORCH))
{

...

}

Mode courant du flash

Pour vérifier dans quel mode est positionné le flash, vous utiliserez la méthode suivante: parameters.getFlashMode();

La valeur en retour pourra être null si la caméra n'a pas de flash associé.

Par exemple:

System.out.println ("Mode actuel:" + parameters.getFlashMode());

Activer le flash dans un mode

Pour mettre le flash dans l'un des modes décrit précédemment:

parameters.setFlashMode(String flashMode);

où flashMode sera l'une des constantes indiquées précédemment.

Puis vous indiquez à la Camera la nouvelle instance de Paremeters à utiliser:

camera.setParameters(parameters);

 

Exemple de code

Dans le code qui suit, allumage du flash en continu pendant 5 secondes sur la caméra par défaut.

Bien entendu, l'exemple ici n'explique que l'utilisation du flash en mode torche. Il n'y a pas de choix de la caméra à utiliser, ...

Cette solution n'est évidemment pas à utiliser telle quelle, il ne faut pas faire un sleep dans l'UI Thread, car risque d'ANR ! Utilisez plutôt un Thread indépendant éventuellement depuis un service.

Vous avez cependant une piste de solution utilisée par les utilitaires de type "lampe de poche" pour utiliser le flash en mode torche pour vous éclairez (cf. en complément, la solution pour les appareils sans flash) !

 

Voici un exemple de code permettant de lister les différents modes du flash sur les différentes caméras présentes sur l'appareil: