安卓应用开发:如何创建可公开访问的应用数据存储文件夹?
如何创建可公开访问的应用数据文件夹
首先明确: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(); }
创建后的文件夹会直接出现在文件管理器对应分类下,所有应用和用户都能访问。
- 若需创建非媒体类公开文件,可使用
MediaStoreAPI写入公共目录,但上述公共目录方式更简洁高效。
Android 9及以下(API 28-)
此版本支持直接在外部存储根目录创建公开文件夹,但需申请存储权限:
- 在
AndroidManifest.xml中声明权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- 动态申请权限(Java示例):
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 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
相关产品推荐
相关产品推荐

