關於Android 7.0 手電筒的控制
阿新 • • 發佈:2019-02-15
在AndroidN(7.0)前你對手電筒的控制也許是這樣的:
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();
但在Android N(7.0)及以後,也許你就發現不靈了,那你就需要這樣做了:
在Android(M)6.0 後,Android引入了新的API,對閃光燈的控制通過CameraManager處理;首先簡單的對兩個類進行說明:
(1)CameraManager.java:
可通過CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);獲得,通過此類與相機裝置進行通訊。
(2)CameraCharacteristics.java:
給定指定的相機裝置ID,通過此類查詢相關硬體資訊。
手電筒操作
try {
//獲取CameraManager
CameraManager mCameraManager = (CameraManager) MyApplication.getContext().getSystemService(Context.CAMERA_SERVICE);
//獲取當前手機所有攝像頭裝置ID
String[] ids = mCameraManager.getCameraIdList();
for (String id : ids) {
CameraCharacteristics c = mCameraManager.getCameraCharacteristics(id);
//查詢該攝像頭元件是否包含閃光燈
Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
/*
* 獲取相機面對的方向
* CameraCharacteristics.LENS_FACING_FRONT 前置攝像頭
* CameraCharacteristics.LENS_FACING_BACK 後只攝像頭
* CameraCharacteristics.LENS_FACING_EXTERNAL 外部的攝像頭
*/
Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
if (flashAvailable != null && flashAvailable
&& lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
//開啟或關閉手電筒
mCameraManager.setTorchMode(id, OPEN? true:false);
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}