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

Android Java权限申请时onRequestPermissionsResult回调未触发

问题根因

你的权限回调始终不触发,核心错误是对权限回调的实现逻辑理解有误:
OnRequestPermissionsResultCallback 不是你随便new一个匿名实例就能自动接收系统返回结果的,你创建的这个匿名对象既没有绑定到发起申请的Activity/Fragment,也没有被系统注册,系统完全不知道这个回调的存在,自然不会调用它。
另外你代码里所有Toast.makeText()之后都没调用.show(),就算逻辑走到了也不会弹出提示。

正确实现方案

权限申请的结果回调是Activity和Fragment的内置生命周期方法,必须重写对应组件的onRequestPermissionsResult方法,系统才会在用户操作权限弹窗后把结果回传给你。
正确代码如下:

// 权限请求码建议定义成常量,避免硬编码魔法值
private final int CAMERA_PERMISSION_REQ_CODE = 1;

void checkPermissions(){
    if(ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED){
        // 直接发起权限申请即可,不需要在申请前单独new回调对象
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQ_CODE);
    } else {
        // 注意Toast必须调用show()才会生效
        Toast.makeText(this, "Permission Granted", Toast.LENGTH_LONG).show();
        // 执行需要相机权限的业务逻辑
        doCameraRelatedWork();
    }
}

// 重写所在Activity的权限结果回调,系统会自动调用这个方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == CAMERA_PERMISSION_REQ_CODE && grantResults.length > 0){
        for (int result : grantResults) {
            if(result != PackageManager.PERMISSION_GRANTED){
                Toast.makeText(this, "Permission Not Yet Granted", Toast.LENGTH_LONG).show();
                return;
            }
        }
        // 所有权限已授予,执行业务逻辑
        doCameraRelatedWork();
    }
}

private void doCameraRelatedWork(){
    // 这里写需要相机权限的业务代码
}
避坑提示
  • 如果是在Fragment中发起权限申请,一定要调用Fragment自身的requestPermissions方法,不要用宿主Activity的方法发起,否则回调只会走到Activity层,不会触发Fragment的回调
  • 如果项目适配了AndroidX,建议直接使用Activity Result API实现权限申请,不需要自己重写回调方法,代码更简洁也不容易出错
  • 不要在权限回调里持有长生命周期引用,避免内存泄漏

内容的提问来源于stack exchange,提问作者Confidence

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:27:19