Android 6.0动态权限申请详解及处理技巧
172 浏览量
更新于2024-08-30
收藏 60KB PDF 举报
Android 6.0 权限申请详解及权限资料整理
在 Android 6.0 之后,部分权限需要动态申请,这意味着当用户打开应用程序时,系统不会自动申请应用程序所需的权限,而是需要用户在使用应用程序时主动申请。下面是权限申请的详细介绍。
一、权限申请的两步骤
权限申请的第一步是 requestPermissions 方法,它需要三个参数:Activity 对象、需要申请的权限数组和申请回调代码。例如:
```
public static void requestPermissions(final @NonNull Activity activity, final @NonNull String[] permissions, final int requestCode)
```
权限申请的第二步是处理申请回调结果,通过 onRequestPermissionsResult 方法可以获取申请结果。例如:
```
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
```
在 onRequestPermissionsResult 方法中,可以根据 grantResults 数组的值来判断权限申请的结果。如果 grantResults 数组中的值是 PackageManager.PERMISSION_GRANTED,那么权限申请成功;如果是 PackageManager.PERMISSION_DENIED,那么权限申请失败。
二、Fragment 中运行时权限的特殊处理
在 Fragment 中申请权限时,不要使用 ActivityCompat.requestPermissions 方法,而应该直接使用 Fragment 的 requestPermissions 方法。否则,申请回调结果将被传递到 Activity 的 onRequestPermissionsResult 方法中,而不是 Fragment 的 onRequestPermissionsResult 方法中。
如果在 Fragment 中嵌套了子 Fragment,並且在子 Fragment 中使用 requestPermissions 方法,那么申请回调结果将不会被传递回来。此时,可以使用 getParentFragment().requestPermissions 方法来将申请回调结果传递到父 Fragment 中。例如:
```
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
// 传递申请回调结果到子 Fragment 中
getParentFragment().onRequestPermissionsResult(requestCode, permissions, grantResults);
}
```
三、权限申请的注意事项
在申请权限时,需要注意以下几点:
* 权限申请需要在主线程中进行。
* 权限申请需要在 Activity 或 Fragment 中进行,不可以在其他线程中进行。
* 权限申请结果需要在 onRequestPermissionsResult 方法中处理。
四、常见权限列表
以下是 Android 中常见的一些权限:
* android.permission.INTERNET:访问互联网的权限。
* android.permission.READ_EXTERNAL_STORAGE:读取外部存储器的权限。
* android.permission.WRITE_EXTERNAL_STORAGE:写入外部存储器的权限。
* android.permission.CAMERA:访问摄像头的权限。
* android.permission.RECORD_AUDIO:访问麦克风的权限。
这些权限都是 Android 中最基本的权限,但是不同的应用程序可能需要申请不同的权限。开发者需要根据自己的应用程序的需求来申请相应的权限。
2017-06-19 上传
2018-10-31 上传
165 浏览量
2021-01-20 上传
2021-01-20 上传
2020-08-28 上传
2020-08-31 上传
点击了解资源详情
点击了解资源详情
weixin_38552292
- 粉丝: 6
- 资源: 894
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器