You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fragment中使用RequestPermission的registerForActivityResult不生效问题

问题原因及解决方案

核心原因

你遇到的权限回调不触发问题主要由以下2个常见原因导致:

  • 你使用的androidx.fragment:1.4.0-rc01属于预览测试版本,存在Fragment权限请求回调丢失的已知官方bug,该版本的Activity Result API权限分发逻辑存在缺陷。
  • 宿主Activity如果重写了onRequestPermissionsResult方法但未调用父类super实现,会导致权限结果无法向下分发到Fragment的回调。

修复步骤

步骤1:升级依赖到稳定版

将build.gradle中的依赖替换为同系列稳定版即可修复版本bug:

// 替换原有的activity和fragment依赖,选用更高的稳定版即可,这里以1.5.7为例
implementation 'androidx.activity:activity:1.5.7'
implementation 'androidx.fragment:fragment:1.5.7'

同步依赖后重新编译测试即可,绝大多数情况下该问题会直接解决。

步骤2:检查宿主Activity的权限回调

如果升级后问题依旧存在,检查承载该Fragment的AppCompatActivity是否重写了onRequestPermissionsResult,确保已添加super调用:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    // 必须保留这行父类调用,否则权限结果无法分发到Fragment
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    // 你的其他自定义权限逻辑
}

可选优化

官方推荐registerForActivityResult在组件初始化阶段完成注册,你可以将当前写在onAttach中的注册逻辑移到Fragment的onCreate方法中,进一步避免生命周期异常导致的注册丢失。


内容的提问来源于stack exchange,提问作者Војин Петровић

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:02