I don't know if you have seen the amazing Mytrack update, but it allow to send a kml file to Google Earth app and display it inside the Google app (if installed, of course).
The source code is there: http://code.google.com/p/mytracks/source/browse/
but I cannot find the way to achieve such a thing.
I think I found something here: 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);
The hardcoded way gives this code:
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);
But the above code simply displays the path with the same result than this code:
Intent mapIntent = new Intent(Intent.ACTION_VIEW);
Uri uri1 = Uri.parse("file:///sdcard/test.kml");
mapIntent.setData(uri1);
startActivity(Intent.createChooser(mapIntent, "Sample"));
My objective is to get the same result, with a "play" button.
You need to specify the URI to your KML file AND the KML MIME type, as follows.
This is presently undocumented, but we're looking to fix this.
Be sure to use
Intent::setDataAndType
and notIntent::setData
andIntent::setType
separately (they each override the other)."my_track" is a reference to your placemark id. The intent extra automatically starts the tour.
source: http://enladodelbien.blogspot.com/2015/06/kmlkmz-to-google-earth.html
Is it possible to use a link instead of a kml from disk? Something like this:
intent.setDataAndType(Uri.parse("http://sites.cyclingthealps.com/other/downloads/doc.kml"), "application/vnd.google-earth.kml+xml");
Thanks
If you are targeting Android N, you are not allowed to send a file:// intent anymore. Use the instructions at android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData() , and add the
Intent.FLAG_GRANT_READ_URI_PERMISSION
flag.