权限的申请与处理
安卓 APP 程序由于性质特殊,谷歌从安全角度、及保护用户隐私和设备安全考虑、为其设计了权限机制。
权限的作用
-
保护用户隐私:
- 防止 APP 未经用户同意就访问敏感数据(如联系人、位置、相机等)。
-
保障设备安全:
- 防止 APP 滥用系统功能(如发送短信、拨打电话等)。
-
增强用户控制:
- 让用户明确知道应用需要哪些权限,并可以选择是否授予这些权限。
安卓程序权限的分类
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_CONTACTS
、WRITE_CONTACTS
。 -
位置组:
ACCESS_FINE_LOCATION
、ACCESS_COARSE_LOCATION
。 -
相机组:
CAMERA
。
如果用户授予了某个权限组中的一个权限,则同一组内的其他权限也会自动授予。