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

Android应用使用Dexter请求外部存储读取权限无弹窗问题

Android Dexter框架请求READ_EXTERNAL_STORAGE权限弹窗不显示的解决办法

我在Android应用中使用Dexter框架请求READ_EXTERNAL_STORAGE权限以读取手机歌曲,但应用启动后权限请求弹窗完全不显示。已完成的配置如下:

  1. Dexter代码配置:
Dexter.withContext(this)
        .withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
        .withListener(new PermissionListener() {
            @Override
            public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                Toast.makeText(MainActivity.this, "Runtime Permission given", Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {

            }

            @Override
            public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
               permissionToken.continuePermissionRequest();
            }
        })
        .check();
  1. AndroidManifest.xml权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  1. build.gradle依赖引入:
implementation 'com.karumi:dexter:6.2.3'

已导入android.Manifest,期望出现权限请求弹窗。以下是针对性的解决办法:

  • 适配Android 13+的权限变更
    Android 13(API 33)及以上版本中,READ_EXTERNAL_STORAGE权限已被废弃,读取音频文件需要使用READ_MEDIA_AUDIO权限。此时请求旧权限不会触发弹窗,系统会直接视为已授予。
    修改代码中的权限为Manifest.permission.READ_MEDIA_AUDIO,同时在Manifest中添加对应权限声明:

    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    
  • 处理权限永久拒绝的情况
    如果用户之前勾选了"不再询问"并拒绝权限,Dexter不会再弹出请求弹窗,直接进入onPermissionDenied回调。可以在该方法中添加逻辑引导用户前往应用设置页手动开启权限:

    @Override
    public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
        if (permissionDeniedResponse.isPermanentlyDenied()) {
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            Uri uri = Uri.fromParts("package", getPackageName(), null);
            intent.setData(uri);
            startActivity(intent);
        }
    }
    
  • 确认权限请求的执行时机
    确保权限请求代码在Activity的onCreate、onResume等生命周期方法中执行,且Activity已完成初始化。避免在非UI线程或未绑定有效上下文的场景(如Application的onCreate)中调用。

  • 验证依赖同步状态
    执行File -> Sync Project with Gradle Files确保Dexter依赖已正确导入项目。若存在依赖冲突,可通过gradlew app:dependencies命令查看依赖树,排除冲突的第三方库。

  • 检查系统权限管理设置
    部分国产ROM(如小米、华为)自带自动权限管理功能,可能默认授予或屏蔽权限请求弹窗。可前往手机设置的应用权限页面,重置当前应用的权限状态后重新测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:45:24