android - 如果文件存在,为什么 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)
}
谢谢您的帮助。
解决方案
如果文件名后面没有扩展名(由 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)
}
推荐阅读
- c# - 在比较 c# windows 应用程序后,在 DataGridView 列中获取最小值并删除其他列中的重复值
- pandas - 在任意位置向现有数据框添加新列
- python - 使用 re.sub() 从 pandas 数据框中删除所有其他内容时出错
- jenkins - 在扩展选择参数中访问环境变量
- c# - 使用 .NET `Confluent.Kafka` `subscribe`/`assign` 到 Kafka 主题的正确方法是什么?
- swift - NotificationCenter:多次切换键盘将 y 位置设置为奇怪的值
- terraform - 如何将 .env 文件中的环境变量读入 terraform 脚本?
- flutter - 无限滚动颤振
- razor - 2sxc 10.25 上的 Mobius Form 3 错误?
- javascript - jQuery获取上一个元素未按预期工作