2011-02-16 12 views
14

Tengo un problema con un Samsung Galaxy Tab. Quiero usar el flash de la cámara como antorcha.¿Cómo utilizar el flash/led de la cámara como antorcha en un Samsung Galaxy Tab?

¿Alguien sabe cómo habilitarlo?

Este es un código que funciona para habilitar/deshabilitar el flash de la cámara en un HTC Desire pero falla en Samsung Galaxy Tab.

FlashLight.java:

package com.example.FlashLight; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class FlashLight extends Activity { 
    private final static String LOG_TAG = "FlashLight"; 

    private Button mOnBtn; 
    private Button mOffBtn; 

    private Camera mCamera; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mOnBtn = (Button) findViewById(R.id.on_btn); 
     mOnBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       processOnClick(); 
      } 
     }); 

     mOffBtn = (Button) findViewById(R.id.off_btn); 
     mOffBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       processOffClick(); 
      } 
     }); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     try{ 
      mCamera = Camera.open(); 
     } catch(Exception e){ 
      Log.e(LOG_TAG, "Impossible d'ouvrir la camera"); 
     } 
    } 

    @Override 
    protected void onPause() { 
     if(mCamera != null){ 
      mCamera.release(); 
      mCamera = null; 
     } 
     super.onPause(); 
    } 

    private void processOffClick(){ 
     if(mCamera != null){ 
      Parameters params = mCamera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_OFF); 
      mCamera.setParameters(params); 
     } 
    } 

    private void processOnClick(){ 
     if(mCamera != null){ 
      Parameters params = mCamera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
      mCamera.setParameters(params); 
     } 
    } 
} 

AndroidManifest.xml:

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".FlashLight" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" /> 
</manifest> 

la yout/main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <Button 
     android:id="@+id/on_btn" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Flash ON" /> 

    <Button 
     android:id="@+id/off_btn" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Flash OFF" /> 
</LinearLayout> 

Gracias!

+1

Además, eliminaría "flash" como una etiqueta ya que la confundiría con el entorno de tiempo de ejecución Flash. –

+0

Gracias willytate, reemplazo "flash" por "led" – Sly

+0

@TeddyBearFr He intentado con tu código en mi HTC Wildfire A3333, funciona bien con Flash Light encendido y apagado, pero el mismo código no funciona en Android Samsung Galaxy Ace s- 5830 móvil cualquier idea de hacer el derecho al trabajo en ambos dispositivos. – Herry

Respuesta

22

No está haciendo nada mal. De hecho, estás haciendo todo lo correcto. Te encuentras con un problema específico del dispositivo que es muy frecuente en el mundo de Android. He encontrado las siguientes pautas de comportamiento para FLASH_MODE_TORCH:

  • funciona bien en todos los casos
  • funciona bien, pero no con el enfoque automático en
  • no funciona en todos los

frustrante, getSupportedFlashModes() devolverá FLASH_MODE_TORCH en casi todos los dispositivos cuando solo un puñado lo soporte.

Además, algunas implementaciones de dispositivos oscilan los modos de flash admitidos. Si va por Camera.Parameters puede intentar configurar el modo de flash en FLASH_MODE_ON, FLASH_MODE_AUTO o FLASH_MODE_RED_EYE y ver si alguno de ellos funciona. Nota: este es un truco específico del dispositivo.

He enviado these types of bugs con Google con respecto a DroidX y Nexus S. Lo cerraron como un problema específico del dispositivo. Diría que debo informar esto a Samsung con la esperanza de una corrección de firmware o controlador, pero sus canales de soporte de Android do not exist.

+0

Tkanks Error 454 por su respuesta. getSupportedFlashModes() devuelve valores "on", "off", "auto" y "antorcha" en Galaxy Tab, pero ninguno de ellos funciona para habilitar el LED de la cámara. Descargo una aplicación gratuita del mercado Android llamada "Tiny Flashlight + LED" y lanzada por Nikolay Ananiev. ¡Funciona con un Galaxy Tab! Sin embargo, no sé cómo lo hizo ... – Sly

+0

A veces, establecer el parámetro directamente funcionará como un truco. Entonces en lugar de * params.setFlashMode (Parameters.FLASH_MODE_TORCH) * puede probar * params.set ("flash-mode", "linterna") * intente reemplazar "antorcha" con "on" o "auto" también. –

+1

TeddyBearFr: ¿descubrió si la sugerencia de params.set() funciona? Tengo una aplicación de cámara en la que un usuario ha informado sobre este problema exacto en una Galaxy Tab, pero no conozco ese dispositivo, por lo que no puedo probarlo. Gracias. – hrstrand

7

Me tomó un tiempo, pero creo que te falta un startPreview() allí.

Después de hacer su Camera.open() y después de establecer los parámetros, haga un mCamera.startPreview(). Eso debería hacer el truco.

+3

Jup, puedo confirmar esto. – nisc

2

Así es como lo hice funcionar.

if (Build.MODEL.equals("GT-P1000")) { 

      Log.d(FlashlightActivity.TAG, "This is Samsung Galaxy Tab."); 

      params.setFlashMode(Parameters.FLASH_MODE_ON); 
      camera.setParameters(params); 
      camera.startPreview(); 
      camera.autoFocus(new AutoFocusCallback() { 
       public void onAutoFocus(boolean success, Camera camera) { 
       } 
      }); 

      isLEDturnedOn = true; 
      Log.d(FlashlightActivity.TAG, "LED turned ON."); 

} 
2

Así es como enciendo y de la linterna en LG Nexus 4 y Samsung Galaxy Ace 2.

public void changeTorch() { 
      try { 
       camera = Camera.open(); 
       // try to open the camera to turn on the torch 
       Camera.Parameters param = camera.getParameters(); 
       param.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
       camera.setParameters(param); 
       camera.startPreview(); // needed for some devices 
       Log.v("BSW torch", "Torch ON"); 
      } catch (Exception e) { 
       // if open camera fails, try to release camera 
       Log.w("BSW torch", "Camera is being used trying to turn Torch OFF"); 
       try { 
        camera.release(); 
       } catch (Exception ex) { 
        Log.e("BSF torch", "Error releasing camera"); 
       } 
      } 
     } 
+0

Esto funciona en mi nexo 4 – hB0

Cuestiones relacionadas