在我的应用程序中,用户选择一个目录,然后在 onActivityResult 中创建一个 DocumentFile,如下所示:
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
DocumentFile newFile = pickedDir.createFile("text/plain", filename);
然后,我使用 OutputStream 写入此 DocumentFile,使用 getUri() 获取 Uri,并将此 Uri 作为额外内容添加到电子邮件 Intent 中,以便将其附加到电子邮件中。
现在,由于我选择了“text/plain”作为我的 MIME 类型,附件的扩展名为“.txt”。但是,我想将此扩展名更改为“.vtk”,但我无法在任何地方找到解决方案。有没有办法做到这一点,还是我仅限于公认的 MIME 类型的 Android?无法识别“.vtk”。
最佳答案
due to the fact that I have chosen "text/plain" as my MIME type, the attached file has a ".txt" extension
不完全是。不需要任何特定的文件名结构。毕竟,完全有可能创建一个在文件方面不起作用的存储提供程序(例如,内容保存在数据库、本地或服务器上的 BLOB 列中)。
电子邮件附件的命名方式基于以下内容:
- 存储提供商的政策,根据其
content
Uri
对您的内容的外观 - 电子邮件客户端的策略,当它在
EXTRA_STREAM
中遇到content
Uri
(我假设您正在使用它) - 用户
- 你
您的文件名
是您对这个东西的名称的建议。您可以尝试将文件扩展名放在那里,但它可能不会被接受(文档建议不应提供)。同样,您可以在 DocumentFile
上调用 renameTo()
来更改名称。存储提供者是否接受 renameTo()
中涉及的任何文件扩展名取决于提供者。用户可以进入与存储提供商合作的其他应用程序,并根据用户的需要为其命名。电子邮件客户端可以对附件名称做任何它想做的事情。等等。
I would like to change this extension to ".vtk", but I have not been able to find a solution anywhere
如果您已将.vtk
放在您的文件名
上,那么您就只能这样做了。那里发生的事情是你无法控制的。
am I limited solely to the recognized MIME types of Android?
欢迎您将 text/plain
替换为任何有效的 MIME 类型,尽管存储提供商将如何处理这取决于提供商。特别是,我不认为任何提供者会知道某某 MIME 类型应该有一个 .vtk
文件扩展名。我不确定是否存在 解析为 .vtk
文件扩展名的标准 MIME 类型。
".vtk" is not recognized.
那不是 MIME 类型,如果那是你的意思的话。
关于android - 使用自定义扩展在 Android 中保存 DocumentFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38002651/