我正在编写一个将闪光模式设置为火炬的应用程序。我一直在我的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。
答案 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.