2010-10-07 7 views
7

J'essaie d'écrire une application qui nécessite le flash LED pour passer en mode torche. Le problème est, Android 2.1 ne supporte pas ce mode et donc je ne peux pas encore supporter la plate-forme. Ce ne serait pas un problème, mais je l'écris pour mon fiancé et son Epic 4G n'a que 2,1 en ce moment. J'ai trouvé des exemples de code qui utilisent des appels d'API non documentés et qui fonctionnent donc sur le Motorola Droid et autres, mais ils ne fonctionnent pas sur l'Epic. Quelqu'un at-il des suggestions sur où chercher pour trouver le code qui devrait m'aider à obtenir ce travail?Camera.Parameters.FLASH_MODE_TORCH remplacement pour Android 2.1

Répondre

9

Je trouve que le mode torche fonctionne généralement bien sur 2.1 mais j'ai eu le même problème avec le Samsung Epic et trouvé un hack autour d'elle. En regardant les params retournés par Camera.getParameters() lors de l'exécution sur le Samsung Epic, j'ai remarqué que les modes flash qu'il prétend supporter sont: flash-mode-values ​​= off, on, auto; Le mode torche n'est pas répertorié, ce qui implique qu'il n'est pas pris en charge.

Cependant, j'ai trouvé que ce modèle accepterait toujours ce mode et allumerait la LED! Les mauvaises nouvelles étaient que lorsque plus tard, le réglage du mode flash de retour à l'auto ou éteint à gauche, le voyant reste allumé! Il ne s'éteint pas jusqu'à ce que vous appeliez Camera.release().

Je suppose que c'est pourquoi Samsung ne l'inclut pas dans la liste des supportés!?!

Alors ... la méthode que j'utilise pour activer la flamme dans une classe CameraHelper est ...

/*** 
* Attempts to set camera flash torch/flashlight mode on/off 
* @param isOn true = on, false = off 
* @return boolean whether or not we were able to set it 
*/ 
public boolean setFlashlight(boolean isOn) 
{ 
    if (mCamera == null) 
    { 
     return false; 
    } 
    Camera.Parameters params = mCamera.getParameters(); 
    String value; 
    if (isOn) // we are being ask to turn it on 
    { 
     value = Camera.Parameters.FLASH_MODE_TORCH; 
    } 
    else // we are being asked to turn it off 
    { 
     value = Camera.Parameters.FLASH_MODE_AUTO; 
    } 

    try{  
     params.setFlashMode(value); 
     mCamera.setParameters(params); 

     String nowMode = mCamera.getParameters().getFlashMode(); 

     if (isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_TORCH)) 
     { 
      return true; 
     } 
     if (! isOn && nowMode.equals(Camera.Parameters.FLASH_MODE_AUTO)) 
     { 
      return true; 
     } 
     return false; 
    } 
    catch (Exception ex) 
    { 
     MyLog.e(mLOG_TAG, this.getClass().getSimpleName() + " error setting flash mode to: "+ value + " " + ex.toString()); 
    } 
} 

Les activités qui utilisent cet appel comme suit ...

private void toggleFlashLight() 
{ 
    mIsFlashlightOn = ! mIsFlashlightOn; 

    /** 
    * hack to fix an issue where the Samsung Galaxy will turn torch on, 
    * even though it says it doesnt support torch mode, 
    * but then will NOT turn it off via this param. 
    */ 
    if (! mIsFlashlightOn && Build.MANUFACTURER.equalsIgnoreCase("Samsung")) 
    { 
     this.releaseCameraResources(); 
     this.initCamera(); 
    } 
    else 
    { 
     boolean result = mCamHelper.setFlashlight(mIsFlashlightOn); 
     if (! result) 
     { 
      alertFlashlightNotSupported(); 
     } 
    } 
} 

Le La magie qui rend ce travail dans releaseCameraResources() est qu'elle appelle Camera.release() .... et je dois alors réinitialiser tous mes trucs de caméra pour les appareils Samsung.

Pas joli mais semble fonctionner pour beaucoup d'utilisateurs.

Notez que j'ai un rapport de mode de torche ne fonctionnant pas du tout avec ce code sur Nexus One, mais j'ai été capable de creuser dedans. Il fonctionne définitivement sur HTC EVO et Samsung Epic.

Espérons que cela aide.

+0

Je ne sais pas si je l'ai fait quelque chose de mal, mais je suis d'obtenir un Fermer la force lorsque je tente de debug il. – smccloud

+2

Sans vouloir vous offenser, le fait de baser la fonctionnalité sur le téléphone n'est pas la solution idéale. Qui sait quelles fonctionnalités les téléphones SAMSUNG auront dans une demi-année ou plus par exemple? – ajacian81

+0

J'ai utilisé votre code. Mais la lampe de poche de l'appareil photo s'éteint automatiquement après quelques secondes. J'ai testé le code dans samsung galaxy ace 2.2.1 .. quelle peut être la raison de cela? –

2

Dans mon cas pour les appareils Samsung je devais définir le mode de mise au point à l'infini et il a commencé à travailler

params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY); 
mCamera.setParameters(params); 
mCamera.startPreview(); 
+0

Merci beaucoup pour l'indice :) J'ai eu un problème avec le flash ne fonctionne pas sur un Galaxy S 5 avec le mode de mise au point "auto", le réglage à "l'infini" a fait l'affaire: p – Kervala

Questions connexes