运行时权限

为了进一步保护用户的安全和隐私,安卓从6.0版本推出了将权限一分为二,分为普通权限和危险权限。6.0以下依然是在安装时列出所有权限,用户同意后就开始安装,所有权限即为同意。而6.0以后危险权限默认用户没有授权,所以我们在使用这些危险权限前需要得到用户的授权,用户同意后才能继续提供服务。

1.先看看哪些是危险权限。共9组24个

CALENDAR

CAMERA CONTACTS LOCATION MICROPHONE PHONE SENSORS SMS STORAGE

2.判断是否已授权:
if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED)
checkSelfPermission返回一个int数,可以与后面这个值比较,相等说明已经授权。这行代码判断ACCESS_FINE_LOCATION授权与否。

3.发出权限请求并得到用户选择:
发出权限请求:
ActivityCompat.requestPermissions(MainActivity.this,array,1);

这个请求的一个参数是一个字符串数组,是权限数组,也就是每次可以发出多个权限的请求。
返回的结果在下面的方法中:
@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 1:
                if (grantResults.length>0){
                    for (int permit:grantResults){
                        if (permit!=PackageManager.PERMISSION_GRANTED){
                            Toast.makeText(MainActivity.this,"请同意所有权限",Toast.LENGTH_SHORT).show();
                            return;
                        }
                    }
                    locate();
                }
                break;
        }
    }
第一个参数结果码,为1说明正常,第二个是权限数组,第三个是结果数组,Int类型,我对这个数组进行遍历,如上所说与PackageManager.PERMISSION_GRANTED这个值进行比较确定用户是否对相应权限进行了授权。

4.多个要求权限的处理技巧:用一个list,判断每一个权限把没有授权的加入list,然后转成数组进行请求:
List<String> permissions=new ArrayList<>();
        if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED){
            permissions.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
        }
        if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_PHONE_STATE)
                !=PackageManager.PERMISSION_GRANTED){
            permissions.add(android.Manifest.permission.READ_PHONE_STATE);
        }
        if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                !=PackageManager.PERMISSION_GRANTED){
            permissions.add(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
        if (!permissions.isEmpty()){
            String[] array=permissions.toArray(new String[permissions.size()]);
            ActivityCompat.requestPermissions(MainActivity.this,array,1);
        } else {
            locate();//已经同意所有权限
        }





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值