1. 程式人生 > >關於Android 7.0 手電筒的控制

關於Android 7.0 手電筒的控制

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