Android 2.1 的 Camera.Parameters.FLASH_MODE_TORCH 替换

2024-05-20

我正在尝试编写一个需要 LED 闪光灯进入手电筒模式的应用程序。问题是,Android 2.1不支持这种模式,因此我还不能支持该平台。这不是问题,但我正在为我的未婚夫编写它,而她的 Epic 4G 目前只有 2.1。我发现一些代码示例使用了一些未记录的 API 调用,因此可以在 Motorola Droid 等设备上运行,但不能在 Epic 上运行。有人对在哪里寻找可以帮助我完成这项工作的代码有一些建议吗?


我发现手电筒模式在 2.1 上通常工作正常,但我在 Samsung Epic 上也遇到了同样的问题,并找到了解决办法。

查看在 Samsung Epic 上运行时 Camera.getParameters() 返回的参数,我注意到它声称支持的闪光灯模式是: flash-mode-values=off,on,auto;

torch-mode 未列出,这意味着它不受支持。

然而,我发现这个模型仍然会接受该模式并且会打开 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 和 Samsung Epic。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 2.1 的 Camera.Parameters.FLASH_MODE_TORCH 替换 的相关文章

随机推荐