在我的应用程序中,用户选择一个目录,在onActivityResult中,创建一个DocumentFile,如下所示:
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
DocumentFile newFile = pickedDir.createFile("text/plain", filename);
然后我使用OutputStream写入此DocumentFile,使用getUri()获取Uri,并将此Uri作为额外添加到电子邮件意图中,以便将其附加到电子邮件中。
现在,由于我选择“text / plain”作为我的MIME类型,附件的扩展名为“.txt”。但是,我想将此扩展名更改为“.vtk”,但我无法在任何地方找到解决方案。有没有办法做到这一点,还是仅限于Android的公认MIME类型? “.vtk”无法识别。
答案 0 :(得分:1)
由于我选择“text / plain”作为我的MIME类型,所附文件的扩展名为“.txt”
不完全是。不需要任何特定的文件名结构。毕竟,完全有可能创建一个无法在文件方面工作的存储提供程序(例如,内容保存在数据库的BLOB列中,本地或服务器上)。
如何根据以下内容命名电子邮件附件:
content
Uri
的内容而言content
遇到Uri
EXTRA_STREAM
时的政策(我假设您正在使用)你的filename
是你对此事可能被称为什么的建议。你可以尝试在那里放一个文件扩展名,但它可能不受尊重(文档建议不应该提供一个文件扩展名)。同样,您可以在renameTo()
上调用DocumentFile
来更改名称。存储提供商是否尊重renameTo()
中涉及的任何文件扩展名取决于提供商。用户可以进入与存储提供商合作的其他应用程序,并将其命名为用户想要的任何内容。电子邮件客户端可以为附件名称执行任何操作。等等。
我想将此扩展程序更改为“.vtk”,但我无法在任何地方找到解决方案
如果您已将.vtk
放在filename
上,那就是您所能做的一切。从那里发生的事情是你无法控制的。
我是否仅限于Android的公认MIME类型?
欢迎您使用任何有效的MIME类型替换text/plain
,但存储提供商将对此做什么取决于提供商。特别是,我不认为任何提供者都知道某某类型的MIME类型应该具有.vtk
文件扩展名。我不确定 是否为解析为.vtk
文件扩展名的标准MIME类型。
“。vtk”无法识别。
这不是MIME类型,如果这就是你的意思。
答案 1 :(得分:0)
如果您输入无法识别的 MIME 类型,它不会为文件名添加扩展名。 在这种情况下,只需在文件名字段中提供扩展名
DocumentFile newFile = pickedDir.createFile("application/vtk", filename+".vtk");