Android6.0动态申请权限

先直接看代码:

 1 public void onClick(View v){
 2         onCallPermission();
 3 }
 4 
 5 public void onCallPermission(){
 6         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//判断当前系统的SDK版本是否大于23
 7             //如果当前申请的权限没有授权
 8             if (!(checkSelfPermission(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED)){
 9                 //第一次请求权限的时候返回false,第二次shouldShowRequestPermissionRationale返回true
10                 //如果用户选择了“不再提醒”永远返回false。
11                 if (shouldShowRequestPermissionRationale(android.Manifest.permission.RECORD_AUDIO)){
12                     Toast.makeText(this, "Please grant the permission this time", Toast.LENGTH_LONG).show();
13                 }
14                 //请求权限
15                 requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO},1);
16             }else {//已经授权了就走这条分支
17                 Log.i("wei", "onClick granted");
18             }
19         }
20     }
21 
22 
23 @Override
24     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
25         if (requestCode==1){
26             if (permissions[0].equals(Manifest.permission.RECORD_AUDIO)&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
27                 listernUi();//得到权限之后去做的业务
28             }else {//没有获得到权限
29                 Toast.makeText(this,"你不给权限我就不好干事了啦",Toast.LENGTH_SHORT).show();
30             }
31         }
32     }

第一个方法: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方法,然后判断是否授权了。

posted @ 2016-12-09 13:43  Godfunc  阅读(3656)  评论(0编辑  收藏  举报