Android 6.0及以上版本动态申请权限
需积分: 9 170 浏览量
更新于2024-09-07
收藏 3KB TXT 举报
"本文将详细解释在Android 6.0及以上版本中如何进行动态权限申请,这是Android系统针对用户隐私保护的重要更新。"
在Android 6.0(API级别23)及更高版本中,系统引入了运行时权限管理机制,意味着应用不再在安装时自动获取所有权限,而是需要在运行时根据需要请求用户授予特定的敏感权限。这种变化旨在让用户更加清楚地了解哪些权限被哪些应用使用,从而增强对个人数据的控制。
动态申请权限的关键在于两个主要类:`ContextCompat` 和 `ActivityCompat`。`ContextCompat.checkSelfPermission()` 方法用于检查应用是否已经获得了特定权限。如果应用尚未获得权限,它会返回 `PackageManager.PERMISSION_DENIED`;反之,如果已授权,它会返回 `PackageManager.PERMISSION_GRANTED`。
以下是一个典型的应用动态请求权限的示例代码:
```java
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 1);
} else {
init(); // 如果已经拥有权限,则初始化相关功能
}
```
在上面的代码中,首先检查应用是否已经拥有相机权限。如果没有,通过 `ActivityCompat.requestPermissions()` 请求权限,并传入权限字符串数组、请求码(用于在回调方法中区分不同请求)和一个整数请求码。请求码在这里是1,可以根据实际需求自定义。
权限请求的结果会在 `onRequestPermissionsResult()` 方法中回调,这个方法位于 `Activity` 类中:
```java
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1: // 对应于之前的请求码
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
init(); // 用户同意权限,可以初始化相关功能
} else {
Toast.makeText(this, "用户拒绝了权限", Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
```
在这个回调方法中,我们检查请求码以确定哪个权限请求返回了结果。如果用户授予了权限,那么可以执行需要该权限的功能;如果用户拒绝了权限,可以显示一个提示信息或者提供其他操作。
此外,如果应用在运行时需要多个权限,如同时需要相机和外部存储权限,可以按照相同的方式进行请求:
```java
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ||
ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
ActivityCompat.requestPermissions(MainActivity.this, permissions, 2); // 使用不同的请求码
} else {
OpenCam(); // 已有所有权限,可以直接打开相机
}
```
需要注意的是,对于非危险权限(例如读取设备状态),它们在安装时就会被授予,因此不需要运行时权限请求。危险权限(例如访问联系人、相机、位置等)则必须在运行时动态请求。
动态申请权限是Android系统为保护用户隐私而采取的一种措施。开发者需要确保在正确的时间和场景下向用户请求权限,并处理用户可能的选择,提供良好的用户体验。遵循这些步骤,您的应用就能在Android 6.0及更高版本中顺利处理权限管理。
2019-02-22 上传
2019-01-07 上传
2020-05-09 上传
2017-05-28 上传
2021-01-07 上传
2023-05-25 上传
2017-03-16 上传
mikemikemao
- 粉丝: 0
- 资源: 2
最新资源
- 探索AVL树算法:以Faculdade Senac Porto Alegre实践为例
- 小学语文教学新工具:创新黑板设计解析
- Minecraft服务器管理新插件ServerForms发布
- MATLAB基因网络模型代码实现及开源分享
- 全方位技术项目源码合集:***报名系统
- Phalcon框架实战案例分析
- MATLAB与Python结合实现短期电力负荷预测的DAT300项目解析
- 市场营销教学专用查询装置设计方案
- 随身WiFi高通210 MS8909设备的Root引导文件破解攻略
- 实现服务器端级联:modella与leveldb适配器的应用
- Oracle Linux安装必备依赖包清单与步骤
- Shyer项目:寻找喜欢的聊天伙伴
- MEAN堆栈入门项目: postings-app
- 在线WPS办公功能全接触及应用示例
- 新型带储订盒订书机设计文档
- VB多媒体教学演示系统源代码及技术项目资源大全