Je veux allumer le flash frontal (pas avec l'aperçu de la caméra) de manière programmatique sur Android. J'ai cherché sur Google mais l'aide que j'ai trouvée m'a renvoyé vers cette page
Est-ce que quelqu'un a des liens ou du code d'exemple?
Je veux allumer le flash frontal (pas avec l'aperçu de la caméra) de manière programmatique sur Android. J'ai cherché sur Google mais l'aide que j'ai trouvée m'a renvoyé vers cette page
Est-ce que quelqu'un a des liens ou du code d'exemple?
Pour 2021, avec CameraX, c'est maintenant super facile : https://stackoverflow.com/a/66585201/294884
Pour ce problème, vous devez :
Vérifiez si la lampe de poche est disponible ou non ?
Si oui, alors éteignez/allumez
Si ce n'est pas le cas, vous pouvez faire ce que vous voulez, en fonction des besoins de votre application.
Pour Vérifier la disponibilité du flash sur l'appareil :
Vous pouvez utiliser ce qui suit :
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
qui renverra true si un flash est disponible, false sinon.
Voir:
http://developer.android.com/reference/android/content/pm/PackageManager.html pour plus d'informations.
Pour allumer/éteindre la lampe de poche :
J'ai fait des recherches et trouvé ceci concernant android.permission.FLASHLIGHT. Les autorisations du manifeste Android semblent prometteuses :
Ensuite, utilisez Camera et définissez Camera.Parameters. Le paramètre principal utilisé ici est FLASH_MODE_TORCH.
par exemple.
Extrait de code pour allumer la lampe de poche de l'appareil photo.
Camera cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
Extrait de code pour éteindre la lumière LED de l'appareil photo.
cam.stopPreview();
cam.release();
J'ai trouvé un projet qui utilise cette autorisation. Consultez le code source de quick-settings ici http://code.google.com/p/quick-settings/ (Remarque : Ce lien est maintenant rompu).
Pour la lampe de poche, consultez directement http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick/flashlight (Remarque : Ce lien est maintenant rompu).
Mise à jour 6 Vous pouvez également essayer d'ajouter un SurfaceView comme décrit dans cette réponse LED flashlight on Galaxy Nexus controllable by what API? Cela semble être une solution qui fonctionne sur de nombreux téléphones.
Mise à jour 5 Mise à jour majeure
J'ai trouvé un lien alternatif (pour les liens cassés ci-dessus) : http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm Vous pouvez maintenant utiliser ce lien. [Mise à jour : 14/9/2012 Ce lien est maintenant rompu]
Mise à jour 1
Un autre code source ouvert : http://code.google.com/p/torch/source/browse/
Mise à jour 2
Exemple montrant comment activer la LED sur un Motorola Droid : http://code.google.com/p/droidled/
Autre code source ouvert :
http://code.google.com/p/covedesigndev/
http://code.google.com/p/search-light/
Mise à jour 3 (Widget pour allumer/éteindre la lumière LED de l'appareil photo)
Si vous voulez développer un widget qui allume/éteint la lumière LED de votre appareil photo, alors vous devez consulter ma réponse Widget for turning on/off camera flashlight in android.
Mise à jour 4
Si vous voulez régler l'intensité de la lumière émanant de la LED de l'appareil photo, vous pouvez consulter Can I change the LED intensity of an Android device? post complet. Notez que seuls les appareils HTC rootés prennent en charge cette fonctionnalité.
** Problèmes :**
Il y a aussi quelques problèmes lors de l'allumage/extinction de la lampe de poche. par exemple. pour les appareils n'ayant pas de FLASH_MODE_TORCH
ou même s'ils en ont, alors la lampe de poche ne s'allume pas etc.
Typiquement Samsung crée beaucoup de problèmes.
Vous pouvez consulter les problèmes dans la liste ci-dessous :
Utiliser la lampe de poche de l'appareil photo dans Android
Allumer/Éteindre la lumière LED/flash de l'appareil photo dans Samsung Galaxy Ace 2.2.1 & Galaxy Tab
Merci pour ton aide, ça marche pour moi! - J'ai simplement copié l'interface Flashlight et la classe HtcLedFlashlight puis j'ai appelé la méthode setOn avec true/false HtcLedFlashlight et c'est tout. --- Interface-Flashlight code.google.com/p/quick-settings/source/browse/trunk/… -- Class-HtcLedFlashlight code.google.com/p/quick-settings/source/browse/trunk/…
@saiket : bienvenue.. si votre problème est résolu, marquez cette réponse comme résolue. afin qu'elle puisse être utile aux autres..
@Kartik j'ai utilisé votre code, mais je rencontre un problème. Après 2 secondes, la lumière s'éteint. Si j'appuie à nouveau sur le bouton, l'application se ferme brusquement. Pouvez-vous me dire pourquoi ?
De mon expérience, si votre application est conçue pour fonctionner aussi bien en mode portrait qu'en mode paysage, vous devez déclarer la variable cam
comme statique. Sinon, onDestroy()
, qui est appelé lors du changement d'orientation, la détruit mais ne libère pas la caméra, il n'est donc pas possible de la rouvrir.
package com.example.flashlight;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
public static Camera cam = null;// doit être statique, sinon onDestroy() la détruit
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void flashLightOn(View view) {
try {
if (getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FLASH)) {
cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "Exception flashLightOn()",
Toast.LENGTH_SHORT).show();
}
}
public void flashLightOff(View view) {
try {
if (getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FLASH)) {
cam.stopPreview();
cam.release();
cam = null;
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "Exception flashLightOff",
Toast.LENGTH_SHORT).show();
}
}
}
pour le fichier manifest j'ai dû ajouter cette ligne
de http://developer.android.com/reference/android/hardware/Camera.html
les lignes suggérées ci-dessus ne fonctionnaient pas pour moi.
Vous n'avez pas besoin de vérifier la fonctionnalité du système si la caméra est éteinte. Si cam != null, elle était allumée.
J'ai obtenu AutoFlash avec les trois étapes simples ci-dessous.
J'ai simplement ajouté l'autorisation de la caméra et du flash dans le fichier Manifest.xml
Dans votre code de caméra, faites comme ceci.
//Ouvrir la caméra
Camera mCamera = Camera.open();
//Obtenir les paramètres de la caméra pour la personnalisation
Camera.Parameters parameters = mCamera.getParameters();
//Vérifier si l'appareil prend en charge l'AutoFlash, si oui alors définir AutoFlash
List flashModes = parameters.getSupportedFlashModes();
if (flashModes.contains(android.hardware.Camera.Parameters.FLASH_MODE_AUTO))
{
parameters.setFlashMode(Parameters.FLASH_MODE_AUTO);
}
mCamera.setParameters(parameters);
mCamera.startPreview();
Construisez + Exécutez —> Maintenant, allez dans une zone faiblement éclairée et prenez une photo, vous devriez obtenir un flash automatique si l'appareil le prend en charge.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
2021 .. C'est maintenant très facile dans Android moderne .. stackoverflow.com/a/66585201/294884