2010-10-07 13 views
7

Estoy tratando de escribir una aplicación que requiera el flash LED para pasar al modo de soplete. El problema es que Android 2.1 no es compatible con este modo y, por lo tanto, aún no puedo admitir la plataforma. No sería un problema, pero lo estoy escribiendo para mi prometido y su Epic 4G solo tiene 2.1 en este momento. Encontré algunas muestras de código que usan algunas llamadas API no documentadas y, por lo tanto, funcionan en el Motorola Droid y tal, pero no funcionan en Epic. ¿Alguien tiene alguna sugerencia sobre dónde buscar para encontrar el código que me ayude a hacerlo funcionar?Camera.Parameters.FLASH_MODE_TORCH reemplazo para Android 2.1

Respuesta

9

Me parece que el modo de antorcha generalmente funciona bien en 2.1, pero tuve el mismo problema con el Samsung Epic y encontré un truco.

Mirando los parámetros devueltos por Camera.getParameters() cuando se ejecutan en el Samsung Epic, noté que los modos de flash que dice ser compatibles son: flash-mode-values ​​= off, on, auto;

antorcha no está en la lista, lo que implica que no es compatible.

Sin embargo, encontré que este modelo todavía aceptaría ese modo y ¡PODRÍA encender el LED! La mala noticia fue que cuando más tarde volvió a poner el modo de flash en automático o apagado, ¡el LED todavía estaba encendido! No se apagará hasta que llame a Camera.release().

Supongo que es por eso que Samsung no lo incluye en la lista de compatibles.?!

Así que ... el método que utilizo para alternar la antorcha en un CameraHelper clase es ...

/*** 
* 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()); 
    } 
} 

Las actividades que utilizar esta llamada de la siguiente manera ...

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(); 
     } 
    } 
} 

El La magia que hace que esto funcione en releaseCameraResources() es que llama Camera.release() .... y luego tengo que reiniciar todas las cosas de mi cámara para dispositivos Samsung.

No es bonita, pero parece funcionar para muchos usuarios.

Tenga en cuenta que tengo un informe de que el modo de la antorcha no funciona en absoluto con este código en Nexus one, pero he podido profundizar en él. Definitivamente funciona en HTC EVO y Samsung Epic.

Espero que esto ayude.

+0

No estoy seguro si hice algo mal, pero me estoy poniendo un fuerza de cierre cuando trato de depuración eso. – smccloud

+2

Sin ánimo de ofender, pero la funcionalidad de base en el fabricante del teléfono no es la forma ideal de hacerlo. ¿Quién sabe qué funcionalidad tendrán los teléfonos de SAMSUNG en medio año o más, por ejemplo? – ajacian81

+0

He usado tu código. Pero la linterna de la cámara se apaga automáticamente después de unos segundos. Probé el código en samsung galaxy ace 2.2.1 .. ¿cuál puede ser la razón para eso? –

2

En mi caso para los dispositivos de Samsung que necesitaba para establecer el modo de enfoque a infinito y comenzó a trabajar

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

Muchas gracias por la sugerencia :) Tuve un problema con el flash que no funciona en un Galaxy S 5 con el modo de enfoque "automático", configurándolo como "infinito", el truco fue: p – Kervala

Cuestiones relacionadas