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
相关产品推荐
相关产品推荐

