在适当的外部地图应用程序中打开 KML/GPX 文件

Posted

技术标签:

【中文标题】在适当的外部地图应用程序中打开 KML/GPX 文件【英文标题】:Open KML/GPX files in appropriate external map app 【发布时间】:2021-03-06 06:55:54 【问题描述】:

我的 Flutter(androidios)应用生成 KML 或 GPX 文件,可以正常工作。

现在我想添加一个“打开文件”按钮,它应该打开这样一个系统对话框,其中列出了已安装的地图或其他消费应用程序(可以处理此类格式)。

如何打开此对话框?如何找到与格式相关的应用程序以及如何将文件发送到这些应用程序。我想,有一个插件可以解决这个问题,但找不到。它必须在 Android 和 iOS 上运行,很高兴有网络支持。

我刚刚看到open_file,但我不太确定它是否按预期工作,因为它没有列出对 KML/GPX 的支持。

提前致谢!

【问题讨论】:

您是否尝试使用文件的 URI 启动应用程序? ***.com/questions/7965747/…***.com/questions/49345605/… 好主意,试过了,但不幸的是 canLaunch(...) 是错误的 :( 错误是 PlatformException(ACTIVITY_NOT_FOUND, No Activity found to handle intent the\path\to\the\KML\file.kml, null, null) 但是,安装了可以处理 KML 的应用程序:Google Maps、Locus 和 c :geo 可以处理 GPX 文件 当我添加file:/// 时,我得到一个android.os.FileUriExposedException。在寻找解决方案时,我发现我必须在我的 AndroidManifest 中添加 provider,但这无济于事...... 不就是把KML和GPX的MIME类型加到“open_file”插件里吗? 我不太确定该怎么做。特别是我不知道 GPX 的任何特定 MIME 类型。 【参考方案1】:

如果您发现Flutter plug-in 像open_file 这样是开源的,您可以自己添加 MIME 类型。

对于 KML 格式:https://en.wikipedia.org/wiki/Keyhole_Markup_Language

对于 GPX 格式:https://en.wikipedia.org/wiki/GPS_Exchange_Format

由于包是开源的,我正在考虑修改代码,因为映射看起来很简单:

https://github.com/crazecoder/open_file/blob/master/ios/Classes/OpenFilePlugin.m

https://github.com/crazecoder/open_file/blob/master/android/src/main/java/com/crazecoder/openfile/OpenFilePlugin.java

您需要分叉项目并添加您想要的类型。

或者你已经发布了issue ticket #116

repo 所有者回应的地方

OpenFile.open("/sdcard/example.txt", type: "text/plain", uti: "public.plain-text");

如果可行,请回复,因为我不确定这两种不同平台的文件类型(uti 与 MIME 类型)是否在 Flutter 中通用,或者您是否有特定于平台的检测代码来正确分配文件类型。

【讨论】:

以上是关于在适当的外部地图应用程序中打开 KML/GPX 文件的主要内容,如果未能解决你的问题,请参考以下文章

React - 使用外部 URL 时未定义地图功能

PhoneGap/Cordova 打开外部链接到 Safari 而不是全屏 inApp

Mapbox GL 使用外部地图

如何从片段外部清除/重置地图?

保存外部缓存文​​件

如何计算适当的谷歌地图缩放级别