设置Parameters.FLASH_MODE_TORCH在Droid X 2.3上不起作用

时间:2011-07-30 04:03:00

标签: android camera android-camera flashlight

我正在编写一个将闪光模式设置为火炬的应用程序。我一直在我的Droid X上测试应用程序,并且LED灯没有亮起。我在Droid Incredible上试过它并且工作正常。我无法弄清楚问题是什么。这是我打开火炬模式的代码的一部分。

    Camera mCamera = Camera.open();
    Camera.Parameters params = mCamera.getParameters();
    if(params.getFlashMode() != null){
        params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    }
    mCamera.setParameters(params);

我添加了mCamera.startPreview();因为我读过这应该有所作为,但事实并非如此。我还列出了可用的闪光模式并将它们显示在屏幕上,以确保我的Droid X确实具有火炬模式,并且它在列表中。我甚至用我在网上找到的代码创建了一个新的应用程序,用一个按钮打开和关闭LED闪光灯。再一次,它在Droid Incredible上工作得很好,但不是Droid X.我有什么东西可以让它在Droid X上运行,或者它可能是Gingerbread的东西吗? Droid X正在运行Gingerbread,而Droid Incredible正在运行FroYo。

4 个答案:

答案 0 :(得分:6)

设置FLASH_MODE_TORCH时有很多怪癖。

通常你需要开始相机预览:

Camera mCamera = Camera.open();
mCamera.startPreview();
Camera.Parameters params = mCamera.getParameters();
if(params.getFlashMode() != null){
    params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
}
mCamera.setParameters(params);

这可能会在某些手机上解决,其他手机也需要将预览绘制到SurfaceView。这可以通过在您的活动中实现SurfaceHolder.Callback接口来完成。 查看示例here

答案 1 :(得分:4)

可能是Droid X不支持Torch模式。尝试这样的事情:

        List<String> pList = camera.getParameters().getSupportedFlashModes();

        if (pList.contains(Parameters.FLASH_MODE_TORCH))
            parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);


         camera.setParameters(parameters);

答案 2 :(得分:2)

请参阅Issue 191453

SurfaceTexture mDummy = new SurfaceTexture(1); // any int argument will do
camera.setPreviewTexture(mDummy);
camera.startPreview();

答案 3 :(得分:0)

我发现在Droid X上工作的唯一东西是Siddhpura Amit在这个答案Use camera flashlight in Android的页面下方提供的代码。他检查制造商并检查它是否包含字符串“motorola”。如果是这样,他有特殊的代码可以打开或关闭相机闪光灯LED。我可以验证它确实有效,因为我有摩托罗拉Droid X.