今天来整理一下获取动态权限的代码。

首先拿到我们想要获取的权限,如果有多个我们在判断的时候  ||  就可以了,只要有一个没有,我们就去申请权限。

我这里就先只申请一个。

下面的就是检查权限的方法。

PackageManager pkgManager = getPackageManager();
boolean readPhonePermission =
        pkgManager.checkPermission(Manifest.permission.READ_PHONE_STATE, getPackageName()) == PackageManager.PERMISSION_GRANTED;
if (  !readPhonePermission) {
//没有权限
    requestPermission();
}else{
    //有权限了
    intViewData();
}

有权限的话,你就做你改做的事就好了,没有权限的时候,去申请。

数组里面就是你要申请的权限,我这里就申请一个,多个的话就逗号隔开就好了。100是权限的回调。

//申请权限
private void requestPermission() {
    ActivityCompat.requestPermissions(this, new String[]{
                    Manifest.permission.READ_PHONE_STATE
            },
            100);
}

权限回调的话,我做了一个判断,判断我刚才申请的权限是否给了,如果有了,就做改做的事了,没有的话,我是做了弹框告诉他需要申请权限,取消的话就退出应用,确定的话就再次走一遍检查权限的代码就好了。

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    // 未同意的情况
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {
        // 给用于予以权限解释, 对于已经拒绝过的情况,先提示申请理由,再进行申请
        CommonDialog commonDialog = new CommonDialog(this);
        commonDialog.setTitle("权限管理")
                .setMessage("您需要打开权限")
                .setLeftButton("取消")
                .setRightButton("申请")
                .show();
        commonDialog.setOnClickBottomListener(new CommonDialog.OnClickBottomListener() {
            @Override
            public void onPositiveClick() {
                commonDialog.dismiss();
//这个方法就是申请权限的方法
                checkPermission();
            }

            @Override
            public void onNegtiveClick() {
                Toast.makeText(FramApplication.getContext(), "请打开权限", Toast.LENGTH_SHORT).show();
                commonDialog.dismiss();
                System.exit(0);
            }

            @Override
            public void onCloseClick() {
                Toast.makeText(FramApplication.getContext(), "请打开权限", Toast.LENGTH_SHORT).show();
                commonDialog.dismiss();
                System.exit(0);
            }
        });

        return;
    }else{
//有权限了
        intViewData();
    }
}

好了,动态申请权限就做好了,不过需要注意的就是

Android 动态申请权限

你的权限必须在application上面,我测试的时候发现写在下面调不到权限的!!!

相关文章: