Android 6.0 动态权限申请

原创 2016年05月30日 22:28:09


在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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android 6.0 运行时权限处理完全解析

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/50709663; 本文出自:【张鸿洋的博客】 一、概述 随着A...

android6.0 动态申请权限问题总结

详细介绍可以看看大神的文章http://blog.csdn.net/lmj623565791/article/details/50709663 ,本文只是记录一些使用逻辑,以后再用直接复制了(本人比较...

Android 6.0 动态申请权限

Android 6.0 动态申请权限

Android 6.0 动态权限申请

Android 6.0 (API 23) 之前应用的权限在安装时全部授予,运行时应用不再需要询问用户。在 Android 6.0 或更高版本对权限进行了分类,对某些涉及到用户隐私的权限可在运行时根据用...

Android 6.0 动态权限申请注意事项

Android 6.0 权限区分 Android 6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请, 比如以往的开发中,开发人员只需要将需要的权限在清单文件中配置即可,安装后用户可...

Android6.0动态权限申请步骤以及需要注意的一些坑

因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo。算是自己的笔记吧,可能会比较混乱,主要是方便以后查看。后期有别的问题,随时更...

Android 6.0开始动态请求权限

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51366845 动态请求权限从Android 6.0(API 23)开始,允许用户在应用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)