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

Android 11/12中mkdir()无法创建Android/data目录的解决方案咨询

在Android 11/12中创建Android/data下应用专属目录的正确方式

问题原因

Android 11(API 30)及以上系统启用了**Scoped Storage(分区存储)**机制,Android/data/[你的包名]属于应用的专属外部存储目录,系统禁止通过硬编码路径的方式直接创建或访问该目录——即使你申请了WRITE_EXTERNAL_STORAGE权限,该权限在Android 11+对这类专属目录也不再生效,这就是你之前的代码失效的原因。

正确解决方案

无需手动创建该根目录,系统会通过官方API自动为你维护,直接使用以下方式获取或操作该目录即可:

  1. 获取应用专属外部存储根目录
    利用Context提供的getExternalFilesDir()方法,它会直接返回Android/data/com.moh.phc.phcis/files目录,且如果目录不存在,系统会自动创建。若你需要的是Android/data/com.moh.phc.phcis这个根目录,只需取它的父目录:

    // 获取files目录,对应Android/data/com.moh.phc.phcis/files
    File filesDir = getExternalFilesDir(null);
    // 获取应用专属根目录Android/data/com.moh.phc.phcis
    File appRootDir = filesDir.getParentFile();
    
  2. 在专属目录下创建子目录
    如果需要在根目录下创建子文件夹,直接基于上述目录对象操作即可,无需额外权限:

    File subFolder = new File(appRootDir, "custom_subfolder");
    if (!subFolder.exists()) {
        // 创建多级子目录用mkdirs(),单级用mkdir()
        subFolder.mkdirs();
    }
    

注意事项

  • 不要通过硬编码路径拼接的方式访问Android/data下的任何目录,分区存储机制会直接拦截这类操作。
  • WRITE_EXTERNAL_STORAGE权限在Android 11+仅对公共共享目录(如Downloads、Pictures)有效,且访问这些目录需要使用MediaStore或存储访问框架(SAF)。
  • 若需兼容Android 10,可在AndroidManifest.xml的<application>标签中添加android:requestLegacyExternalStorage="true",但这是临时兼容方案,Android 12及以上该属性已失效,建议彻底迁移到分区存储API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:35:24