Android——权限机制

权限机制

Android申请权限需要在AndroidManifest.xml中添加权限申请,在系统低于6.0的设备上安装的软件只要在AndroidManifest.xml中声明了的权限就可以拥有那些权限。

在系统6.0之后加入了运行时权限功能,将所有权限分为了两类:普通权限和危险权限:

  • 普通权限是指那些不会直接威胁到用户安全和隐私的权限,对于这部分权限申请,只要在AndroidManifest.xml中添加权限申请,系统会自动帮我们进行授权。
  • 危险权限则表示那些可能会触及用户隐私或者对设备安全性造成影响的权限,如获取设备联系人信息、定位设备的地理位置等,对于这部分权限申请采取运行时权限功能,除了需要在AndroidManifest.xml中添加权限申请,还需要由用户手动点击授权才可以。

在加入运行时权限后,安装时只会赋予安装的软件申请的普通权限,危险权限需要用户在要用到的时候同意对这项权限进行授权才会赋予该权限,不同意则无法使用该权限。

下表列出了Android中的危险权限,一共9组24个权限:

权限组名

权限名

 作用

 

CALENDAR

READ_CALENDAR

读取用户的日历数据

WRITE_CALENDAR

写入用户的日历数据

CAMERA

CAMERA

访问相机设备

 

 

CONTACTS

READ_CONTACTS

读取用户的联系人数据。

WRITE_CONTACTS

写入用户的联系人数据

GET_ACCOUNTS

访问帐户服务中的帐户列表

 

LOCATION

ACCESS_FINE_LOCATION

访问精确的位置

ACCESS_COARSE_LOCATION

访问大致位置

MICROPHONE

RECORD_AUDIO

录制音频

 

 

 

 

 

 

 

PHONE

READ_PHONE_STATE

只读访问电话状态

CALL_PHONE

在不通过拨号用户界面的情况下发起电话呼叫

READ_CALL_LOG

读取用户的调用日志

WRITE_CALL_LOG

写入(但不读取)用户的调用日志数据

ADD_VOICEMAIL

向系统中添加语音邮件

USE_SIP

使用SIP服务

PROCESS_OUTGOING_CALLS

查看向外呼叫期间所拨打的号码(在API 29废弃)

SENSORS

BOOY_SENSORS

从传感器中访问数据

 

 

 

 

SMS

SEND_SMS

发送SMS消息

RECEIVE_SMS

接收SMS消息

READ_SMS

读取SMS消息

RECEIVE_WAP_PUSH

接收WAP推送消息

RECEIVE_MMS

监视传入的MMS消息

 

STORAGE

READ_EXTERNAL_STORAGE

读取外部存储

WRITE_EXTERNAL_STORAGE

写到外部存储器

 

查看Android系统中完整的权限列表:https://developer.android.google.cn/reference/android/Manifest.permission.html

 

运行时权限申请代码(申请用户联系人):

if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){

    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);

}
  • checkSelfPermission(Context context, String permission)方法用于确定您是否已被授予特定权限,接收两个参数,第一个是Context,第二个是权限名称,返回值有两个,PackageManager.PERMISSION_GRANTED表示已授予,PackageManager.PERMISSION_DENIED表示未授予。
  • requestPermissions(Activity activity, Array<String!> permissions, Int requestCode)方法用于请求要授予此应用程序的权限,接收三个参数,第一个参数为Activity的实例,第二个参数是一个String数组,里面存放要申请的权限名,第三个参数是请求码,只要是唯一值就可以。

 

调用完requestPermissions()方法后,系统会弹出一个权限申请的对话框,然后用户可以选择同意或拒绝该权限申请,不论是哪种结果,都会回调到onRequestPermissionsResult()方法中->

  • onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults)方法从请求权限中回调结果,有三个参数,前两个参数前面有讲,第三个参数保存的是授权结果,可以在这个方法中写授权操作之后需要的操作代码。
原文地址:https://www.cnblogs.com/mulin1999/p/13392141.html