权限的申请与处理

安卓 APP 程序由于性质特殊,谷歌从安全角度、及保护用户隐私和设备安全考虑、为其设计了权限机制。

权限的作用

  1. 保护用户隐私

    • 防止 APP 未经用户同意就访问敏感数据(如联系人、位置、相机等)。
  2. 保障设备安全

    • 防止 APP 滥用系统功能(如发送短信、拨打电话等)。
  3. 增强用户控制

    • 让用户明确知道应用需要哪些权限,并可以选择是否授予这些权限。

安卓程序权限的分类

Android 权限分为两大类:静态权限动态权限

1. 静态权限

  • 定义:普通权限、不涉及用户隐私或设备安全的权限。

  • 特点

    • 在应用安装时自动授予。

    • 不需要用户明确同意。

  • 示例

    • INTERNET:访问网络。

    • ACCESS_NETWORK_STATE:访问网络状态。

  • 声明方式: 只需要在 AndroidManifest.xml 中声明即可、不需要在代码中动态申请,例如访问网络的权限:

<uses-permission android:name="android.permission.INTERNET" />

2. 动态权限

动态权限除了在清单文件中声明外、还需要在代码中申请;使用分为以下几个步骤:

1. 在 AndroidManifest.xml 中声明权限

例如 使用相机、读取通讯录信息:

<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CAMERA" />

2. 在代码中申请

函数 申请系统权限()
    ' 默认权限都已全部屏蔽、可根据你当前APP所需要的权限解除屏蔽
    ' 相机、拍照、扫码
    待申请权限.添加项目("android.permission.CAMERA")
    ' 读写电话簿、联系人
    待申请权限.添加项目("android.permission.READ_CONTACTS")
    待申请权限.添加项目("android.permission.WRITE_CONTACTS")
    待申请权限.添加项目("android.permission.GET_ACCOUNTS")
    ' 将集合权限转成文本数组并开始申请
    如果(待申请权限.取项目数() == 0)
        返回
    结束 如果
    变量 待申请权限数组 为 文本型[] = 创建 文本型[待申请权限.取项目数()]
    变量循环(索引 = 0,取数组成员数(待申请权限数组),1)
        待申请权限数组[索引] = 待申请权限.取项目(索引) + ""
    结束循环
    申请权限(待申请权限数组,1995)
结束 函数

3. 判断权限申请结果

事件 权限申请完毕(请求码 为 整数型,请求成功的权限 为 文本型[],请求成功结果 为 整数型[])
    ' 总共申请了 4 个权限、判断 请求成功结果 长度
    如果(取数组成员数(请求成功结果) != 4)
        弹出提示("所需权限未全部通过")
        返回
    结束 如果
结束 事件

权限组

Android 将动态权限分为多个权限组(Permission Groups),同一组内的权限只需请求一次。例如:

  • 联系人组READ_CONTACTSWRITE_CONTACTS

  • 位置组ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION

  • 相机组CAMERA

如果用户授予了某个权限组中的一个权限,则同一组内的其他权限也会自动授予。