安卓6.0以上的权限请求封装

 
  Android权限机制 
 
1.简介
Android6.0之后将权限分为普通权限和危险权限(特殊权限使用较少,在此不多做介绍)
普通权限指不会威胁到用户的安全和隐私的权限,这部分权限只需要在清单文件中申请,安装程序的时候,系统会自动帮我们进行授权.  危险权限指那些可能会涉及用户隐私或对系统安全造成影响。这些权限在6.0之后不仅要在清单文件中说明,在运行时也需要手动申请,用户同意之后方可使用。

2.手动在代码中申请的权限需要在配置文件中声明。下面的代码可以放在BaseActivity中,在后续使用时调用即可
 //申请的权限的集合
    private static final String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE
            , Manifest.permission.READ_PHONE_STATE
            , Manifest.permission.READ_EXTERNAL_STORAGE
            , Manifest.permission.CAMERA};

    /**
     * 申请权限
     */
    public void requestPermission() {
        ArrayList<String> pers = new ArrayList<>();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            for (int i = 0; i < mPermissionList.length; i++) {
                String per = mPermissionList[i];
                //如果该权限没有申请,将其加入到集合中
                if (checkSelfPermission(per) != PackageManager.PERMISSION_GRANTED) {
                    pers.add(per);
                }
            }
            if (pers.size() != 0) {
                String[] perPars = pers.toArray(new String[pers.size()]);
                //执行申请权限的方法,并将执行结果穿回到onRequestPermissionsResult方法中
                ActivityCompat.requestPermissions(this, perPars, 123);
            }
        }
    }

    /**
     * 请求权限方法的回调结果
     * @param requestCode
     * @param permissions
     * @param grantResults
     */
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (requestCode == 123) {
                //遍历集合
                for (int i = 0; i < grantResults.length; i++) {
                    //如果有权限没有被同意
                    if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                        //提示用户打开app所需权限,这里是封装的Toast方法,也可自行处理后续业务
                        SnackBarUtils.showToast(this, R.string.request_app_permission);
                        break;
                    }
                }
            }
        }
    }



 
  





猜你喜欢

转载自blog.csdn.net/m0_37919094/article/details/78722722