安卓6.0动态权限申请

转载自:https://blog.csdn.net/xietansheng/article/details/54315674  详细内容请至原作者,此为在自己项目中的简单使用,做记录用

安卓6.0动态权限申请_第1张图片

1 加载布局前进行动态权限申请,先判断sdk版本 大于23 则进行动态权限申请

if (android.os.Build.VERSION.SDK_INT >= 23){
    checkPermissions();
}

  2 判断权限是否全部被授权,是:展示界面;否:提示用用进行授权

  3 请求权限

private void checkPermissions() {
    //需要申请的权限
    String[] permissions = new String[]{
        READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE,RECORD_AUDIO
    };
    //判断权限是否全部被授权
    // 是:跳出方法
    // 否:提示用户授权
    boolean isAllGranted = isPermissionsAllGranted(permissions);
   if(isAllGranted){
       return;
   }
   //请求权限
    ActivityCompat.requestPermissions(this,permissions,MY_PERMISSION_REQUEST_CODE);
}
private boolean isPermissionsAllGranted(String[] permissons) {
    for (String permission:permissons) {
        if (ContextCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED){
            return false;
        }
    }
    return true;
}


  4 在权限回调中进行判断是否权限全部被授权,如果拒绝授权,提示用户跳转到手机设置页面,取消则退出. 

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == MY_PERMISSION_REQUEST_CODE){
        boolean isGrantedAll= true;
        for (int i :grantResults){
            if (i==PackageManager.PERMISSION_DENIED){
                isGrantedAll = false;
                break;
            }
        }
  
        if (!isGrantedAll){
            // 弹出对话框告诉用户需要权限的原因, 并引导用户去应用权限管理中手动打开权限按钮
            openAppDetails("应用需要访问 “录音” 和 “外部存储器”,请到 “应用信息 -> 权限” 中授予!");
        }else {
            finish();
        }
    }
}
/**
 * 打开 APP 的详情设置
 */
private void openAppDetails(String msg) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(msg);
    builder.setPositiveButton("去手动授权", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent intent = new Intent();
            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            intent.addCategory(Intent.CATEGORY_DEFAULT);
            intent.setData(Uri.parse("package:" + getPackageName()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
            startActivity(intent);
        }
    });
    builder.setNegativeButton("取消", null);
    builder.show();
}

你可能感兴趣的:(安卓6.0动态权限申请)