Android动态权限处理

6.0以后分出了危险权限,危险权限需要动态申请,他们分了组,如果申请了组内的某个权限,那么整个组的权限都会被授予
Android动态权限处理_第1张图片
危险权限组.jpg

主要也就几个方法,方法懂了,剩下的就是逻辑了,先看几个重要的方法:

检查权限方法:

 //第一个参数Context,第二个参数需要检查的权限
 //被授权返回0,否则返回-1
 PermissionChecker.checkSelfPermission(mContext, permission);
 通常都这么写:
 // true 表示授权  false表示没有授权    
 //PackageManager.PERMISSION_GRANTED值为0
 PermissionChecker.checkSelfPermission(mContext, permission) == PackageManager.PERMISSION_GRANTED;

这里另外列出MIUI的权限检查方法,因为上面的方法对于MIUI不管用

//就是要这么写,Process是进程工具类,获的进程的一些信息
//被授权返回0,否则返回-1
 PermissionChecker.checkPermission(mContext, permission, Process.myPid(), Process.myUid(), mContext.getPackageName())

申请权限方法:

 //在activity中申请
 //第二个参数为权限数组,第三个int参数需要记住,他相当于一个标识,一会要用
 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 123);
Android动态权限处理_第2张图片
申请权限系统弹框.png

走了申请权限的方法,就会出这个弹框。当然又有系统差异:

  • 先说华为(EMUI)和原生:这2个表现一样,如果没有权限,走了这句代码,会弹出授权框,如果是已经授予过权限,走了上面的代码不会弹出授权框。
  • 小米(MIUI):不论权限是否授予,只要走了代码就会弹。
  • 魅族(Flyme):不论权限是否授予,都不弹
    这里要强调下,只测试了CAMARE和CONTACTS两组权限,系统 EMUI(5.x) ,原生(7.x.x),MIUI(V9.x.x),Flyme(6.2.x.x)

授权回调方法:

走了上面的申请权限方法,用户选择完,就会回调

 //第一个参数就是上面申请权限方法需要记住的标识123,第二个参数为你的申请权限的数组,第三个参数是授权回调的结果
 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {}
  • 第二个参数permissions和第三个参数grantResults是对应的,假如permissions中第一项为照相机权限,则在grantResults中的第一项为0表示用户授予了权限,为-1表示拒绝。你可以用这2个数组来对比出哪些权限用户给了,哪些没给。

不再提醒权限方法:(用户勾选拒绝后不再询问)

//参数是一个权限,返回true或false
shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)
  • 返回true表示用户没有勾选 拒绝后不再询问,你可以再去调用requestPermissions申请权限

  • 返回false分几种情况:
    1.用户勾选拒绝后不再询问,你只能引导用户去设置中开启权限了
    2.用户自己在设置中把权限给关了...
    3.系统禁止应用具有该权限!

总结一下:

权限处理就上面几个方法,重要的是授权逻辑,怎么才能在保证app正常使用不让用户反感授权,特别是用户拒绝授权的处理,或者偷偷去把权限给关掉的处理。
有一个点要注意:所有需要的权限都需要到manifests中注册,否则你写了动态申请的代码,也不出弹框。
这里提下百度地图,下面的同意按钮一点,好几个权限直接就给了,有一点点想法,但是我应该写不出来想法中的代码,以后水平高了再看看。


Android动态权限处理_第3张图片
百度地图授权界面.png

更新
2018.01.20 百度地图的授权,试了小米和努比亚直接给授权,但像华为,三星都是会弹系统授权框的。



对于生活理想,应该像宗教徒对待宗教一样充满虔诚与热情!

你可能感兴趣的:(Android动态权限处理)