运行时权限

Posted mystic

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行时权限相关的知识,希望对你有一定的参考价值。

android6.0系统中新增加了运行时权限。

运行时权限也就是说在应用程序使用的过程中需要手动进行授权的权限。

Android将权限归成了两类,一类是普通权限,一类是危险权限。

对于普通权限,系统则会自动帮我们授权。

而危险权限则需要用户手动进行授权。

 

以下为Android中所有的危险权限

 

如果需要使用的权限不在这张表中,那么只需要在清单文件中添加权限声明即可。

 

运行时权限的使用

首先判断用户是不是已经给我们授权了,借助的是ContextCompat.checkSelfPermission()方法。

checkSelfPermission()方法接收两个参数,第一个为Context,第二个为具体的权限名

然后在使用checkSelfPermission()方法的返回值和PackageManager.PERMISSION_GRANTED做比较。

相等则说明用户已经授权,不等则表示用户没有授权。

如果已经授权,则去执行具体的逻辑即可。

如果没有授权,则需要调用ActivityCompat.requestPermissions()方法申请授权。

requestPermissions()方法接受三个参数,第一个参数是Activity的实例,第二个参数是一个String数组,将权限名放在里面即可。第三个参数是请求码,传入一个唯一值即可。

1 if(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){
2                 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);
3         }else{
4             readContacts();
5         }

执行完requestPermissions()方法之后,会弹出一个对话框,让用户来选择允许或是拒绝权限。

不论是允许还是拒绝,最终都会回调onRequestPermissionsResult()方法。

授权的结果封装在grantResults参数中。最终只需要判断一下最后的授权结果。

然后执行相应的逻辑即可。

requestPermissions()方法里的 requsetCode参数则是之前requestPermissions()方法传入的请求码。

1 @Override
2     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
3      4     }

 

以上是关于运行时权限的主要内容,如果未能解决你的问题,请参考以下文章

每当我运行我的片段时,这行代码 mapFragment.setRetainInstance(true);正在崩溃我的应用程序? [关闭]

片段中的请求权限不显示对话框

ForYouFragment 片段不更新

具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包

当 ViewPager 中的片段出现和消失时如何执行一些代码

当活动被破坏但我必须继续执行片段中的代码时该怎么办?