我怎么能发送一个KML文件,谷歌地球,像MyTracks(开源的)呢?(How can I send

2019-07-30 10:05发布

我不知道你是否看到了惊人的Mytrack更新,但它允许对KML文件发送到谷歌地球应用程序和谷歌的应用程序里面显示出来(如果已安装,当然)。

的源代码是有: http://code.google.com/p/mytracks/source/browse/

但我无法找到实现这样的事情的方式。

我想我找到的东西在这里: http://code.google.com/r/jshih-mytracks3/source/browse/MyTracks/src/com/google/android/apps/mytracks/io/file/SaveActivity.java?spec = svn5178eb75934b7f0c4c23ec26b7d79a0787de18b8&R = 5178eb75934b7f0c4c23ec26b7d79a0787de18b8

else if (playTrack) {
        Intent intent = new Intent()
            .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
            .putExtra(GOOGLE_EARTH_TOUR_FEATURE_ID, KmlTrackWriter.TOUR_FEATURE_ID)
            .setClassName(GOOGLE_EARTH_PACKAGE, GOOGLE_EARTH_CLASS)
            .setDataAndType(Uri.fromFile(new File(savedPath)), GOOGLE_EARTH_KML_MIME_TYPE);
        startActivity(intent);

硬编码的方式给出了这样的代码:

    Intent intent = new Intent()
            .addFlags(
                    Intent.FLAG_ACTIVITY_CLEAR_TOP
                            | Intent.FLAG_ACTIVITY_NEW_TASK)
            .putExtra("com.google.earth.EXTRA.tour_feature_id","tour")
            .setClassName("com.google.earth", "com.google.earth.EarthActivity")
            .setDataAndType(Uri.fromFile(new File("/sdcard/test.kml")),
                    "application/vnd.google-earth.kml+xml");
    startActivity(intent);

但上面的代码只是显示同样的结果比这个代码的路径:

 Intent mapIntent = new Intent(Intent.ACTION_VIEW); 
    Uri uri1 = Uri.parse("file:///sdcard/test.kml"); 
    mapIntent.setData(uri1); 
    startActivity(Intent.createChooser(mapIntent, "Sample")); 

我的目标是获得相同的结果,与“播放”按钮。

Answer 1:

你需要指定URI到您的KML文件 KML MIME类型,如下所示。

File file = new File(Environment.getExternalStorageDirectory(), "sample_tour.kml");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.google-earth.kml+xml");
intent.putExtra("com.google.earth.EXTRA.tour_feature_id", "my_track");
startActivity(intent);

这是目前无证,但我们正在寻找解决这一问题。

一定要使用Intent::setDataAndType ,而不是Intent::setDataIntent::setType分开(它们各自覆盖等)。

“my_track”是你的地标标识的参考。 这样做的目的额外自动开始游览。

<Placemark id="my_track">
 <gx:Track>
  ...
 </gx:Track>
</Placemark>


Answer 2:

是否有可能使用一个链接,而不是从磁盘上的KML? 事情是这样的:

intent.setDataAndType(Uri.parse("http://sites.cyclingthealps.com/other/downloads/doc.kml"), "application/vnd.google-earth.kml+xml");

谢谢



Answer 3:

如果你的目标Android的N,不允许你发送一个文件://意图了。 在使用说明android.os.FileUriExposedException:文件:)通过Intent.getData(///storage/emulated/0/test.txt外露于应用程序 ,并添加Intent.FLAG_GRANT_READ_URI_PERMISSION标志。



Answer 4:

File KML = new File("/sdcard/doc.kml");
Intent i = getPackageManager().getLaunchIntentForPackage("com.google.earth");
i.setDataAndType(Uri.fromFile(KML), "xml");
startActivity(i);

来源: http://enladodelbien.blogspot.com/2015/06/kmlkmz-to-google-earth.html



文章来源: How can I send a kml file to Google Earth, like MyTracks (open source) do?