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

Android Studio(Kotlin)能否将图片保存至Documents目录?

解决方案:将图片与PDF共存于Documents目录

情况1:使用应用私有外部存储(推荐,无系统限制)

如果不需要让其他应用访问这些文件,直接用应用私有外部存储的Documents子目录即可——这里不受MediaStore的媒体类型目录限制,你可以随意存储PDF、图片等任意文件,卸载应用时这些文件会被自动清理。

获取私有Documents目录路径的代码:

File docsDir = new File(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS), "你的自定义子目录");
if (!docsDir.exists()) {
    docsDir.mkdirs();
}
// 存图片
File imageFile = new File(docsDir, "test.jpg");
// 写入图片数据到imageFile即可

情况2:使用公共Documents目录(需共享给其他应用)

如果要把文件存在公共Documents目录供其他应用访问,别用MediaStore.Images.Media来插入图片,改用MediaStore.Files类,它支持将任意类型的文件存到公共Documents目录,绕过媒体类型对应目录的限制。

示例代码:

ContentValues values = new ContentValues();
values.put(MediaStore.Files.FileColumns.DISPLAY_NAME, "test.jpg");
values.put(MediaStore.Files.FileColumns.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Files.FileColumns.RELATIVE_PATH, Environment.DIRECTORY_DOCUMENTS + "/你的自定义子目录");

Uri uri = getContentResolver().insert(MediaStore.Files.getContentUri("external"), values);
// 通过uri写入图片数据
try (OutputStream os = getContentResolver().openOutputStream(uri)) {
    // 写入图片字节流
} catch (IOException e) {
    e.printStackTrace();
}

补充说明

官方文档里的限制是针对对应媒体类型的MediaStore表(比如Images表要求存Pictures,Audio表存Music),但MediaStore.Files是通用表,专门用来处理不属于特定媒体类型的文件,或者需要跨目录存储的媒体文件,所以可以合法将图片存到Documents目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:50:57