【android 6.0 动态申请权限的基本方法和框架使用】

来源:互联网 发布:我是特种兵 知乎 编辑:程序博客网 时间:2024/06/03 16:53

基本的使用:

先提供一下goog官方的学习文档:

权限最佳做法

在运行时请求权限

 int selfPermission = ContextCompat.checkSelfPermission(Main2Activity.this, Manifest.permission.CALL_PHONE);        if (selfPermission != PackageManager.PERMISSION_GRANTED) {            /**             * 判断该权限请求是否已经被 Denied(拒绝)过。  返回:true 说明被拒绝过 ; false 说明没有拒绝过             *             * 注意:             * 如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don't ask again 选项,此方法将返回 false。             * 如果设备规范禁止应用具有该权限,此方法也会返回 false。             */            if (ActivityCompat.shouldShowRequestPermissionRationale(Main2Activity.this, Manifest.permission.CALL_PHONE)) {                Log.i(TAG, "onViewClicked: 该权限请求已经被 Denied(拒绝)过。");                //弹出对话框,告诉用户申请此权限的理由,然后再次请求该权限。                //ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);            } else {                Log.i(TAG, "onViewClicked: 该权限请未被denied过");                ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);            }        } else {            openAlbum();//打开相册        }

发起请求的回调:

 @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        Log.i(TAG, "onRequestPermissionsResult: requestCode=" + requestCode);        switch (requestCode) {            case 1:                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {                    openAlbum();                } else {                    Toast.makeText(this, "you denied the permission", Toast.LENGTH_SHORT).show();                    Log.i(TAG, "onRequestPermissionsResult: you denied the permission");                }                break;            default:                break;        }    }

一些框架的封装:

HiPermission 的简单使用:更多查看参考博客相关文章。

该方法 申请几乎必要的三个权限。照相,定位,sd卡写

 //CAMERA, ACCESS_FINE_LOCATION and WRITE_EXTERNAL_STORAGE        HiPermission.create(this)                .animStyle(R.style.PermissionAnimModal)                //.style(R.style.PermissionDefaultGreenStyle)                .checkMutiPermission(new PermissionCallback() {                    @Override                    public void onClose() {                        Log.i(TAG, "onClose They cancelled our request"); //用户关闭权限申请                    }                    @Override                    public void onFinish() {                        Log.i(TAG, "onFinish: All permissions requested completed");  //所有权限申请完成                    }                    @Override                    public void onDeny(String permission, int position) {                        Log.i(TAG, "onDeny");//在否认                    }                    @Override                    public void onGuarantee(String permission, int position) {                        Log.i(TAG, "onGuarantee");//用户允许后,会回调该函数  //在此可以做 事件处理啦,因为用户已经同意了,此时已经拿到所需权限啦。                    }                });

参考博客:

一行代码搞定漂亮的Android6.0权限申请界面
HiPermission

AndPermission

这个关注度比较高:star 4K多 也可作为备用
PermissionsDispatcher