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 动态权限申请

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

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

转载于:http://www.jianshu.com/p/a51593817825 因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的...
  • nnmmbb
  • nnmmbb
  • 2016年12月17日 14:10
  • 3216

android6.0动态权限申请

  • 2017年07月19日 22:50
  • 19.87MB
  • 下载

android 6.0权限动态申请DEMO

  • 2017年12月01日 11:06
  • 25.27MB
  • 下载

Android6.0动态申请权限

  • 2017年03月16日 18:19
  • 23.98MB
  • 下载

android6.0 GPS 使用demo(包括动态权限申请)

  • 2016年06月16日 15:22
  • 22.95MB
  • 下载

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

  • 2016年11月24日 16:26
  • 11.23MB
  • 下载

Android6.0动态权限申请

  • 2017年01月11日 22:35
  • 426KB
  • 下载

Android6.0需要动态申请的权限

6.0权限的基本知识,以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整组权限都可以使用了。 group:android.permission-group.CONTACTS...
  • konglili123
  • konglili123
  • 2018年01月15日 15:36
  • 15

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

因为工作需要,简单研究了一下Android6.0权限申请,在Google提供的sample的基础上,写了一个简单的demo。算是自己的笔记吧,可能会比较混乱,主要是方便以后查看。后期有别的问题,随时更...
  • zhangxy0605
  • zhangxy0605
  • 2018年01月12日 17:38
  • 19
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 6.0 动态权限申请
举报原因:
原因补充:

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