有些手机自带安全软件,每次点击需要摄像头的功能是都会弹出授权弹框,如果有些人不小心点击拒绝就会导致应用崩溃。那么如何在没有权限的使用崩溃点在Camera.open(); 如何做判断来获取Camera.open(),是否可用,也就是容错处理;其实这个问题是我们常常需要的提示:请看下面代码
其实我们只有自己利用好try_catch就能很好的捕获,到相机此时的状态;
下面是相机源码
/**
* Creates a new Camera object to access the first back-facing camera on the
* device. If the device does not have a back-facing camera, this returns
* null.
* @see #open(int)
*/
public static Camera open() {
int numberOfCameras = getNumberOfCameras();
CameraInfo cameraInfo = new CameraInfo();
for (int i = 0; i < numberOfCameras; i++) {
getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
return new Camera(i);
}
}
return null;
}
从上面可以看出我们打开相机的时候是有个空的;也就是说:创建一个新的相机对象访问的第一个背面相机上的装置。如果设备没有一个背面的摄像头,该返回null。
经过分析和我调试知道了手机自带安全软件禁用相机,不就是让相机没有嘛,也就是null;
因此我们要想提示是否手动关闭了相机,我们可以这这样做:
/**
* 检查相机权限,如果不能打开相机则抛出异常
*/
public static void checkCameraPermissions() throws IOException {
try {
Camera camera = Camera.open();
if (camera != null) {
camera.release();
camera = null;
}
} catch (Exception e) {
throw new IOException();
}
}
//界面上使用
try {
AndroidUtils.checkCameraPermissions();
} catch (IOException e) {
((PABaseActivity) getActivity()).toast("请检查下你是否禁用了照相权限");
return;
} finally {
}
是不是很简单,多看看系统源码还是有好出的。。。