[英]Camera.Parameters.FLASH_MODE_TORCH replacement for Android 2.1
我正在嘗試編寫一個需要LED閃光燈進入火炬模式的應用程序。 問題是,Android 2.1不支持此模式,因此我無法支持該平台。 這不是問題,但是我正在為我的未婚夫寫它,她的Epic 4G現在只有2.1。 我找到了一些使用一些未記錄的API調用的代碼示例,因此可以在Motorola Droid等上工作,但它們不適用於Epic。 有沒有人有什么建議可以幫助我找到合適的代碼?
我發現火炬模式通常在2.1上正常工作但我遇到了與三星史詩相同的問題,並發現了它周圍的黑客。
看看在三星Epic上運行時Camera.getParameters()返回的參數,我注意到它聲稱支持的閃存模式是: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 one上完全無法使用此代碼,但已經能夠深入研究它。 它肯定適用於HTC EVO和三星Epic。
希望這可以幫助。
在我的三星設備的情況下,我需要將焦點模式設置為無窮大,它開始工作
params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY);
mCamera.setParameters(params);
mCamera.startPreview();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.