Android:相机在闪光灯打开时冻结

时间:2017-12-21 07:05:18

标签: android android-camera

我正在开发一款适用于相机的应用,但我收到了错误消息。 当相机处于活动状态时,相机会在手电筒打开时冻结或错误" E /相机:错误2" 。非常感谢。

 public void FlashOn()
    {
        cam = Camera.open();
        Camera.Parameters params = cam.getParameters();

        if (params.getFlashMode().equals(Camera.Parameters.FLASH_MODE_ON)) 
        {                            
           params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
        } 
        else 
        {
           params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
        }
        cam.setParameters(params);
        cam.startPreview();
    }

   public void FlashOff()
   {
       Camera.Parameters params = cam.getParameters();
       if (params.getFlashMode().equals(Camera.Parameters.FLASH_MODE_ON))
       {
          params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
       }
       else
       {
          params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
       }
          cam.stopPreview();
          cam.release();
    }

1 个答案:

答案 0 :(得分:0)

我不认为您必须再次使用startPreview才能启用闪存。在一个较旧的项目中,我做了类似这样的事情来启用/禁用flash:

Camera.Parameters params = camera.getParameters();
if (params.getFlashMode().equals(Camera.Parameters.FLASH_MODE_ON)) {
    params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
} else {
    params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
}
camera.setParameters(params);

此外,您可能希望使用AsyncTask打开/关闭相机,因为它是一个UI阻止操作。

更新:这是您的方法看起来的方式

public void FlashOn() {
    Camera.Parameters params = cam.getParameters();
    params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
    cam.setParameters(params);
}

对于FlashOff方法,事情会类似。