如何为 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_DOCUMENT
和 application/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 在三星设备上不显示文档