1. 僅開啟手電筒
單純的開啟手電筒我們可以使用CameraManager的.setTorchMode()方法。
cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)獲取該相機特征是否可獲取閃光燈。
CameraManager cameraManager= (CameraManager) getSystemService(CAMERA_SERVICE);
String cameraIdList[]=cameraManager.getCameraIdList();
String cameraId = null;
for(int i=0;i<cameraIdList.length;i++){CameraCharacteristics cameraCharacteristics=cameraManager.getCameraCharacteristics(cameraIdList[i]);//可獲取閃光燈&&朝向為后置if(cameraCharacteristics.get(CameraCharacteristics.FLASH_INFO_AVAILABLE)&&cameraCharacteristics.get(CameraCharacteristics.LENS_FACING)==CameraCharacteristics.LENS_FACING_BACK){cameraId=cameraIdList[i];break;}
}
//打開手電筒
cameraManager.setTorchMode(cameraId,true);
//關閉手電筒
cameraManager.setTorchMode(cameraId,false);
2. Camer2開啟閃光燈
在Camera2中,我們一般在預覽的捕獲請求中設置開啟或關閉閃光燈,然后向捕獲通道設置新的捕獲請求。
開啟閃光燈:
captureRequestBuilder .set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
關閉閃光燈:
captureRequestBuilder .set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
Button torch = findViewById(R.id.torch);
torch.setOnClickListener(new View.OnClickListener() {int i = 0;public void onClick(View view) {if (i == 0) {CaptureRequest.Builder captureRequestBuilder_preview = myCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);//設置開啟閃光燈captureRequestBuilder_preview.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);captureRequestBuilder_preview.addTarget(surface_surfaceView);//通道設置新循環捕獲請求myCameraCaptureSession.setRepeatingRequest(captureRequestBuilder_preview.build(),null,null);i=1;} else if (i==1) {CaptureRequest.Builder captureRequestBuilder_preview= myCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);//設置關閉閃光燈captureRequestBuilder_preview.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);captureRequestBuilder_preview.addTarget(surface_surfaceView);//通道設置新循環捕獲請求myCameraCaptureSession.setRepeatingRequest(captureRequestBuilder_preview.build(),null,null);i=0;}}
});
3. ZXing開啟手電筒
掃碼時經常需要使用手電筒,但是因為ZXing已經啟動了一個相機所以無法使用CameraManager來開啟手電筒有捕獲通道所以也不能使用設置捕獲請求開啟手電筒。
但ZXing中的DecoratedBarcodeView控件類(即com.journeyapps.barcodescanner.DecoratedBarcodeView控件)提供了啟動和關閉手電筒的方法。可以在自定義的Activity中通過DecoratedBarcodeView開關手電筒。
啟動手電筒:.setTorchOn()
關閉手電筒:.setTorchOff()
可以在自定義Activity的onCreate()中使用這些方法。
Button torchButton=findViewById(R.id.torchButton);
torchButton.setOnClickListener(new View.OnClickListener() {int i=0;public void onClick(View view) {if(i==0){//啟動手電筒barcodeScannerView.setTorchOn();i=1;} else if (i==1) {//關閉手電筒barcodeScannerView.setTorchOff();i=0;}}});