【免费下载链接】android-RuntimePermissionsThis sample has been deprecated/archived. Check this repo for related samples:项目地址https://gitcode.com/gh_mirrors/and/android-RuntimePermissions点击查看免费下载⚠️ 提示该示例项目已被 Google 归档只读、不再维护但其权限申请的核心设计模式至今仍是 Android 开发的标准参考。android-RuntimePermissions 是 Android 官方出品的运行时权限Runtime Permissions示例项目。它用一个极简的 Demo 演示了两条主线如何一次性批量申请多个权限以及在 onRequestPermissionsResult 回调中如何校验整批权限是否全部被用户授予。其中PermissionUtil.verifyPermissions的全量校验设计是批量权限处理最值得学习的部分。一、这个示例解决什么问题从 Android 6.0API 23开始CAMERA、READ_CONTACTS等危险权限不再随安装自动授予必须在运行时动态申请。批量申请场景一次要多个权限有两个典型难点场景申请方式回调校验方式单个权限示例中相机传 1 个元素的数组 REQUEST_CAMERA直接判断grantResults[0]批量权限示例中联系人读写传多个权限数组 REQUEST_CONTACTS用PermissionUtil.verifyPermissions遍历校验示例的权限声明位于 AndroidManifest.xml相机权限普通声明联系人权限使用uses-permission-sdk-23标记为仅 M 及以上才请求的可选权限——这是批量申请前的标准做法。二、批量申请的完整流程四步走核心实现在 MainActivity.java流程可拆为四步预检查点击按钮后先用ActivityCompat.checkSelfPermission确认权限是否已授予已授予则直接展示功能避免反复弹窗打扰用户解释用途若用户之前拒绝过调用shouldShowRequestPermissionRationale判断是否需要用 Snackbar 先解释为什么需要这个权限解释完再由用户主动触发申请批量申请把READ_CONTACTS和WRITE_CONTACTS组成数组PERMISSIONS_CONTACT连同请求 IDREQUEST_CONTACTS一起交给ActivityCompat.requestPermissions发起申请——一次弹窗、多个权限回调校验在onRequestPermissionsResult中按requestCode分流批量场景调用PermissionUtil.verifyPermissions(grantResults)做整体验证。 关键设计requestCode示例中REQUEST_CAMERA 0、REQUEST_CONTACTS 1是区分哪一次申请的结果回来了的唯一依据这是新手最常踩的坑。三、PermissionUtil.verifyPermissions批量校验的核心设计工具类位于 PermissionUtil.java全部逻辑只有十几行public static boolean verifyPermissions(int[] grantResults) { if (grantResults.length 1) { return false; } for (int result : grantResults) { if (result ! PackageManager.PERMISSION_GRANTED) { return false; } } return true; }三点设计值得借鉴全量通过才算成功只要有一个权限不是PERMISSION_GRANTED就整体返回false。对读写联系人这种功能而言缺一半权限功能无法完整使用部分授予按失败处理是更稳妥的产品决策防御性判空先检查grantResults.length 1避免空数组被误判为全部授予与系统 API 对齐返回值语义直接对应Activity.onRequestPermissionsResult的grantResults参数Javadoc 中用see明确关联降低理解成本。四、onRequestPermissionsResult三参数回调如何分流回调签名见 MainActivity.java 回调实现onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)requestCode区分是哪次申请相机 or 联系人permissions本次申请的权限列表可用于日志或精细提示grantResults与permissions一一对应的每个权限的授予结果这才是校验重点。分流后的处理差异一目了然相机场景只需grantResults.length 1 grantResults[0] PERMISSION_GRANTED联系人场景则整体交给PermissionUtil.verifyPermissions通过后弹出 Snackbar 提示权限已授予否则提示Permissions were not granted.。两条分支互不干扰这正是用 requestCode 分流 通用工具类校验架构的价值。五、Kotlin 版实现与一个隐藏的坑项目附带完整的 Kotlin 重写版位于 kotlinApp/app/src/main/java/com/example/android/system/runtimepermissions/MainActivity.kt。它把常用 API 封装成了扩展函数如batchRequestPermissions、isPermissionGranted见 AppCompatActivityExts.kt回调校验则使用了 CollectionsExts.kt 中的扩展fun IntArray.containsOnly(num: Int): Boolean filter { it num }.isNotEmpty()⚠️避坑提醒从方法名看它应表示全部元素都等于 num但实现是过滤后非空即只要有一个元素等于 num 就返回 true。这意味着用户只授予READ_CONTACTS而拒绝WRITE_CONTACTS时该判断也会放行——与 Java 版verifyPermissions的全部授予语义不一致。若你在自己的项目中参考这套写法请改为all { it num }之类的严格校验。六、批量权限申请最佳实践清单步骤要点① 声明所有权限先在 AndroidManifest.xml 中声明② 预检查checkSelfPermission已授予则跳过申请③ 解释shouldShowRequestPermissionRationale判断是否需要二次说明④ 申请一次requestPermissions传入权限数组 唯一requestCode⑤ 校验回调中按requestCode分流批量结果用全量通过策略参考PermissionUtil七、示例文件导航权限工具类Application/src/main/java/com/example/android/system/runtimepermissions/PermissionUtil.java主 Activity申请与回调Application/src/main/java/com/example/android/system/runtimepermissions/MainActivity.java相机单权限场景CameraPreviewFragment.java联系人批量权限场景ContactsFragment.javaKotlin 版扩展函数extensions/ 目录项目说明README.md获取示例代码git clone https://gitcode.com/gh_mirrors/and/android-RuntimePermissions克隆后用 Android Studio 打开ApplicationJava 版或kotlinAppKotlin 版模块即可运行在 Android 6.0 及以上设备上点击 Show and add contacts 按钮即可完整体验多权限批量申请与回调校验的全过程。赞分享【免费下载链接】android-RuntimePermissionsThis sample has been deprecated/archived. Check this repo for related samples:项目地址https://gitcode.com/gh_mirrors/and/android-RuntimePermissions点击查看免费下载相关推荐GoGoGo权限动态申请onRequestPermissionsResult实现与用户引导GoGoGo权限动态申请onRequestPermissionsResult实现与用户引导 一、Android权限机制与定位类应用的特殊性 Android权限移动开发AllLive完全指南如何一站式获取四大直播平台实时弹幕与直播信息AllLive完全指南如何一站式获取四大直播平台实时弹幕与直播信息 想要同时观看虎牙、斗鱼、哔哩哔哩和抖音四大直播平台的精彩内容吗AllLive正是您需要的Apache Pulsar 多 Topic 权限批量授权与回收PIP-383 设计与实现深度解析Apache Pulsar 多 Topic 权限批量授权与回收PIP 383 设计与实现深度解析 Apache Pulsar 在命名空间级别管理权限策略当同消息队列流处理后端微服务消息路由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考