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
相关产品推荐
相关产品推荐

