如何为 ACTION_OPEN_DOCUMENT 意图实现自定义 MIME 类型?

Posted

技术标签:

【中文标题】如何为 ACTION_OPEN_DOCUMENT 意图实现自定义 MIME 类型?【英文标题】:How to implement a custom MIME type for ACTION_OPEN_DOCUMENT intent? 【发布时间】:2020-05-15 00:26:16 【问题描述】:

我正在使用 ACTION_OPEN_DOCUMENT 意图来启动系统文件选择器。用户应该选择一个“gpx”文件(blabla.gpx)。

我希望选择器只允许选择扩展名为“.gpx”的文件。

有“application/gpx+xml”的 MIME 类型,但是当我在 Intent 的 settype() 中指定时,gpx 文件不可选。

有没有办法创建“application/gpx”的自定义 mime 类型,仅用于我的应用程序?如果是这样,我如何将它与“,gpx”文件扩展名相关联?

也许我可以更改与“application/gpx+xml”mimne 类型关联的文件扩展名?

或者,还有其他方法可以完成我想做的事情吗?

【问题讨论】:

"application/gpx+xml", but when I specify that in the intent's settype(), the gpx files are not selectable. 很奇怪。您看到它们并且无法选择?奇怪的。在这里它只是没有任何效果。就像"*/*" mimetype。 这取决于我正在测试的平台。我的 Pixel 3 就像我上面描述的那样工作。在我的 Chromebook 上,它的行为与您描述的一样,就好像我指定了“/”一样。 【参考方案1】:

我正在使用 ACTION_OPEN_DOCUMENT 意图来启动系统文件选择器。

ACTION_OPEN_DOCUMENT 不限于文件。

我希望选择器只允许选择扩展名为“.gpx”的文件。

ACTION_OPEN_DOCUMENT 不限于使用文件扩展名的文档提供者。而且GPX-formatted content 不限于带有.gpx 扩展名的文件。

有“application/gpx+xml”的 MIME 类型,但是当我在 Intent 的 settype() 中指定时,gpx 文件不可选。

android SDK 模拟器或 Google Pixel 设备上试用。如果您遇到同样的问题,请提交错误报告。

但是,请记住,设备制造商可能会自定义 MIME 类型和相关文件扩展名的列表。这就是为什么我建议在 SDK 模拟器或 Google Pixel 上进行测试,因为它们是纯 Google 的,所以任何问题都由 Google 负责。我同意 .gpx 是 GPX 内容的通用文件扩展名,因此 ACTION_OPEN_DOCUMENTapplication/gpx+xml 应该允许用户选择该内容。

有没有办法创建“application/gpx”的自定义 mime 类型,仅用于我的应用程序?

不,抱歉,至少不会影响ACTION_OPEN_DOCUMENT

也许我可以更改与“application/gpx+xml”mimne 类型关联的文件扩展名?

不,抱歉,除了我建议的错误报告。

还有其他方法可以完成我想做的事情吗?

不是真的。

【讨论】:

我已经在 Google Pixel 3 和 Chromebook 上进行了测试。当我指定 MIME 类型为“application/gpx+xml”时,Pixel 3 的所有文件(目录除外)都灰显(包括任何 .gpx 文件)。 Chromebook 显示所有文件,就像我指定了“/”的 mime 一样。我正在 Chromebook 上的 Linux 中进行开发,所以我无法运行任何模拟器。我将提交错误报告。谢谢! 那很糟糕。就像整个文档框架一样。【参考方案2】:

我向 Google 报告了此事,他们的回复如下:

一位同事指出 application/gpx+xml 一个既定的 MIME 类型映射到文件 extension.gpx:

https://en.wikipedia.org/wiki/GPS_Exchange_Format

我们会考虑将此映射添加到未来的 Android 版本中。

【讨论】:

不错。但是如果你想打开一个未建立的 MIME 类型呢?【参考方案3】:

遇到<input accept="application/gpx+xml"/> 不接受.gpx 文件的问题。查找 garmin connect 应用程序,因为我知道它正在工作,他们的解决方案与我完美配合。

只需更改此 accept=".gpx,.tcx" 以及任何其他包含您希望支持的文件扩展名的 gps。

【讨论】:

以上是关于如何为 ACTION_OPEN_DOCUMENT 意图实现自定义 MIME 类型?的主要内容,如果未能解决你的问题,请参考以下文章

KitKat ACTION_OPEN_DOCUMENT 在三星设备上不显示文档

django:DetailView 如何为两个模型工作或基于类的视图如何为两个模型工作?

如何为@Valid 指定验证组?

如何为下拉菜单制作 CSS 边框?

如何为 CAShapeLayer 路径和填充颜色设置动画

iPhone - 如何为图像着色?