相机权限

有些手机自带安全软件,每次点击需要摄像头的功能是都会弹出授权弹框,如果有些人不小心点击拒绝就会导致应用崩溃。那么如何在没有权限的使用崩溃点在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 {

                        }

是不是很简单,多看看系统源码还是有好出的。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值