1儡循、開啟關(guān)閉閃光燈
/**
* 通過設(shè)置Camera打開閃光燈
*/
public synchronized void turnLightOn() {
if (camera == null) {
return;
}
parameters = camera.getParameters();
if (parameters == null) {
return;
}
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
}
/**
* 通過設(shè)置Camera關(guān)閉閃光燈
*/
public synchronized void turnLightOff() {
if (camera == null) {
return;
}
parameters = camera.getParameters();
if (parameters == null) {
return;
}
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(parameters);
}
2、切換前后攝像頭
private int mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
//現(xiàn)在是后置征冷,變更為前置
if (camera != null && mCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) {
closeCamera();
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);//打開當前選中的攝像頭
try {
amera.setPreviewDisplay(surfaceHolder);//通過surfaceview顯示取景畫面
camera.autoFocus(CameraManager.get().getAutoFocusCallback());
camera.setDisplayOrientation(getPreviewDegree());
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();//開始預(yù)覽
mCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT;
} else if (mCameraId == Camera.CameraInfo.CAMERA_FACING_FRONT) {
closeCamera();
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);//打開當前選中的攝像頭
try {
camera.setPreviewDisplay(surfaceHolder);//通過surfaceview顯示取景畫面
camera.autoFocus(CameraManager.get().getAutoFocusCallback());
camera.setDisplayOrientation(getPreviewDegree());
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();//開始預(yù)覽
mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
}
public void closeCamera() {
if (camera != null) {
camera.stopPreview();//停掉原來攝像頭的預(yù)覽
camera.release();//釋放資源
camera = null;//取消原來攝像頭
CameraManager.get().getPreviewCallback().setHandler(null, 0);
CameraManager.get().getAutoFocusCallback().setHandler(null, 0);
CameraManager.get().setPreviewing(false);
}
}
// 提供一個靜態(tài)方法择膝,用于根據(jù)手機方向獲得相機預(yù)覽畫面旋轉(zhuǎn)的角度
private int getPreviewDegree() {
// 獲得手機的方向
int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation();
int degree = 0;
// 根據(jù)手機的方向計算相機預(yù)覽畫面應(yīng)該選擇的角度
switch (rotation) {
case Surface.ROTATION_0:
degree = 90;
break;
case Surface.ROTATION_90:
degree = 0;
break;
case Surface.ROTATION_180:
degree = 270;
break;
case Surface.ROTATION_270:
degree = 180;
break;
}
return degree;
}