使用自定义扩展名在 Android 中保存文档文件

Saving a DocumentFile in Android with a custom extension

在我的应用中,用户选择一个目录,然后在 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”无法识别。

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(我假设您正在使用)
  • 用户

你的 filename 是你对这个东西的名称的建议。您可以尝试将文件扩展名放在那里,但它可能不会被接受(文档建议不应提供)。同样,您可以在 DocumentFile 上调用 renameTo() 来更改名称。存储提供者是否接受 renameTo() 中涉及的任何文件扩展名取决于提供者。用户可以进入与存储提供商合作的其他应用程序,并根据用户的需要为其命名。电子邮件客户端可以对附件名称做任何它想做的事情。等等。

I would like to change this extension to ".vtk", but I have not been able to find a solution anywhere

如果你已经把 .vtk 放在你的 filename 上,那就是你所能做的。那里发生的事情是你无法控制的。

am I limited solely to the recognized MIME types of Android?

欢迎您将 text/plain 替换为任何有效的 MIME 类型,但存储提供商将如何处理这取决于提供商。特别是,我不认为任何提供者会知道某某 MIME 类型应该有一个 .vtk 文件扩展名。我不确定 解析为 .vtk 文件扩展名的标准 MIME 类型。

".vtk" is not recognized.

这不是 MIME 类型,如果那是你的意思。

如果您输入无法识别的 MIME 类型,它不会为文件名添加扩展名。 在这种情况下,只需在文件名字段中提供扩展名

DocumentFile newFile = pickedDir.createFile("application/vtk", filename+".vtk");