在Droid X 2.3上,设置参数FLASH_MODE_TORCH无效。

4

我正在编写一个将闪光灯模式设置为手电筒的应用程序。我一直在我的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个回答

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接口可以完成此操作。 这里有一个示例。


这段代码在一些不支持手电筒功能的前置摄像头上会崩溃。它应该至少被try catch包围。 - Cynichniy Bandera

4
可能是Droid X不支持手电筒模式。尝试使用类似以下的方法:
        List<String> pList = camera.getParameters().getSupportedFlashModes();

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


         camera.setParameters(parameters);

2

请参考问题191453

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

0
我发现在Droid X上唯一有效的代码是Siddhpura Amit在这个答案Use camera flashlight in Android中部分展示的代码。他检查制造商并检查是否包含字符串“motorola”。如果是,他有特殊的代码可以打开或关闭相机闪光灯LED。我可以证实它确实有效,因为我有一台Motorola Droid X。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接