我不知道您是否看到了令人惊叹的Mytrack更新,但它允许将kml文件发送到Google地球应用并在Google应用内显示(如果已安装)。
源代码在那里:http://code.google.com/p/mytracks/source/browse/
但我无法找到实现这一目标的方法。
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"));
我的目标是通过“播放”按钮获得相同的结果。
答案 0 :(得分:6)
您需要为KML文件 AND 指定KML MIME类型的URI,如下所示。
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::setData
和Intent::setType
(它们各自覆盖另一个)。
" my_track"是对您的地标ID的引用。意图额外自动开始游览。
<Placemark id="my_track">
<gx:Track>
...
</gx:Track>
</Placemark>
答案 1 :(得分:3)
是否可以使用链接而不是磁盘中的kml? 像这样:
intent.setDataAndType(Uri.parse("http://sites.cyclingthealps.com/other/downloads/doc.kml"), "application/vnd.google-earth.kml+xml");
由于
答案 2 :(得分:2)
如果您要定位Android N,则不允许发送文件:// intent。使用android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData()上的说明,然后添加Intent.FLAG_GRANT_READ_URI_PERMISSION
标记。
答案 3 :(得分:0)
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