Несколько месяцев назад я искал похожую функцию, но не смог найти способ загрузить файл с SDCard - или даже с помощью поставщика контента. Я не смотрел с тех пор.
Однако один метод, который я обнаружил, оказался полезным, так как я уже общался с веб-сервером
получение карт для приема динамически генерируемого файла KML?
Это позволило мне отправить KML из моего приложения на сервер (связь уже была установлена), сервер сохранил KML, назначил случайную строку и вернул ее приложению, затем приложение передало ссылку на Сервер в стиле:
final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://website.com/kml_gen.php?id=1kj312"));
startActivity(myIntent);
Сервер вернул список KML для использования приложением карты.
Обновление после комментариев ниже:
final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://code.google.com/apis/kml/documentation/KML_Samples.kml"));
startActivity(myIntent);
Попробуйте запустить приведенный выше код - при запуске вы увидите, что приложение Google Map открыто, и оно запросит файл kml, в данном случае файл примеров из Google. Это карта с наложением, но теперь она является приложением Google Map и больше не запускается внутри вашего приложения.
Для этого решения вам нужно будет где-то хранить ваш файл KML на веб-сервере - это имеет небольшую проблему в том, что пользователю требуется подключение для передачи данных (которое в любом случае понадобится карте), но если файл kml большой и медленное соединение там может быть задержка).
Вы упомянули, что у вас есть сервер, производящий некоторые динамические данные, а также статические данные. Если статические вещи одинаковы для всех и каждый раз, когда сервер производит некоторые данные, у меня будет соблазн заставить веб-сервер создавать один хорошо отформатированный документ KML, включающий оба набора данных - насколько мне известно, приложение карт Google загрузить один файл KML с веб-сервера.
Другое решение, которое я использовал, было опубликовано выше - если у вас есть статические данные на телефоне (я бы пошел с БД с данными), создайте наложение, рисуя элементы, а также запросите динамические результаты с сервера, добавьте их в пользовательское наложение. Эта опция будет означать, что вам придется кодировать любую дополнительную функцию, которую вы хотите - то есть поиск карты на месте, спутниковый вид .....
Обязательно выполняйте операцию в отдельном потоке, а не в потоке пользовательского интерфейса, особенно при создании больших оверлеев, иначе вы можете получить диалоговое окно Force Close / Wait.