关于 android-permissions-activity-results
面向 Android 开发者的权限与 Activity Result 流程指南,优先考虑按能力选择的 Picker、符合生命周期的 Contract,以及拒绝和有限访问的恢复处理,并关注 API 级别差异。
主要功能
- 01选择 Activity Result Contract
- 02建模权限状态
- 03优先使用 Picker 的能力流程
- 04检查 Android API 级别行为
- 05从设置返回后重新验证
- 06处理拒绝与有限访问的恢复
适用场景
- 01设计相机权限流程
- 02处理照片与文档选择
- 03审查通知权限行为
- 04检查设置返回后的权限恢复
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ krutikjain/ android-agent-skills --skill android-permissions-activity-results安装后在 Claude Code 中输入/android-permissions-activity-results确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/official-links.mdpatterns.mdscenarios.mdscripts/run_examples.sh详细介绍
Android 权限活动结果
适用场景
- 当请求涉及以下内容时使用此技能:Android 权限请求流程、Android Activity Result API、Android 应用中的相机权限。
- 主要目标:在 Android 流程中使用现代权限请求、Activity Result API 和按功能能力控制的 UX。
- 需要查看选择器与权限对照表或 API 级别行为检查清单时,请阅读
references/patterns.md。 - 查看照片选择器、通知权限和有限媒体访问示例时,请阅读
references/scenarios.md。 - 范围扩展时转交给以下技能:
android-media-files-sharingandroid-testing-ui
工作流
- 从用户所需的功能能力入手,而不是权限名称:照片选择器、文档选择器、相机拍摄或通知授权通常可以避免申请范围更广的运行时权限。
- 选择合适的 Activity Result 契约,并将启动器放在生命周期稳定的所有者中,例如 activity、fragment 或记忆化的 Compose 启动器。
- 明确建模完整的权限状态:已授予、已拒绝、永久拒绝、有限/已选内容访问、单次访问,以及通过设置恢复访问。
- 考虑 API 级别差异,例如 Android 13+ 中的
POST_NOTIFICATIONS、大致位置与精确位置的区别、作为独立流程的后台位置,以及 Android 14 的已选照片访问。 - 从设置或选择器流程返回后重新检查功能能力,并验证屏幕旋转、进程死亡和拒绝后的恢复流程,不要假设一切都会顺利完成。
防护措施
- 将加载、空状态、错误、离线和权限被拒状态视为一等 UI 状态。
- 不要在没有用户操作或明确副作用的情况下,直接从组合中启动权限或选择器契约。
- 优先使用范围最窄的功能能力入口,例如 Photo Picker 或 SAF,而不是范围广泛的存储权限。
- 确保权限恢复流程可测试:理由说明、跳转设置、拒绝状态以及返回后的重新验证。
反模式
- 认为产品流程只需处理顺利完成的情况。
- 在用户拒绝后反复请求权限,而不是提供明确的设置恢复或替代路径。
- Photo Picker 或文档契约已足够时,仍请求媒体或存储访问权限。
- 将 Android 14 的已选照片访问视为对完整媒体库的访问。
审查重点
- 此功能能否使用选择器或契约,而不是运行时权限?
- 流程能否正确处理拒绝、有限访问和从设置返回?
- 权限启动是否由正确的生命周期作用域管理,并在恰当时机发起?
- 是否针对相关情况说明了 Android 13+ 和 Android 14+ 的平台特定行为?
示例
顺利完成
- 场景:在提出流程变更前,先查找仓库中 Activity Result 和权限相关的位置。
- 命令:
rg -n "rememberLauncherForActivityResult|RequestPermission|RequestMultiplePermissions|PickVisualMedia|OpenDocument|TakePicture" examples
边缘情况
- 场景:检查通知和媒体访问路径是否考虑了 API 级别特定行为。
- 命令:
rg -n "POST_NOTIFICATIONS|READ_MEDIA_|READ_EXTERNAL_STORAGE|PickVisualMedia" examples
失败恢复
- 场景:区分权限提示与媒体共享及测试请求。
- 命令:
python3 scripts/eval_triggers.py --skill android-permissions-activity-results
完成检查清单
- 在可行的情况下,所选契约或选择器的范围比广泛权限更窄。
- 已对拒绝、永久拒绝、有限访问以及从设置返回后的状态进行建模。
- 已说明受影响 Android 版本之间的 API 级别差异。
- 恢复 UI 和可观测性均已明确说明,而非仅作暗示。
Official References
- https://developer.android.com/training/permissions/requesting
- https://developer.android.com/training/basics/intents/result
- https://developer.android.com/training/data-storage/shared/photopicker
- https://developer.android.com/about/versions/14/changes/partial-photo-video-access
- https://developer.android.com/develop/ui/views/notifications/notification-permission
- https://developer.android.com/privacy-and-security/minimize-permission-requests
评论
支持 Markdown