2010-10-07 20 views
7

我想寫一個需要LED閃光燈進入火炬模式的應用程序。問題是,Android 2.1不支持這種模式,因此我現在還不能支持這個平臺。這不是一個問題,但我寫給我的未婚夫,她的Epic 4G現在只有2.1。我發現一些代碼示例使用一些未公開的API調用,因此適用於Motorola Droid等,但它們不適用於Epic。有沒有人有一些建議,在哪裏尋找代碼,應該幫助我得到這個工作?Camera.Parameters.FLASH_MODE_TORCH替換爲Android 2.1

回答

9

我發現火炬模式一般在2.1上工作正常,但我有與三星史詩一樣的問題,並發現它周圍的黑客。在三星Epic上運行時,我注意到它聲稱支持的閃存模式是:flash-mode-values = off,on,auto;

火炬模式未列出,意味着它不被支持。

但是,我發現這個模型仍然會接受該模式,並且會打開LED!壞消息是,當稍後將閃光燈模式設置回自動或離開時,LED仍然亮着!它不會關閉,直到你調用Camera.release()。

我想這就是爲什麼三星不把它列入支持的列表!?!

所以......我用一個CameraHelper類是切換火炬的方法...

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

使用該叫它如下活動...

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

的使它在ReleaseCameraResources()中工作的魔法是它調用Camera.release()....然後我必須重新初始化我所有的三星設備的相機內容。

不漂亮,但似乎是爲很多用戶工作。

請注意,我確實有一個火炬模式的報告,在Nexus上的這段代碼中根本不起作用,但能夠深入研究。它絕對適用於HTC EVO和三星史詩。

希望這會有所幫助。

+0

不知道如果我做錯了什麼,但我得到一個強制關閉時,我嘗試調試它。 – smccloud 2010-10-20 15:37:00

+2

沒有冒犯,但在手機制造商的基礎功能不是理想的方式去。誰知道三星手機在半年或更長時間內的功能? – ajacian81 2011-08-21 21:03:22

+0

我已經使用你的代碼。但相機閃光燈在幾秒鐘後自動關閉。我測試了三星galaxy ace 2.2.1中的代碼..可能是什麼原因呢? – 2011-09-09 12:12:49

2

在我的情況下三星設備,我需要對焦模式設定爲無窮大,並開始工作

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

非常感謝提示:)我有一個問題,閃光燈不工作在與焦點模式「自動」的Galaxy S 5,將其設置爲「無限」做的訣竅:P – Kervala 2015-06-10 19:00:53