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

Android中用Dexter v6.2.3申请RECORD_AUDIO权限遇REQUEST_ONGOING错误求助

使用Dexter v6.2.3申请RECORD_AUDIO权限时触发REQUEST_ONGOING错误的解决方法

我在Android Studio中使用Dexter v6.2.3处理RECORD_AUDIO权限申请时,withErrorListener方法触发了错误,错误信息为REQUEST_ONGOING。已在Manifest.xml中声明该权限,相关代码、依赖配置及Logcat日志如下:

权限申请代码

Dexter.withActivity(MainActivity.this).withPermission(android.Manifest.permission.RECORD_AUDIO).withListener(new PermissionListener() {
      @Override
      public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                showSpeechSheetDialog();
            }

            @Override
            public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
                if (permissionDeniedResponse.isPermanentlyDenied()) {
                    showCustomDialog("Permission Required", "Record audio permission required to use this feature. You can grant this permission in app settings.", "Cancel",
                            null, "Go to Settings", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    dialog.cancel();
                                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                                    intent.setData(uri);
                                    startActivity(intent);
                                }
                            });
                }
            }

            @Override
            public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
                permissionToken.continuePermissionRequest();
            }
        }).withErrorListener(new PermissionRequestErrorListener() {
            @Override
            public void onError(DexterError dexterError) {
                Log.e("Dexter error", dexterError.toString());
            }
        }).check();

依赖配置

implementation 'com.karumi:dexter:6.2.3'

Logcat日志

2023-08-20 13:59:40.595  6153-6153  Dexter error            com.pratapbrothers.dotted.pizza      E  REQUEST_ONGOING

问题原因及解决办法

REQUEST_ONGOING错误表示当前已有未完成的权限请求在处理中,Dexter不允许同时发起多个权限请求。

解决步骤:

  • 排查重复调用:确认权限申请代码是否被多次触发(比如按钮重复绑定点击事件、生命周期方法中重复调用)。如果是点击触发,确保事件只绑定一次,或通过标志位拦截重复请求。
  • 添加请求状态标记:在Activity中维护布尔变量标记请求状态,发起前检查,回调完成后重置:
    private boolean isPermissionRequestInProgress = false;
    
    private void requestRecordAudioPermission() {
        if (isPermissionRequestInProgress) {
            return;
        }
        isPermissionRequestInProgress = true;
        Dexter.withActivity(MainActivity.this)
                .withPermission(android.Manifest.permission.RECORD_AUDIO)
                .withListener(new PermissionListener() {
                    @Override
                    public void onPermissionGranted(PermissionGrantedResponse response) {
                        isPermissionRequestInProgress = false;
                        showSpeechSheetDialog();
                    }
    
                    @Override
                    public void onPermissionDenied(PermissionDeniedResponse response) {
                        isPermissionRequestInProgress = false;
                        if (response.isPermanentlyDenied()) {
                            // 原有弹窗逻辑
                        }
                    }
    
                    @Override
                    public void onPermissionRationaleShouldBeShown(PermissionRequest request, PermissionToken token) {
                        token.continuePermissionRequest();
                    }
                })
                .withErrorListener(error -> {
                    isPermissionRequestInProgress = false;
                    Log.e("Dexter error", error.toString());
                })
                .check();
    }
    
  • 规避生命周期冲突:避免在onResume这类重复执行的生命周期方法中直接调用权限申请,或添加判断逻辑确保仅在必要时发起请求。
  • 确认Dexter初始化:v6.x版本无需手动初始化,若有自定义配置,确保初始化代码仅执行一次(如在Application类中)。

内容的提问来源于stack exchange,提问作者Surya Pratap Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:05:21