Android - 如何使用Intent和KML打开谷歌地图?

时间:2011-11-01 11:27:55

标签: android android-intent

我需要使用已存在于SD卡上的kml文件打开谷歌地图。 (/sdcard/example.kml)

我试过了:

这个答案是错误的,当点击链接,地图打开,但搜索位置“file:///sdcard/example.kml”

  • 使用意图:

此代码抛出ActivityNotFoundException

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
        Uri.parse("file:///sdcard/example.kml"));
startActivity(intent);
  • 我尝试使用setDataAndType方法,但不起作用:

另一个ActivityNotFoundException

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
         Uri.parse("file:///sdcard/example.kml"),
                   "application/kml");
startActivity(intent);
  • 关于此问题的其他两个未解决的主题:

Open local KML File in Google Maps on Android

Does the Android API support KML files?

知道怎么打开这个kml?

谢谢!!!

4 个答案:

答案 0 :(得分:1)

我正在使用Locus Free(来自市场),这是一个地图遮阳板,能够打开.kml文件,如从谷歌地图捕获的那些文件,但也能够从谷歌导入.kml文件,它不会让你看到卫星视图,只有你添加到它的标记和一些地形特征,如道路和地名。

答案 1 :(得分:1)

由于您的应用可能会或可能无法访问SD卡(例如,它可能也可能不可用),最可靠的解决方案是将KML文件发布到网上并收回(我假设您有网络)访问,因为谷歌地图不会离线使用,甚至预取瓷砖)。

即使您必须支付罚款(googlemaps解析和嵌入kml功能的速度很慢),IMO也是值得的。

例如,如果您使用示例kml文件(如下所示):

String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);

测试和工作。只需将您的kml文件发布到文件服务器并以此方式访问它。

注意:如果您计划实时更新地图,googlemaps会通过缓存文件一段时间(未确定)来避免这种情况。如果您在kml字符串的末尾使用随机数发生器,例如?randomizer=[RandomNumber],您可以通过实时更新来逃脱。

答案 2 :(得分:0)

您需要为Intent数据使用geo URI方案语法:

Uri.parse("geo:0,0?q=file:///sdcard/example.kml")

这个答案中的代码对我有用: How to plot a pre-build map from google maps on a MapView

答案 3 :(得分:0)

上述对我不起作用(在Android v2.1上)我并不感到惊讶,因为我认为所有的地图都是将查询字符串发送到服务器来处理。服务器可以处理http://因为(通常的互联网警告!)文件可以从任何地方获取。但它无法处理file://因为这只意味着原始设备上的某些东西,服务器无法做任何事情。我不相信谷歌地图可以处理本地KML文件,至少这样。但是,如果以传统的DOS命令行方式为本地文件命名,则Windows Mobile 5.0上的Google Maps可以这样做。当然,这也必须在Android中,以一种意志的方式!