美文网首页
Android动态权限

Android动态权限

作者: SeekLife0 | 来源:发表于2022-08-17 10:58 被阅读0次

参考:
1、https://blog.csdn.net/weixin_56291477/article/details/122613092
2、http://t.zoukankan.com/bimingcong-p-10328235.html

步骤1:定义申请权限的列表

    // 要申请的权限
    private static String[] permissions = new String[]{
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE
    };

步骤2:进行权限申请,此时出现弹窗用户是否同意获取,未同意则会弹窗警告需要用户手动设置权限。

    private void requestPermiision(){
            int i = ContextCompat.checkSelfPermission(this.getApplicationContext(), permissions[0]);
            int j = ContextCompat.checkSelfPermission(this.getApplicationContext(), permissions[1]);
            if (i != PackageManager.PERMISSION_GRANTED || j != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, permissions, 321);
                if(Utils.isHarmonyOs()){ //判断是否是鸿蒙系统,权限弹窗有些不一样

                }else{
                    if(ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0]) && ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[1])){

                    }else{
                    }
                }
            }else{
                //自己的操作
                requestCoverImg();
            }
    }

步骤3:获取权限的回调

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        ArrayList<String> banList = new ArrayList<>();//禁止列表
        if (requestCode == 321) {
            int i = 0;
            for(String a : permissions){
                if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                    banList.add(a);
                } else {

                }
                i++;
            }
            //优先对禁止列表进行判断
            if(banList.size()>0){//告知该权限作用,要求手动授予权限
                new AlertDialog.Builder(mActivity)
                        .setTitle("警告")
                        .setMessage("需要读写手机存储权限才可以正常使用该功能,您已拒绝获得该权限。\n如果需要重新授权,您可以点击“允许”按钮进入系统设置进行授权")
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        }).setPositiveButton("允许", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        XXPermissions.startPermissionActivity(mActivity);
                    }
                }).show();
        }
    }
    /**
     * 是否是鸿蒙系统
     * */
    public static boolean isHarmonyOs(){
        try {
            Class<?> buildExClass = Class.forName("com.huawei.system.BuildEx");
            Object osBrand = buildExClass.getMethod("getOsBrand").invoke(buildExClass);
            return "harmony".equalsIgnoreCase(osBrand.toString());
        }catch (Throwable e){
            return false;
        }
    }

相关文章

网友评论

      本文标题:Android动态权限

      本文链接:https://www.haomeiwen.com/subject/blejgrtx.html