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

Dexter权限监听实现报错求助:未实现抽象方法及引用问题

Dexter权限框架报错排查与解决

错误原因与修复方案

1. 未实现接口抽象方法/方法签名错误

  • 问题:Kotlin实现接口方法必须添加override关键字;onPermissionsChecked参数类型误写为MultiplePermissionsListener(实际应为MultiplePermissionsReport);onPermissionRationaleShouldBeShown缺失PermissionToken参数且未加override。
  • 修复:给接口方法加上override,修正参数类型,补全缺失的PermissionToken参数。

2. 无法解析areAllPermissionsGranted和isAnyPermissionPermanentlyDenied

  • 问题:onPermissionsChecked参数类型错误(写成了MultiplePermissionsListener),而这两个方法属于MultiplePermissionsReport类。
  • 修复:将参数类型改为MultiplePermissionsReport。

3. 链式调用逻辑混乱

  • 问题:原代码重复调用withErrorListener、onSameThread()和check(),导致流程错误。
  • 修复:删除重复的链式调用代码段。

修正后的完整代码

fun requestPermissions() {
    Dexter.withActivity(this)
        .withPermissions(
            Manifest.permission.READ_CONTACTS,
            Manifest.permission.CALL_PHONE,
            Manifest.permission.SEND_SMS,
            Manifest.permission.WRITE_CONTACTS
        )
        .withListener(object : MultiplePermissionsListener {
            override fun onPermissionsChecked(report: MultiplePermissionsReport) {
                if (report.areAllPermissionsGranted()) {
                    getContacts()
                    Toast.makeText(this@MainActivity, "所有权限已授予", Toast.LENGTH_SHORT).show()
                }
                if (report.isAnyPermissionPermanentlyDenied()) {
                    showSettingsDialog()
                }
            }

            override fun onPermissionRationaleShouldBeShown(
                permissions: List<PermissionRequest>,
                token: PermissionToken
            ) {
                // 可在此添加权限必要性提示逻辑,比如弹窗告知用户
                token.continuePermissionRequest()
            }
        })
        .withErrorListener(object : PermissionRequestErrorListener {
            override fun onError(error: DexterError) {
                Toast.makeText(applicationContext, "权限请求出错", Toast.LENGTH_SHORT).show()
            }
        })
        .onSameThread()
        .check()
}

额外说明

  • onPermissionRationaleShouldBeShown方法必须处理PermissionToken,调用token.continuePermissionRequest()或token.cancelPermissionRequest(),否则权限请求流程会卡住。
  • 错误回调的参数类型应为DexterError,原代码误写为Dexter,已修正。

内容的提问来源于stack exchange,提问作者Ngô Thị Hằng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:52:47