使用自定义扩展程序在Android中保存DocumentFile

时间:2016-06-23 22:03:42

标签: android mime-types

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

2 个答案:

答案 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");