android动态获取权限方法

1.设置一个权限的数组,将需要动态申请的权限写入

String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
List mPermissionList = new ArrayList<>();
int mRequestCode = 100;

2.创建页面时进行权限申请

if (Build.VERSION.SDK_INT >= 23) {//6.0才用动态权限
initPermission();
} else {
initview();
}

3.以下是动态申请的方法

//权限判断和申请
private void initPermission() {

    mPermissionList.clear();//清空没有通过的权限

    //逐个判断你要的权限是否已经通过
    for (int i = 0; i < permissions.length; i++) {
        if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
            mPermissionList.add(permissions[i]);//添加还未授予的权限
        }
    }

    //申请权限
    if (mPermissionList.size() > 0) {//有权限没有通过,需要申请
        ActivityCompat.requestPermissions(this, permissions, mRequestCode);
    } else {
        //说明权限都已经通过,可以做你想做的事情去
       // initview();
    }
}

//请求权限后回调的方法
//参数: requestCode  是我们自己定义的权限请求码
//参数: permissions  是我们请求的权限名称数组
//参数: grantResults 是我们在弹出页面后是否允许权限的标识数组,数组的长度对应的是权限名称数组的长度,数组的数据0表示允许权限,-1表示我们点击了禁止权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    boolean hasPermissionDismiss = false;//有权限没有通过
    if (mRequestCode == requestCode) {
        for (int i = 0; i < grantResults.length; i++) {
            if (grantResults[i] == -1) {
                hasPermissionDismiss = true;
            }
        }
        //如果有权限没有被允许
        if (hasPermissionDismiss) {
            showPermissionDialog();//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
        } else {
            //全部权限通过,可以进行下一步操作。。。
            initview();
        }
    }

}

/**
 * 不再提示权限时的展示对话框
 */
AlertDialog mPermissionDialog;

private void showPermissionDialog() {
    if (mPermissionDialog == null) {
        mPermissionDialog = new AlertDialog.Builder(this)
                .setMessage("已禁用权限,请手动授予")
                .setPositiveButton("设置", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        cancelPermissionDialog();
                        //此处是手动设置权限后跳转回来的页面
                     /*   Intent intent = new Intent();
                        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                        Uri uri1 = Uri.fromParts("package", SixMainActivity.this.getPackageName(), null);
                        intent.setData(uri1);
                        startActivity(intent);
                        finish();*/
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //关闭页面或者做其他操作
                        initPermission();
                        cancelPermissionDialog();

                    }
                })
                .create();
    }
    mPermissionDialog.show();
}

//关闭对话框
private void cancelPermissionDialog() {
    mPermissionDialog.cancel();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值