Android 2.1的Camera.Parameters.FLASH_MODE_TORCH替换

我正在尝试编写一个需要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();
    

要回复问题请先登录注册