如果文件存在,为什么 ACTION_CREATE_DOCUMENT 意图无法正确重命名该文件?

And*_*234 4 android kotlin

嘿,

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

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

我尝试了原始的android示例,首先,当没有其他同名文件时,文件被完美创建,并且我可以打开,但是当我想以同名保存文件时,认为系统附加数字,不是在扩展名之前,而是在扩展名之后,如下所示: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)
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助。

rad*_*dda 5

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

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

这些示例显示了文件名的演变过程:

"invoice.pdf" -> "invoice.pdf" -> "invoice.pdf (1)"
"invoice" -> "invoice.pdf" -> "invoice (1).pdf"
Run Code Online (Sandbox Code Playgroud)

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

"invoice.pdf" -> "invoice.pdf" -> "invoice.pdf (1)"
"invoice" -> "invoice.pdf" -> "invoice (1).pdf"
Run Code Online (Sandbox Code Playgroud)