androidandroid-cameraflashlight

How to keep the flashlight on (programmatically) while the camera preview is ON


So for my Android app, I have created a SurfaceView and assigned it as camera preview and start camera preview using the necessary API's. But now I want to turn the Flashlight ON (kind of act like a Torch) while the preview is working.

Please note that I have seen tons of examples online on how to turn flashlight on and it works as long as I don't call the open camera API. Below is the code -

try
{
    CameraManager cameraManager = (CameraManager)context.GetSystemService(Context.CameraService);
    if (cameraManager != null)
    {
        //for the sake of brevity, hardcoded the camera id. 0 is mostly back camera
        cameraManager.SetTorchMode(0, true); 
    }
}
catch (CameraAccessException e)
{
   LogUtil.Error("CameraInput", e.ToString());
} 

Please note I am testing on Android N and hence the above code works flawlessly. But as soon as I call below line of code, the flash turns off.

Camera camera = Camera.Open(0);
// ...... some code  ....//
camera.StartPreview();

When the above 2 lines execute, the flash goes off. Is this a know behaviour like where camera takes exclusive lock over flash hardware and resets it's value to default.

I tried reversing the above code i.e calling the Camera Open API being called first and then setting the flash. On that I get CameraAccessException , camera already in use.

What am i missing ?


Solution

  • Try this while previewing on SurfaceView

    params = camera.getParameters();
    params.setFlashMode(Parameters.FLASH_MODE_ON);
    camera.setParameters(params);
    

    Remember that If you want to use it as flashlight you can do:

    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
    

    If not, to turn flash on which will come out when you take the picture, you use:

    parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
    

    Happy Coding!