多权限批量申请与回调校验:android-RuntimePermissions的onRequestPermissionsResult与PermissionUtil设计剖析
【免费下载链接】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),仅供参考

相关新闻

C++高频交易系统:毫秒级确定性执行的工程实践

C++高频交易系统:毫秒级确定性执行的工程实践

简介:本资源是一套基于C实现的高频交易系统源码,面向金融工程学习者、量化开发初学者及C进阶程序员,聚焦盘口价差分析与低延迟交易逻辑建模,助力理解HFT核心机制并动手复现关键模块。压缩包共16个文件(20KB&#xff09…

2026/10/14 19:08:21 阅读更多 →
C#订单管理系统开发实战:状态机与事务控制的核心设计

C#订单管理系统开发实战:状态机与事务控制的核心设计

简介:一份C#订单管理系统项目源码,适合.NET初学者、软件专业学生及中小企业信息化人员参考,覆盖订单创建、查询、催货、延迟付款到报表打印等典型业务环节。整个资源包共117个文件,压缩后仅1.34MB,以25个C#源码文件&am…

2026/10/14 19:08:21 阅读更多 →
计算机毕业设计题目怎么选?Web系统、小程序、AI、深度学习、大数据这几类高通过率选题方向值得参考

计算机毕业设计题目怎么选?Web系统、小程序、AI、深度学习、大数据这几类高通过率选题方向值得参考

💖💖作者:IT跃迁谷毕设展 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数…

2026/10/14 19:07:20 阅读更多 →

最新新闻

yolov8-face 核心算子全解析:NMS、边界框格式转换与掩码处理的源码级指南

yolov8-face 核心算子全解析:NMS、边界框格式转换与掩码处理的源码级指南

人工智能计算机视觉深度学习 【免费下载链接】yolov8-face yolov8 face detection with landmark 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-face 点击查看 免费下载 本文是 ops.md 参考文档的深度展开,以 ultralytics/yolo/utils/ops.py 为…

2026/10/14 20:49:14 阅读更多 →
自学嵌入式第二天(C语言篇——数据类型)

自学嵌入式第二天(C语言篇——数据类型)

琐碎的敲代码内功。(以为很简单 ,结果全是坑)1.C语言提供的数据类型2.整数类型常量:在程序运行过程中,其值不能被改变的量变量:在程序运行过程中,其值能被改变的量(1)整型…

2026/10/14 20:49:14 阅读更多 →
openJiuwen 记忆引擎基础模型:MemInfo 单条记忆信息结构全解

openJiuwen 记忆引擎基础模型:MemInfo 单条记忆信息结构全解

人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习 【免费下载链接】agent-core-java openJiuwen agent core Java是 openJiuwen Core的 Java版本,提供AI Agent开发、运行、调优与演进相关的全套SDK能力。 项目地址: https://gitco…

2026/10/14 20:49:14 阅读更多 →
模拟退火求解二维装箱问题:原理、实现与工程调优

模拟退火求解二维装箱问题:原理、实现与工程调优

模拟退火算法求解装箱问题,我第一次真正上手,是在一个托盘排样项目里。需求方只说了一句话:把尺寸不一的纸箱尽量多地放进托盘,允许90度旋转,不许压坏。我当时觉得,这就是矩形排样,先求个面积下…

2026/10/14 20:49:14 阅读更多 →
51单片机DHT11温湿度采集实战:从仿真到实物的完整拆解

51单片机DHT11温湿度采集实战:从仿真到实物的完整拆解

简介:一套以51单片机为核心的温湿度采集监控完整工程,面向电子爱好者、嵌入式初学者及课程设计学生。资料基于Keil平台,由C语言编写,实现温湿度采集(SHT10传感器)、日历时钟(DS1302)…

2026/10/14 20:49:14 阅读更多 →
Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现财务审计中监管合规性的自动验证,旨在解决传统审计中人工验证合规性的低效问题。研究对比了开源LLMs(如Llama-2系列)与专有LLMs(如OpenAI的GPT系列)在合规性检测中的性能,使用了普华永道(PwC)提供的两个自定义…

2026/10/14 20:48:13 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →