我正在尝试编写一个需要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.
希望这可以帮助.