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

问题描述 投票:0回答:1

我正在开发一款适用于相机的应用,但我收到了错误消息。当相机处于活动状态时,相机会在手电筒打开或“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();
    }
android android-camera
1个回答
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方法,事情将是类似的。

© www.soinside.com 2019 - 2024. All rights reserved.