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