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

Android11下targetSdk=30应用获取/storage子列表始终返回null求助

解决方案

核心原因

Android 11(API 30)的分区存储机制中,MANAGE_EXTERNAL_STORAGE 属于特殊的「所有文件访问权限」,仅在AndroidManifest.xml中声明不会自动生效,必须完成权限授予后才能访问/storage这类公共根目录。普通存储权限WRITE_EXTERNAL_STORAGE在API 30及以上版本已经失效,不会对全目录访问产生作用。

操作步骤

  • 方案一:手动授予权限(适合内部测试场景,无需修改代码)
    进入系统设置 → 应用 → 找到你的应用 → 权限管理 → 找到「存储」相关权限分类 → 选择「允许访问所有文件」即可。
  • 方案二:代码引导申请权限(适合常规使用场景)
    在调用目录读取代码前,先判断并触发权限申请流程,Kotlin示例代码如下:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        // 检查是否已经获得所有文件访问权限
        if (!Environment.isExternalStorageManager()) {
            // 跳转系统权限授予页引导用户开启
            val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
            startActivity(intent)
        } else {
            // 已授权,直接读取目录
            val childList = Environment.getStorageDirectory().list()
            // 后续处理逻辑
        }
    }
    

注意:上述逻辑对Android 12、13、14版本完全兼容,无需额外适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:27:03