zoukankan      html  css  js  c++  java
  • 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方法,然后判断是否授权了。

    GitHub:https://github.com/godfunc
    博客园:http://www.cnblogs.com/godfunc
    Copyright ©2019 Godfunc
  • 相关阅读:
    根据字符串拆分字符串
    .NET WinForm读取扫描枪从COM口传过来的数据,显示在TextBox中,并做其他操作。
    《将博客搬至CSDN》
    mysql学习(二)DML
    mysql学习(一)DDL
    BigDecimal
    排序
    2017
    oracle的mapper小结
    数据结构查找
  • 原文地址:https://www.cnblogs.com/Godfunc/p/6149195.html
Copyright © 2011-2022 走看看