package com.hdl.photovoltaic.utils; import android.content.Context; import android.content.pm.FeatureInfo; import android.content.pm.PackageManager; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; import android.hardware.camera2.CameraManager; import android.os.Build; import android.hardware.Camera; import android.text.method.Touch; import java.util.Optional; public class FlashLightUtils { private CameraManager manager; private Camera mCamera = null; private Context context; private boolean status = false; // 记录手机状态 public FlashLightUtils(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); } this.context = context; } // 打开手电筒 public void open() { if (status) { //如果是打开状态,不需要打开 return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { try { manager.setTorchMode("0", true); } catch (CameraAccessException e) { e.printStackTrace(); } } else { PackageManager packageManager = context.getPackageManager(); FeatureInfo[] features = packageManager.getSystemAvailableFeatures(); for (FeatureInfo featureInfo : features) { // 判断设备是否支持闪光灯 if (PackageManager.FEATURE_CAMERA_FLASH.equals(featureInfo.name)) { if (null == mCamera) { mCamera = Camera.open(); } Camera.Parameters parameters = mCamera.getParameters(); parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); mCamera.setParameters(parameters); mCamera.startPreview(); } } } status = true; // 记录手电筒状态为打开 } // 关闭手电筒 public void close() { if (!status) // 如果是已经关闭的状态 不需要打开 { return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { try { manager.setTorchMode("0", false); } catch (CameraAccessException e) { e.printStackTrace(); } } else { if (mCamera != null) { mCamera.stopPreview(); mCamera.release(); mCamera = null; } } status = false; // 记录手电筒为关闭 } /** * 手电筒打开或者关闭 * * @param isOpen 打开(true)或者关闭(false) */ public void setOpenOrClose(boolean isOpen) { try { //获取当前手机所有摄像头设备ID String[] ids = manager.getCameraIdList(); for (String id : ids) { CameraCharacteristics c = manager.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) { //打开或关闭手电筒 manager.setTorchMode(id, isOpen); break; } } } catch (CameraAccessException e) { e.printStackTrace(); } } }