Как отправить файл kml в Google Планета Земля, как это делает MyTracks (open source)?
Я не знаю, видели ли вы удивительное обновление Mytrack, но оно позволяет отправлять файл kml в приложение Google Earth и отображать его внутри приложения Google (если установлено, конечно).
исходный код есть: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"));
моя цель состоит в том, чтобы получить тот же результат, с "играть" кнопка.
4 ответов
вам нужно указать URI для вашего файла KML и тип MIME KML, следующим образом.
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" - это ссылка на Ваш идентификатор метки. Intent extra автоматически запускает тур.
<Placemark id="my_track">
<gx:Track>
...
</gx:Track>
</Placemark>
можно ли использовать ссылку вместо KML с диска? Что-то вроде этого:--2-->
intent.setDataAndType(Uri.parse("http://sites.cyclingthealps.com/other/downloads/doc.kml"), "application/vnd.google-earth.kml+xml");
спасибо
Если вы нацелены на Android N, вам больше не разрешено отправлять файл:// intent. Воспользуйтесь инструкциями по адресу android.ОС.FileUriExposedException: файл: / / / хранилище / эмулированный/0 / тест.txt подвергается за пределами приложения через намерение.getData () и добавить Intent.FLAG_GRANT_READ_URI_PERMISSION
флаг.
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