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 上运行,或者它可能是姜饼的东西?Droid X 运行 Gingerbread,Droid Incredible 运行 FroYo。

4

4 回答 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 接口来完成。请参阅此处的示例。

于 2012-01-17T20:00:10.640 回答
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);
于 2011-08-22T10:14:18.357 回答
2

请参阅问题 191453

SurfaceTexture mDummy = new SurfaceTexture(1); // any int argument will do
camera.setPreviewTexture(mDummy);
camera.startPreview();
于 2017-04-01T13:53:21.010 回答
0

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

于 2013-05-31T13:51:35.753 回答