检测是否开启了相机和录音权限 camera一般用于预览和拍摄视频。camera结合TextureView或surfaceView一起使用
开启camera
public void openCamera() {
try {
mCamera = Camera.open();
} catch (Exception e) {
mCamera = getCameraId();
}
}
/**
* 获取cameraId
***/
private Camera getCameraId() {
Camera mCamera = null;
try {
Camera.CameraInfo info = new Camera.CameraInfo();
CameraManager mManager = (CameraManager) getContext().getSystemService(Context.CAMERA_SERVICE);
String[] ids = mManager.getCameraIdList();
int cameraId = 0;
if (ids != null) {
for (int i = 0; i < ids.length; i++) {
try {
cameraId = Integer.parseInt(ids[i]);
mCamera = Camera.open(cameraId);
} catch (Exception e) {
e.printStackTrace();
mCamera = null;
continue;
}
if (mCamera != null) {
Camera.getCameraInfo(cameraId, info);
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return mCamera;
}
切换摄像头
// 0表示后置,1表示前置
private int cameraPosition = 1;
/***
* 切换摄像头
*/
public void switchCamera() {
try {
int cameraCount = 0;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for (int i = 0; i < cameraCount; i++) {
Camera.getCameraInfo(i, cameraInfo);
if (cameraPosition == 1) {
//现在为后置,改为前置
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
stopPreview();
mCamera = Camera.open(i);
cameraPosition = 0;
break;
}
} else {
//现在为前置,改为后置
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
stopPreview();
mCamera = Camera.open(i);
cameraPosition = 1;
break;
}
}
}
//需要重新初始化camera
....
} catch (Exception e) {
e.printStackTrace();
}
}
释放camera
public void stopPreview() {
if (mCamera != null) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}