Android 6.0动态权限申请详解及处理技巧
186 浏览量
更新于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 上传
2023-12-23 上传
2023-08-20 上传
2023-05-26 上传
2023-10-03 上传
2023-05-26 上传
2023-10-03 上传
2023-06-28 上传
weixin_38552292
- 粉丝: 6
- 资源: 894
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展