安卓6.0以上动态权限申请

  • 1.设置一个权限的数组,将需要动态申请的权限写入
    • 2.创建页面时进行权限申请
    • 3.以下是动态申请的方法

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表示我们点击了禁止权限@Overridepublic 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();}

更多相关文章

  1. Android类参考---Manifest.permission_group
  2. 〖Android〗代理与正常网络分开同步CyangenMod源码
  3. Bitmap保存图片到指定路径
  4. 初学Android,字符串,数字,尺寸,数组资源(十二)
  5. Google Maps API申请 之 Android(安卓)Maps API
  6. Android签名及权限变化详解
  7. Android(安卓)6.0 存储权限管理
  8. android 下自定义view, android.view.InflateException
  9. Android:在AndroidManifest中注册BroadcastReceiver的权限问题

随机推荐

  1. android intent uri 传参
  2. Android(安卓)- 判断当前是否使用的是Wif
  3. Android(安卓)下保持屏幕常亮的实现方法
  4. Android(安卓)The style on this compone
  5. Android虚拟sdcard
  6. Android学习之通过content provider获得
  7. API 25 (Android(安卓)7.1.1 API) widget
  8. Android样式设计
  9. 彻底解决Android中文乱码
  10. android刮刮乐