系统相机调用的那些问题...

好吧,我承认我被相机坑了…Android辣么多机型都是什么鬼…呜呜

  1. 问题一
    需要调用系统相机,可是camer权限在Android6.0以后属于危险系列的,所以直接调用可能会有问题。所以调用之前需要先进行权限判断…

    调用的界面设计如下:这里写图片描述

    点击拍照的时候有的机型会提示无摄像头权限,有的机型不会提醒而直接崩掉,解决如下:
    A、调用的时候判断有无权限

 if (PackageManager.PERMISSION_GRANTED == getActivity().getPackageManager().checkPermission("android + ".permission.CAMERA", "cn.your.apppackagename")){
//拥有权限的处理
}else{
//没有拥有权限的处理
}

B、相机权限有了,但是系统会进行询问,询问的时候选择拒绝,依旧需要进行判断(方法是自己网上找的,经测试正确)

  /**
     * 当前摄像头能否被使用
     *
     * @return
     */
    public boolean isCameraCanUse() {
        boolean canUse = true;
        Camera mCamera = null;
        try {
            mCamera = Camera.open(0);
            mCamera.setDisplayOrientation(90);
        } catch (Exception e) {
            canUse = false;
        }
        if (canUse) {
            mCamera.release();
            mCamera = null;
        }
        return canUse;
    }   

为了给用户更好的体验,在检查无自己需要的权限的时候,会弹出框提示“去设置权限”,代码如下:

AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                    builder.setTitle(R.string.app_name).setMessage("当前无摄像头权限").setPositiveButton("去设置", new
                            DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 跳转到系统的网络设置界面
                            Intent intent = new Intent();
                            intent.setAction("android.intent.action.MAIN");
                            intent.setClassName("com.android.settings", "com.android.settings.ManageApplications");
                            mActivity.startActivity(intent);
                        }
                    }).setNegativeButton("暂不设置", null).show();

不管是 相机 还是 相册 都需要进行权限的判断,有些机型可能没有读写权限,仍旧需要自己判断。完整的代码判断如下:

 //拍照
        mTvTakephoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (PackageManager.PERMISSION_GRANTED == getActivity().getPackageManager().checkPermission("android"
                        + ".permission.CAMERA", "cn.your.apppackagename")) {
                    if (isCameraCanUse()) {
                        //调用相机拍照
                        Intent camareIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        camareIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
                                .getExternalStorageDirectory(), "head.jpg")));
                        startActivityForResult(camareIntent, TAKEPHOTOCODE);
                    } else {
                        Toast.makeText(mActivity, "相机权限被拒绝", Toast.LENGTH_SHORT).show();
                    }

                } else {

                    AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                    builder.setTitle(R.string.app_name).setMessage("当前无摄像头权限").setPositiveButton("去设置", new
                            DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 跳转到系统的网络设置界面
                            Intent intent = new Intent();
                            intent.setAction("android.intent.action.MAIN");
                            intent.setClassName("com.android.settings", "com.android.settings.ManageApplications");
                            mActivity.startActivity(intent);
                        }
                    }).setNegativeButton("暂不设置", null).show();
                }
            }
        });


 /**
     * 当前摄像头能否被使用
     *
     * @return
     */
    public boolean isCameraCanUse() {
        boolean canUse = true;
        Camera mCamera = null;
        try {
            mCamera = Camera.open(0);
            mCamera.setDisplayOrientation(90);
        } catch (Exception e) {
            canUse = false;
        }
        if (canUse) {
            mCamera.release();
            mCamera = null;
        }
        return canUse;
    }   

自己遇到的时候有点无语,发现总结出来竟然就那么一点点代码,额,离大神辣么辣么远

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值