Android - Как открыть карты Google с помощью Intent и KML?

Мне нужно открыть google-карты, используя kml файл, который уже существует на SD-карте. (/sdcard/example.kml)

Я пробовал:

этот ответ неверен, при нажатии на ссылку открываются карты, но поиск местоположения "файл:///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);
  • Другие две нерешенные темы по этой проблеме:

Откройте локальный файл KML в Картах Google на Android

Поддерживает ли API Android файлы KML?

Любая идея, как открыть этот kml?

Спасибо!!!

Ответ 1

Я использую Locus Free (с рынка), который является козырем карты, который имеет возможность открывать .kml файлы, подобные тем, которые были захвачены с карт google, НО также может импортировать файл .kml из Google, это не позволяет вам увидеть спутниковый вид, только маркеры, которые вы добавили к нему, и некоторые особенности местности, такие как дороги и географические названия.

Ответ 2

так как ваше приложение может иметь или не иметь доступ к SD-карте (например, оно может быть или не доступно), самым надежным решением является публикация KML файла в Интернете и его возврат (я предполагаю, что у вас есть веб-сайт доступ, поскольку карты google не будут использоваться в автономном режиме, даже если предварительно запрограммировать плитки).

даже если вам нужно заплатить штраф (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], вы можете уйти с обновлением в реальном времени.

Ответ 4

Я не удивлен, что вышеупомянутое не работает для меня (на Android v2.1), потому что я думаю, что все Карты действительно отправляют строку запроса на сервер, чтобы иметь дело. Сервер может иметь дело с http://, потому что (с обычными интернет-предостережениями!) Файл можно извлечь из любого места. Но он не может иметь дело с файлом://потому что это только означает что-то на исходном устройстве, о котором сервер ничего не может сделать. Я не верю, что Google Maps может обрабатывать локальный файл KML, по крайней мере, таким образом. Однако Google Maps на Windows Mobile 5.0 может сделать это, если ему дано имя локального файла в традиционной командной строке DOS. Разумеется, это тоже должно быть в Android, на основе намерений!