首页 > 解决方案 > 如果文件存在,为什么 ACTION_CREATE_DOCUMENT 意图不能正确重命名文件?

问题描述

嗨,

我在我的应用程序中使用 ACTION_CREATE_DOCUMENT 意图,让用户选择下载文件的路径。当文件名唯一时,它工作正常。

根据文档,如果文件名存在,则系统不会覆盖原始文件,而是将数字附加到文件末尾。

我尝试了原始的android示例,首先,当没有其他同名文件时,文件创建完美,并且可以打开,但是当我想以同名保存文件时,系统会追加数字,不是在 extension 之前,而是在 extension 之后是这样的:fileName.jpg(1),之后我无法打开,直到那时我删除了这个附加的字符串。

我只尝试了装有 Android 10 的三星 Galaxy S20,这是一个特定问题,还是我做错了什么?

也许这将是一个很好的解决方案,如果我可以在保存之前检查文件名,但文档树会创建文件。

我从文档中尝试了这段代码:

const val CREATE_FILE = 1

private fun createFile() {
    val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/pdf"
        putExtra(Intent.EXTRA_TITLE, "invoice.pdf")

    }
    startActivityForResult(intent, CREATE_FILE)
}

谢谢您的帮助。

标签: androidkotlin

解决方案


如果文件名后面没有扩展名(由 MIME 类型给出),android 会自动添加它。那也行。

现在它将查明是否存在具有此名称的文件,如果存在,它将添加 (1) 到 user 写入的部分之后

这些示例显示了文件名是如何演变的:

    "invoice.pdf" -> "invoice.pdf" -> "invoice.pdf (1)"
    "invoice" -> "invoice.pdf" -> "invoice (1).pdf"

所以不要把扩展名放在EXTRA_TITLE中:

const val CREATE_FILE = 1

private fun createFile() {
    val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = "application/pdf"
        putExtra(Intent.EXTRA_TITLE, "invoice")

    }
    startActivityForResult(intent, CREATE_FILE)
}

推荐阅读