Android申请动态权限(一个或者多个)

目录

申请一个权限:例如:打电话

0、在清单配置文件中加入对应权限:

1、声明code值

2、点击事件:(butterkinfe)

3、返回码操作

申请多个权限:例如 相机权限的写入文件权限

0、在清单配置文件中加入对应权限:

1、声明code值

2、点击事件:(butterkinfe)

3、返回码操作


申请一个权限:例如:打电话

0、在清单配置文件中加入对应权限:

<uses-permission android:name="android.permission.CALL_PHONE" />

1、声明code值

private static final int REQUEST_CALL_PHONE = 1111;

2、点击事件:(butterkinfe)

case R.id.btn1://1、Call(打电话)
                if (ContextCompat.checkSelfPermission(PermissionActivity.this, Manifest.permission.CALL_PHONE)
                        != PackageManager.PERMISSION_GRANTED) {
                    //如果不同意,就去请求权限   参数1:上下文,2:权限,3:请求码
                    ActivityCompat.requestPermissions(
                            PermissionActivity.this,
                            new String[]{Manifest.permission.CALL_PHONE},
                            REQUEST_CALL_PHONE);
                } else {
                    //同意就拨打

                }
                break;
                

3、返回码操作

@Override
    public void onRequestPermissionsResult(int requestCode, 
@NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        
        //判断请求码
        switch (requestCode) {
            case REQUEST_CALL_PHONE://1、Call(打电话)
                //如果同意,就拨打
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    HnToast.showToastShort("已经获取到电话权限");
                } else {
                    HnToast.showToastShort("未获取到电话权限");
                }
                break;
            

        }
    }       

申请多个权限:例如 相机权限的写入文件权限

0、在清单配置文件中加入对应权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

1、声明code值

//申请多个权限 相机和写入设置(CAMERA和WRITE_EXTERNAL_STORAGE)
    private static final int REQUEST_CAMERA_AND_WRITE_EXTERNAL_STORAGE = 6666;

2、点击事件:(butterkinfe)

case R.id.btn6://6、相机和写入设置(CAMERA和WRITE_EXTERNAL_STORAGE)
                initPermission();
                break;


 //申请两个权限,相机和文件读写
    //1、首先声明一个数组permissions,将需要的权限都放在里面
    String[] permissions = new String[]{Manifest.permission.CAMERA,
            Manifest.permission.WRITE_EXTERNAL_STORAGE};
    //2、创建一个mPermissionList,逐个判断哪些权限未授予,未授予的权限存储到mPerrrmissionList中
    List<String> mPermissionList = new ArrayList<>();

    //权限判断和申请
    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, REQUEST_CAMERA_AND_WRITE_EXTERNAL_STORAGE);
        }else{
            //说明权限都已经通过,可以做你想做的事情去
        }

    }

3、返回码操作

@Override
    public void onRequestPermissionsResult(int requestCode,
 @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        boolean hasPermissionDismiss = false;//有权限没有通过

        //判断请求码
        switch (requestCode) {
            case REQUEST_CAMERA_AND_WRITE_EXTERNAL_STORAGE://6、相机和写入设置(CAMERA和WRITE_EXTERNAL_STORAGE)
                for (int i = 0; i < grantResults.length; i++) {
                    if (grantResults[i] == -1) {
                        hasPermissionDismiss = true;
                    }
                }

                //如果有权限没有被允许
                if (hasPermissionDismiss) {
                    //跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问
                    
                }else{
                    //全部权限通过,可以进行下一步操作。。。
                    HnToast.showToastShort("已经获取到相机和写入文件权限");
                }
                break;

        }
    }

Android6.0------权限申请管理(单个权限和多个权限申请)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值