Android中动态权限的申请

之前的博客中,我有讲过如何封装一个动态权限的基类。但可能很多读者还是不清楚怎么去申请动态权限。正好看书看到这里了,我也总结一下。

申请权限

public static boolean checkPermission(Activity act,String permission,int requestCode){
    boolean result = true;
    //只对Android 6.0及以上系统进行校验
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        //检查当前APP是否开启了名称为permission
        int check = ContextCompat.checkSelfPermission(act,permission);
        if (check!= PackageManager.PERMISSION_GRANTED){
            //未开启该权限,则请求系统弹窗,好让用户选择是否立即开启权限
            ActivityCompat.requestPermissions(act,new String[]{permission},requestCode);
            result = false;
        }
    }
    return result;
}

权限申请后的回调

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == mRequestCode){
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //已授权,则进行后续的正常逻辑处理
                ToastUtil.toastWord(this,"授权了");
            }else{
                //未授权,则提示用户可能导致的问题
                ToastUtil.toastWord(this,"没授权");
            }
        }
    }

最后就是我们调用检查权限的方法,并传入识别码mRequestCode

checkPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE,mRequestCode);

其中识别码

private final int mRequestCode = 1001;//定义的请求权限识别

这里说明一下,当我们判断用户没有获取过该权限的时候,我们会进行请求。这时手机会弹框,询问用户是否进行授权。如果用户授权了,我们进入回调提示授权成功,这个没什么说的。如果用户进入禁止,我们进入回调的未授权判断,用户再次申请的时候依然弹框,这也是可以的。

但是当用户勾选了禁止后不再询问,再点击禁止。那么问题就大了,因为以后都会不弹框直接进入没授权。所以如果我们会存在这种情况的话,就要进行相关判断让用户进入设置页面进行相应设置。不过这里我就不说这么多了,大家慢慢探索。

猜你喜欢

转载自blog.csdn.net/weixin_38322371/article/details/115197015
今日推荐