Android 6.0 动态权限申请


在Android6.0中,引入了动态申请权限机制。 以前我们在申请权限的时候,都是写在了Manifest.xml里面。 安装的时候会有一堆提示申请权限的界面, Google 可能想到用户可能并不注意这些权限。 so~ 就迎来了 动态权限机制。


请注意,如果你使用了API 23以上, 然而并没有用代码处理权限问题。 那么你的程序将会 CRASH !!!


下面我们来看看到底哪些权限是需要动态申请的, 也称为危险权限。

源地址: 这里 (需自备梯子)



以上这些权限不仅仅要在ManIfest.xml里面处理。 还要在代码中处理, 如不处理。将会CRASH,  可把SDK 换到23 自行尝试。


下面我们来演示一个打电话的Demo.

当点击一个按钮的时候,我们检查权限

//检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
        != PackageManager.PERMISSION_GRANTED) {
    //进入到这里代表没有权限.
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CODE);
} else {
    callPhone();
}
如果有权限,那么直接调用callPhone()方法去打电话, 否则就申请权限。 如果进入了申请权限代码,则会弹出一个弹框,让用户选择是否授权。


这里会有个回调方法,在FragmentActivity与Activity里都有该方法

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case REQUEST_CODE:
            if(grantResults.length >0 &&grantResults[0]==PackageManager.PERMISSION_GRANTED){
                //用户同意授权
                callPhone();
            }else{
                //用户拒绝授权
            }
            break;
    }
}

如果同意授权,那么会进入到第一个if 最后走进callPhone(), 如果点击取消。 那么说明用户拒绝了该权限。




这里还有个小问题,如果用户点击了不在提醒, 并拒绝之后。  那么下次点击该触发打电话的按钮 就会没有任何反应,体验非常的不好。 我们可以做如下处理。


public void call(View v) {
    //检查权限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
            != PackageManager.PERMISSION_GRANTED) {
        //进入到这里代表没有权限.

        if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CALL_PHONE)){
            //已经禁止提示了
            Toast.makeText(MainActivity.this, "您已禁止该权限,需要重新开启。", Toast.LENGTH_SHORT).show();
        }else{
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CODE);

        }

    } else {
        callPhone();
    }
}
这样的话,如果没有改权限。 会检查是否禁止提示, 如果禁止提示了, 我们给它一个Toast提示。

还说上一个非常好的消息, 现在 在AS中, 如果我们用了危险权限 ,那么系统是会给提示的。 并且会生成相应代码哦~  是不是非常的屌~~~


关于6.0动态权限就先介绍到这里,如想要更详细的资料, 请认准官网。


第三方库: https://github.com/googlesamples/easypermissions

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值