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

安卓应用开发:如何创建可公开访问的应用数据存储文件夹?

如何创建可公开访问的应用数据文件夹

首先明确:storage/emulated/0就是外部存储的根目录,本身属于公开可访问区域,但不同Android版本的存储权限规则不同,以下分版本说明操作方式:

Android 10及以上(API 29+)

从Android 10开始启用分区存储,禁止直接在外部存储根目录随意创建自定义文件夹,需借助系统提供的公共目录来创建公开可访问的文件夹,比如下载、图片、文档目录等:

  • 示例代码(Java):创建图片目录下的自定义公开文件夹
// 可替换为DIRECTORY_DOWNLOADS/DIRECTORY_DOCUMENTS等系统公共目录
File publicFolder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyAppPublicData");
// mkdirs()支持创建多层嵌套目录,mkdir()仅支持单层
if (!publicFolder.exists()) {
    publicFolder.mkdirs();
}

创建后的文件夹会直接出现在文件管理器对应分类下,所有应用和用户都能访问。

  • 若需创建非媒体类公开文件,可使用MediaStore API写入公共目录,但上述公共目录方式更简洁高效。

Android 9及以下(API 28-)

此版本支持直接在外部存储根目录创建公开文件夹,但需申请存储权限:

  1. 在AndroidManifest.xml中声明权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. 动态申请权限(Java示例):
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
  1. 权限通过后创建文件夹:
File rootPublicFolder = new File(Environment.getExternalStorageDirectory(), "MyAppPublicData");
if (!rootPublicFolder.exists()) {
    rootPublicFolder.mkdirs();
}

额外注意事项

  • 始终使用mkdirs()创建目录,避免因父目录不存在导致创建失败。
  • 若创建的文件夹在文件管理器中未立即显示,可触发媒体扫描刷新:
MediaScannerConnection.scanFile(this, new String[]{publicFolder.getAbsolutePath()}, null, null);
  • Android 11(API 30)及以上,即使申请了WRITE_EXTERNAL_STORAGE权限,也无法直接操作根目录下的非系统公共文件夹,必须遵循分区存储规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:51:45