import android.content.Context;
import android.content.Intent;
import android.hardware.Camera;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class EnterActivity extends AppCompatActivity implements View.OnClickListener
{
//摄像头管理者对象,用于7.0之后控制闪光灯
private CameraManager mCameraManager;
String cameraId;
boolean isTouch;
//摄像头实例 只能获取一次,否则崩溃,用于7.0之前控制闪关灯
Camera camera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manually_enter);
//初始化 cameraManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
initCameraManager();
}
}
@RequiresApi(Build.VERSION_CODES.M)
private void initCameraManager(){
mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
//获取当前手机所有摄像头设备ID
String[] ids;
try {
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) {
//获取到可用背面摄像头对应的ID
cameraId = id;
break;
}
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
//7.0之前控制方法
public void setCameraFlashlight(boolean open) {
if (camera==null) {
camera = Camera.open();
}
Camera.Parameters mParameters = camera.getParameters();
if(open){
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(mParameters);
}else {
mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(mParameters);
}
}
//7.0前后进行分别方法调用
@Override
public void onClick(View view) {
if (view.getId() == R.id.tv_flashlight){
Log.e("===========","======摄像头ID====="+cameraId);
isTouch = !isTouch;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (cameraId!=null) {
try {
//7.0之后控制闪光灯方法
mCameraManager.setTorchMode(cameraId,isTouch);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}else {
Toast.makeText(this, "Can't Open The Flash Light", Toast.LENGTH_SHORT).show();
}
}else {
setCameraFlashlight(isTouch);
}
}else{
finish();
}
}
@Override
public void finish() {
super.finish();
if (camera!=null){
camera.release();
}
if (mCameraManager!=null){
mCameraManager = null;
}
}
}