Android6.0 权限处理

Android6.0 权限处理

关于Android6.0权限处理的介绍可以看鸿洋大神的这篇文章

Android6.0权限处理实例 - 拨打电话

请求权限

//拨打电话
private void callPhone() {
    //检查权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        //权限未获得

        //用于给用户一个申请权限的解释,该方法只有在用户在上一次已经拒绝过你的这个权限申请。也就是说,用户已经拒绝一次了,你又弹个授权框,你需要给用户一个解释,为什么要授权,则使用该方法。
        if (ActivityCompat.shouldShowRequestPermissionRationale(PermissionTestActivity.this, Manifest.permission.READ_CONTACTS)) {
            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.
            callPhone(); //重新请求一次
        } else {
            //请求权限
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE);
        }
    } else {
        //权限已获得

        //拨打电话
        Intent intent = new Intent(Intent.ACTION_CALL);
        Uri data = Uri.parse("tel:" + "10010");
        intent.setData(data);
        startActivity(intent);
    }
}

由于权限的请求是异步的,所以我们要实现权限处理的回调

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

    if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //如果有多个权限需要授权,会存储在grantResults数组中
            callPhone();
        } else {
            Toast.makeText(PermissionTestActivity.this, "授权被取消", Toast.LENGTH_SHORT).show();
        }
        return;
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

使用第三方库来处理Android6.0权限

在Github上发现一个叫RxPermissions的第三方库。

使用的是RxJava的形式。

比如上面拨打电话的操作:

private void callPhone() {
    RxPermissions.getInstance(this)
            .request(Manifest.permission.CALL_PHONE)
            .subscribe(granted -> {
                if (granted) { //授权成功                       
                    Intent intent = new Intent(Intent.ACTION_CALL);
                    Uri data = Uri.parse("tel:" + "10010");
                    intent.setData(data);
                    startActivity(intent);
                } else {
                    Toast.makeText(getApplicationContext(), "权限被取消", Toast.LENGTH_SHORT).show();
                }
            });
}  

是不是简单多了 ? 推荐使用 !

相关代码

Android6.0权限处理Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值