• 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)方法从请求权限中回调结果,有三个参数,前两个参数前面有讲,第三个参数保存的是授权结果,可以在这个方法中写授权操作之后需要的操作代码。
  • 相关阅读:
    又肝了3天,整理了80个Python DateTime 例子,必须收藏!
    frida hook js 如何遍历输出map
    【MySQL实战】 01 | 基础架构:一条SQL查询语句是如何执行的?
    【开发笔记】 mysql把A表数据插入到B表数据的几种方法
    C#多线程(入门篇)
    C#多线程(浅谈线程安全)
    内存管理
    Mac 安装HbuilderX运行unapp 遇到的错误Error: Cannot find module 'copywebpackplugin'
    xml转voc数据集(含分享数据集)
    使用mmdetection训练自己的coco数据集(免费分享自制数据集文件)
  • 原文地址:https://www.cnblogs.com/mulin1999/p/13392141.html
Copyright © 2020-2023  润新知