Android 6.0动态权限申请详解及处理技巧

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 中最基本的权限,但是不同的应用程序可能需要申请不同的权限。开发者需要根据自己的应用程序的需求来申请相应的权限。