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();
}