关闭

Android 6.0 动态权限申请

12987人阅读 评论(7) 收藏 举报
分类:


在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

7
1

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:20723次
    • 积分:457
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:0篇
    • 译文:0篇
    • 评论:10条
    博客专栏
    最新评论