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

Android 10无法将文件添加至指定存储文件夹问题咨询

Android 10(API 29)开始引入分区存储机制,普通应用默认无法直接在内部存储根目录创建自定义文件夹,getExternalStorageDirectory虽被标记废弃但仍可在符合权限要求的场景使用,以下是两种适配方案:

方案1:在内部存储根目录创建/MyApp文件夹

该方案可以实现你需要的/storage/emulated/0/MyApp路径,但需要申请特殊权限,上架应用商店时需符合对应使用场景要求:

步骤1:配置AndroidManifest.xml

<!-- 安卓9及以下存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<!-- 安卓11及以上所有文件访问权限 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

<application
    ...
    <!-- 安卓10兼容配置 -->
    android:requestLegacyExternalStorage="true">
    ...
</application>

步骤2:动态申请权限

  • Android 6.0~9.0:动态申请WRITE_EXTERNAL_STORAGE权限
  • Android 10.0:动态申请READ_EXTERNAL_STORAGE权限
  • Android 11.0及以上:跳转系统设置页引导用户开启「所有文件访问权限」

步骤3:创建文件夹及文件的代码

File rootDir = Environment.getExternalStorageDirectory();
File myDir = new File(rootDir, "MyApp");
if (!myDir.exists()) {
    // 改用mkdirs,避免父目录不存在时创建失败
    myDir.mkdirs();
}
File file = new File(myDir, customer+"_"+date+".pdf");

方案2:合规替代方案(推荐)

如果不需要严格放在根目录,可以将自定义文件夹放在系统公共下载目录下,路径为/storage/emulated/0/Download/MyApp,用户同样可以从系统文件管理器直接访问,不需要申请高危特殊权限,上架无额外限制:

代码实现

// 获取系统公共下载目录
File publicDownloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File myDir = new File(publicDownloadDir, "MyApp");
if (!myDir.exists()) {
    myDir.mkdirs();
}
File file = new File(myDir, customer+"_"+date+".pdf");

权限配置

只需正常申请基础存储权限即可,不需要MANAGE_EXTERNAL_STORAGE权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:10