先直接看代码:

 public void onClick(View v){
         onCallPermission();
 }

 public void onCallPermission(){
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判断当前系统的SDK版本是否大于23
             //如果当前申请的权限没有授权
             if (!(checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED)){
                 //第一次请求权限的时候返回false,第二次shouldShowRequestPermissionRationale返回true
                 //如果用户选择了“不再提醒”永远返回false。
                 if (shouldShowRequestPermissionRationale(android.Manifest.permission.RECORD_AUDIO)){
                     Toast.makeText(this, "Please grant the permission this time", Toast.LENGTH_LONG).show();
                 }
                 //请求权限
                 requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO},1);
             }else {//已经授权了就走这条分支
                 Log.i("wei", "onClick granted");
             }
         }
     }

 @Override
     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
         if (requestCode==1){
             if (permissions[0].equals(Manifest.permission.RECORD_AUDIO)&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
                 listernUi();//得到权限之后去做的业务
             }else {//没有获得到权限
                 Toast.makeText(this,"你不给权限我就不好干事了啦",Toast.LENGTH_SHORT).show();
             }
         }
     }

第一个方法:Button的点击事件,点击之后请求权限,然后走第二个方法。

第二个方法:请求权限,checkSelfPermission(Manifest.permission.RECORD_AUDIO)是检查应用本身是否包含对应的权限,如果包含返回PackageManager.PERMISSION_GRANTED;

  shouldShowRequestPermissionRationale :应用安装后第一次访问,直接返回false;第一次请求权限时,用户拒绝了,下一次             shouldShowRequestPermissionRationale()返回 true,这时候可以显示一些为什么需要这个权限的说明;第二次请求权限时,用户拒绝了,并选择了“不再提醒”的选项时:shouldShowRequestPermissionRationale()返回 false;

 requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO},1); :是请求对应的权限,会弹出一个对话框让用户选择是否授权,用户选择之后会走 onRequestPermissionsResult这个回调方法

第三个方法:当用户选择之后进入该方法,授权处理之后的业务逻辑就写在这个方法里面,(不建议直接把业务逻辑写在requestPermission之后,写在这个回调方法中更好),主要是先对requestCode进行判断,看他对应的是哪个requestPermissions方法,然后判断是否授权了。

Android6.0动态申请权限的更多相关文章

  1. 说说Android6.0动态申请权限的那些坑

    白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒. 首先要知道哪些坑,就得先了解一些定义和基本使用方式. 那么先介绍一下动态申请的权限分组情况. 下面的权限组是由谷歌官方定义的,目 ...

  2. Android6.0动态申请权限那些坑--以及避免用户选择不再提示后无法获取权限的问题

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

  3. Android6.0动态获取权限

    Android6.0采用新的权限模型,只有在需要权限的时候,才告知用户是否授权,是在runtime时候授权,而不是在原来安装的时候 ,同时默认情况下每次在运行时打开页面时候,需要先检查是否有所需要的权 ...

  4. Android6.0动态权限申请

    goggle在Android6.0要求部分权限需要动态申请,直接下载AndroidManifest.xml中无效 6.0权限的基本知识,以下是需要单独申请的权限,共分为9组, 每组只要有一个权限申请成 ...

  5. Android6.0中的权限

    Android6.0相比之前的Android版本有一个很大的不同点,就是动态的获取权限.之前我们需要什么权限只需要在Manifest文件中声明即可,在6.0中,又新增了运行时权限的动态检测. Andr ...

  6. Android 动态申请权限问题【转】

    Android 动态申请权限问题 感谢大佬:https://www.jianshu.com/p/2324a2bdb3d4 感谢大佬:https://blog.csdn.net/weixin_42910 ...

  7. Android6.0运行时权限管理

    自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有的权限而导致的无法安装 ...

  8. Android之动态申请权限(API23以上需求)

    API 23之前的版本都是自动获取权限,而从 Android 6.0 开始添加了权限申请的需求,更加安全. 这里以单个存储权限为例: · 在 Manifest 中添加访问权限:(只需设置可写,因为可写 ...

  9. android:动态申请权限(一)

    环境: android版本6.0 对应SDK版本23 动态申请权限说明:所有动态申请的权限,必须在AndroidManifest.xml中进行声明 步骤 1.新建一个android工程 默认创建即可 ...

随机推荐

  1. Centos6_64 rpm打包实践

    安装rpmbuild sudo yum install rpm-build 普通用户的配置 /home/you/rpmbuild/ 假设是要构建rpm的目录 先说说rpmbuild有什么用,给一个例子 ...

  2. RSA算法及其在iOS中的使用

    因为项目中需要传输用户密码,为了安全需要用RSA加密,所以就学习了下RSA加密在iOS中的应用. 关于RSA的历史及原理,下面的两篇文章讲的很清楚了:  http://www.ruanyifeng.c ...

  3. textview设置drawable

    textview可以在上下左右四个方向添加图片,同时也可以动态改变这些图片:   下面有我写的一个例子: 在xml文件中:  <TextView                 android: ...

  4. Python绘制PDF文件~超简单的小程序

    Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http:// ...

  5. jQuery插件库代码分享 - 进阶者系列 - 学习者系列文章

    这些天将原来在网上找的jQuery插件进行了下整理,特此将代码分享出来给大家. 见下图结构. 对目录结构进行了分类.这里是插件列表. 这里总共收集了20来个插件.还有下面未进行划分的. 下面是DEMO ...

  6. git review & devops过程

    自己搭建的devops环境是gitlab/gerrit/jenkins 1. 首先自己checkout一个自己的代码分支,一般不要在master上做直接修改 2. 修改后git add file,   ...

  7. Nginx反向代理和负载均衡部署指南

    1.        安装 1)         从Nginx官网下载页面(http://nginx.org/en/download.html)下载Nginx最新版本(目前是1.5.13版本)安装包: ...

  8. get_locked_objects_rpt.sql

    在metalink上看到一个脚本(get_locked_objects_rpt.sql),非常不错,如下所示 /*------------------------------------------- ...

  9. javascript-代理模式

    JavaScript代理模式笔记 由于一个对象不能直接引用另一个对象,所以要用过代理对象在这两个对象之间起到中介作用 1.代理对象形式是通过script标签 demo实例实现的方式也被人称之为JSON ...

  10. 使用js 设置组合快捷键

    使用js 设置组合快捷键 使用js设置快捷键的本质就是获得你要设置的这个键的keyCode 的值,如果要加ctrl,alt,shift,那么就添加一个ctrlkey,altKey,shiftKey来判 ...