Android 6.0及以上版本动态申请权限

需积分: 9 0 下载量 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及更高版本中顺利处理权限管理。