Implementation of Android 7.0 Flashlight Control

  • 2021-11-13 02:43:46
  • OfStack

Before AndroidN (7.0), your control of flashlight might be like this:


Camera camera = Camera.open();
if(open){ 
  Parameters mParameters = camera.getParameters(); 
  mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
  camera.setParameters(mParameters);  
} else { 
  Parameters mParameters = camera.getParameters(); 
  mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
  camera.setParameters(mParameters); 
} 
camera.release();

But after Android N (7.0) and beyond, you may find that it doesn't work, so you need to do this:

After Android (M) 6.0, Android introduced a new API, and the control of flash lamp was processed by CameraManager. First of all, briefly explain two classes:

(1) CameraManager. java:

Available via CameraManager manager = (CameraManager) getSystemService (Context.CAMERA_SERVICE); Obtain, communicate with the camera device through this class.

(2) CameraCharacteristics. java:

Given the specified camera device ID, relevant hardware information is queried through this class.

Flashlight operation


try {
  // Get CameraManager
  CameraManager mCameraManager = (CameraManager) MyApplication.getContext().getSystemService(Context.CAMERA_SERVICE);
  // Get all camera devices of the current mobile phone ID
  String[] ids = mCameraManager.getCameraIdList();
  for (String id : ids) {
    CameraCharacteristics c = mCameraManager.getCameraCharacteristics(id);
    // Query whether the camera component contains a flash 
    Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
    /*
    *  Gets the direction the camera faces 
    * CameraCharacteristics.LENS_FACING_FRONT  Front camera 
    * CameraCharacteristics.LENS_FACING_BACK  Back camera 
    * CameraCharacteristics.LENS_FACING_EXTERNAL  External camera 
    */
    Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
    if (flashAvailable != null && flashAvailable
        && lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
      // Turn on or off the flashlight 
      mCameraManager.setTorchMode(id, OPEN? true:false);
    }
  }

} catch (CameraAccessException e) {
  e.printStackTrace();
}

Related articles: