2011-02-16 296 views
14

我正面臨三星Galaxy Tab的問題。我想用相機閃光燈作爲手電筒。如何在三星Galaxy Tab上使用相機閃光燈/ led作爲手電筒?

有誰知道如何啓用它?

特此通過一個代碼來啓用/禁用HTC Desire上的相機閃光燈,但在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> 

拉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> 

謝謝!

+1

此外,我會將「flash」作爲標記移除,因爲它會將Flash與運行時環境Flash混淆。 – 2011-02-16 14:20:33

+0

感謝willytate,我用「led」代替「閃光燈」 – Sly 2011-02-16 14:57:10

+0

@TeddyBearFr我已經嘗試在我的HTC WildFire A3333中使用你的代碼,它可以正常使用閃光燈打開和關閉,但是相同的代碼在Android中不起作用Samsung Galaxy Ace s- 5830移動任何想法做適合在這兩種設備上工作。 – Herry 2011-08-24 09:46:46

回答

22

你沒有做錯什麼。事實上,你做的一切都是正確的。您遇到了在Android世界非常流行的設備特定問題。我發現以下行爲模式爲FLASH_MODE_TORCH:在所有情況下

  • 工作正常,但不與
  • 自動對焦

    • 工作正常,完全不

    工作的無奈,只有少數人支持它時,getSupportedFlashModes()將在幾乎所有設備上返回FLASH_MODE_TORCH。

    此外,一些設備實現調整支持的閃光模式。如果你通過Camera.Parameters,你可以嘗試將閃存模式設置爲FLASH_MODE_ON,FLASH_MODE_AUTO或FLASH_MODE_RED_EYE,看看它們是否有效。注 - 這是一個特定於設備的黑客攻擊。

    我已經向Google提交了關於DroidX和Nexus S的these types of bugs。他們將其作爲設備特定問題關閉。我會說這個報告給三星,希望得到驅動程序或固件修復,但他們的Android支持渠道do not exist

  • +0

    Tkanks錯誤454爲您的答案。 getSupportedFlashModes()會在Galaxy Tab上返回「on」,「off」,「auto」和「torch」值,但它們都不能用於啓用攝像頭指示燈。 我從Android市場下載了一款名爲「Tiny Flashlight + LED」並由Nikolay Ananiev發佈的免費應用程序。它適用於Galaxy Tab!但是,我不知道他是怎麼做的...... – Sly 2011-02-16 15:34:36

    7

    花了我一段時間,但我認爲你錯過了startPreview()那裏。

    在您完成Camera.open()之後,在設置了參數後,請執行mCamera.startPreview()。這應該夠了吧。

    2

    這就是我的工作原理。

    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

    這就是我在LG Nexus 4和三星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"); 
           } 
          } 
         }