Android 设置参数。闪光模式火炬不';t在Droid X 2.3上工作

Android 设置参数。闪光模式火炬不';t在Droid X 2.3上工作,android,camera,android-camera,flashlight,Android,Camera,Android Camera,Flashlight,我正在编写一个将flash模式设置为torch的应用程序。我一直在我的Droid X上测试应用程序,但LED灯不亮。我在一个机器人上试过,效果很好。我想不出是什么问题。这是我打开火炬模式的部分代码 Camera mCamera = Camera.open(); Camera.Parameters params = mCamera.getParameters(); if(params.getFlashMode() != null){ params.setFl

我正在编写一个将flash模式设置为torch的应用程序。我一直在我的Droid X上测试应用程序,但LED灯不亮。我在一个机器人上试过,效果很好。我想不出是什么问题。这是我打开火炬模式的部分代码

    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上工作得很好,难以置信,但在Droid X上却没有。是我在Droid X上运行它时遗漏了什么,还是可能是姜饼?Droid X正在运行姜饼,Droid Inclusible正在运行FroYo。

可能是Droid X不支持火炬模式。试着这样做:

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

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


         camera.setParameters(parameters);
List pList=camera.getParameters().getSupportedFlashModes();
if(pList.contains(Parameters.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接口来实现。
请看一个例子。

我发现在Droid X上唯一有效的是Siddhpura Amit在这个答案中部分页面下方给出的代码。他检查了制造商,看看里面是否有字符串“motorola”。如果有,他有特殊的代码可以打开或关闭闪光灯LED。我可以验证它是否工作,因为我有一个摩托罗拉Droid X。

请参阅:


这将使一些不支持火炬的前置摄像头崩溃。它至少应该被try-catch包围。
SurfaceTexture mDummy = new SurfaceTexture(1); // any int argument will do
camera.setPreviewTexture(mDummy);
camera.startPreview();