- Шаблон Google Maps Activity
- Вместо предисловия
- Шаблон Google Maps Activity
- Ручная подготовка
- Интеграция карт в ваше Android-приложение
- Yandex
- Определение собственной позиции
- Google MAPs API в android или как работать с картами быстрее
- Принцип работы Google MAPs API
- А как вообще работать с этой страшной штукой?
- Подключение библиотеки
- Встраиваем карту в приложение
- Пишем всякие интересности
Шаблон Google Maps Activity
Вместо предисловия
В Мурманске (очень красивое название города для кошачьего уха, мур-мур) открыли памятник коту Семёну – герою местной легенды. В бронзе увековечили домашнего кота, который шесть с половиной лет шёл на север из Москвы, где его потеряли хозяева-идиоты.
Так как мы, жалкие людишки, не способны на такое, то нам приходится использовать карты.
В настоящее время API содержит векторные карты, которые быстрее загружаются, а также позволяют пользователям легко переключаться между 2D и 3D режимами, в которых карты можно вращать при помощи жестов.
С картами вообще происходят постоянные перемены. Сначала объявили устаревшими старые карты. Чтобы установить новые карты, требовалось написать отдельную статью, как скачать и установить библиотеку, как сгенерировать ключ в командной строке. К счастью, в Android Studio появился новый шаблон, который позволил избавиться от лишних слов и кода. Это уже четвёртое масштабное переписывание статьи.
Шаблон Google Maps Activity
Запускаем новый проект и в шаблонах выбираем Google Maps Activity.
В следующем шаге делаем необходимые настройки. Выбирайте Java или Kotlin. Рекомендую уже сейчас использовать Use androidx.* artifacts.
Для работы с картами нужен ключ. После создания проекта на основе шаблона будет открыт файл google_maps_api.xml, которая содержит ссылку на страницу консоли для получения ключа. Обратите внимание на полный путь файла — ..\app\src\debug\res\values\google_maps_api.xml. Если смотреть на структуру проекта, то также видно, что файл относится к версии debug.
На самом деле в проекте два файла google_maps_api.xml. Чтобы увидеть второй файл, переключитесь в режим Project files и в папке release увидите второй файл.
Для опытов мы можем использовать отладочный вариант файла, а когда вы будете создавать полноценное приложение с выкладыванием в Google Play, то вам придётся сгенерировать новый ключ разработчика.
А пока возвращаемся к отладочной версии файла и копируем ссылку на получение специального ключа. Переходим по ссылке, выбираем из выпадающего списка нужный проект и нажимаем кнопку Продолжить.
В следующем окне нужно нажать кнопку Создать ключ API, чтобы получить заветный ключик.
Ключ начинается на AIza, его нужно скопировать, вернуться обратно в файл google_maps_api.xml и вставить вместо текста YOUR_KEY_HERE.
Сам файл хранит строковый ресурс google_maps_key, который используется в манифесте внутри секции в секции meta-data.
В манифесте также прописаны все необходимые разрешения и настройки для пользования картами.
Ручная подготовка
Если вы использовали другой шаблон или готовый проект, то необходимо проделать некоторые операции вручную.
Для работы с картой необходимо получить ключи — один для debug-версии, а второй для release-версии вашего приложения. Без ключа компонент не загрузит необходимые для отображения карты фрагменты.
Для получения ключа нужно указать SHA1-слепок сертификата (раньше просили MD5-слепок), использующегося для подписи приложения. Как правило, подписывать свои приложения вы будете с помощью двух сертификатов — отладочного, созданного по умолчанию, и реального.
Рассмотрим процес получения ключа для debug-версии. Найдите на своем компьютере файл debug.keystore. Для Windows 7 это будет:
Для OS X and Linux:
Далее вы должны получить ключ при помощи утилиты keytool, которая идёт вместе с Java и находится примерно по такому пути «C:\Program Files\Java\jdk1.7.0_45\jre\bin».
Запускайте командную строку или откройте в студии вкладку Terminal и выполняйте следующую команду:
В итоге у вас появится сгенерированная SHA1-строка.
Далее нужно перейти по адресу https://console.developers.google.com/project и создать новый проект. Там нужно задать различные свойства, включить карты и получить ключ. Гугл иногда меняет правила, поэтому лучше почитать у них свежую документацию о получении ключа.
Для подписанных приложений, которые вы собираетесь размещать на Google Play, принцип такой же, только используется не debug.keystore, а хранилище ключей:
В build.gradle прописываем зависимость:
В манифесте разрешения.
На этом предварительная подготовка завершена. Можно запустить проект. Если версия Сервисы Google Play устарела, то на экране появится кнопка Обновить. Если на устройстве свежая версия, то запустится пример с картой.
В текущей версии шаблона указаны координаты Сиднея, Австралия (раньше была карта в районе Африки с маркером в точке 0, 0) . Нажав на маркер, вы увидите всплывающий текст Marker in Sydney. Карту можно увеличивать двойным щелчком, а также сдвигать/раздвигать пальцами.
Познакомимся поближе с проектом. Для разметки используется фрагмент с классом Для разметки используется фрагмент с классом com.google.android.gms.maps.SupportMapFragment.
Класс MapsActivity наследуется от AppCompatActivity (в Java-варианте FragmentActivity) и использует интерфейс OnMapReadyCallback.
В методе onCreate() получаем доступ к фрагменту и загружаем карту в асинхронном режиме через метод getMapAsync().
Метод onMapReady() является частью интерфейса OnMapReadyCallback. В этом методе можно писать код, когда карта готова к использованию. В примере добавляется маркер (метод addMarker()) в указанной точке (через объект LatLng) с указанием текста (метод title()). Метод moveCamera() перемещает карту в указанную позицию и мы можем видеть сразу нужное место.
Сейчас там только пример добавления нового маркера в указанную позицию и заголовка, который появится при нажатии на маркер. Допишем код, добавив подсказку, используя точечный синтаксис.
Подсказка появляется под описанием маркера с другим цветом. Если на карте должно быть несколько маркеров, то просто вызываете методы addMarker() несколько раз с разными параметрами.
Источник
Интеграция карт в ваше Android-приложение
Есть много разных идей, для реализации которых могут понадобиться карты на мобильных устройствах.
Возможности таких устройств позволяют довольно оперативно получать информацию о местоположении, графические данные и графические преобразования для отображения объёма ландшафта.
В данном статье я расскажу как интегрировать возможность просмотра карт для мобильных устройств на основе Android, на примере Yandex Карт и Google Maps.
Функционал библиотек этих компаний позволяет:
- Перемещать карту
- Изменять масштаб
- Изменять виды карт
- Получать события от карты
Начнём с отечественного производителя.
Yandex
Библиотеку Yandex MapKit можно скачать с GitHub’а, там же есть версия и для iOS.
Но прежде чем начать использовать, нам надо получить API-key, для этого идём на почту и пишем письмо в support@mobmaps.yandex.ru, указав в заголовке «Map Kit запрос API-ключа». В ответ вам пришлют письмо с указанием дополнительных ссылок на документацию, на правила использования и собственно с самим ключом в теле письма (а могут и не прислать, кстати).
Пока ждём письмо, берём библиотеку и прикрепляем её к проекту.
После долгого ожидания с кружкой кофе, знакомимся с содержимым письма и информации по ссылкам, берём ключик и пишем в вашем layout’е приложения следующий код:
где заместо «you are key» вставляем полученный ключ. Всё, карта есть.
Далее код показывает, как перемещать карту на заданную координату и использовать зум:
Для использования Google Maps надо совершить куда более изощрённые действия. Я расскажу, как получить debug-key для использования карт, но процесс получения release версии похоже несколько замороченней, но я release ещё не получал.
Для получения debug-key, надо найти ваше хранилище ключей, для отладки.
По-умолчанию, путь будет выглядеть примерно так:
Затем открываем командную строку, переходим в каталог, куда установлена Java:
где путь_до_хранилища_ключей — свой путь до debug.keystore (осторожно, возможны проблемы с пробелами в пути).
После чего в том же окне будет выведен md5-ключ после «Certificate fingerprint (MD5)».
Идём по ссылке и регистрируем код.
После чего Google сгенерирует с нужным кодом для layout и встроенным кодом, берём его и вставляем к себе в layout.
Далее нам, надо наш Activity представить в примерно следующем виде:
Замечу, что Activity наследован должен быть от MapActivity хранящийся в com.google.android.maps.MapActivity.
А в манифесте прописать между тегами вставить:
И не забыть, про разрешение доступа в интернет для приложения:
В остальном функционал GoogleMaps и YandexMapKit весьма схож:
Как можно видеть, процесс интеграции карт в приложения довольно простой, а спектр использования довольно широк.
Более подробно можно ознакомиться ниже.
Определение собственной позиции
Чтобы немного расширить пример, приложу кусок кода:
Но для использования этого кода, в манифесте следует указать следующее разрешение:
Источник
Google MAPs API в android или как работать с картами быстрее
Принцип работы Google MAPs API
Вся документация для работы с картами приведена на (логично) официальном сайте google maps api. Сегодня я рассматриваю только Directions API (документация). Для того что бы получить какую-либо информацию от большого числа, вам необходимо сделать запрос. Ответ прийдет в формате JSON.
Общий вид запроса:
Пример: https://maps.googleapis.com/maps/api/directions/json?origin=55.754724,%2037.621380&destination=55.728466,%2037.604155&key=»Your MAPs API key»
В качестве ответа нам (ожидаемо) пришел JSON с большим набором разных точек с координатами и названиями этих мест.
А как вообще работать с этой страшной штукой?
Если вы только начинаете работать с Android, то советую вам почитать про такую замечательную библиотеку Retrofit, которая превращает работу с запросами в код из 2 строк. Рассматривать сейчас я её не буду.
Но я сегодня хочу рассмотреть пример использования библиотеки Java Client for Google Maps Services. Библиотека как по мне замечательная, освобождает от необходимости писать (пусть даже очень короткие) запросы вручную и отлично подходит в случаях когда нужно писать очень быстро, как например на хакатоне. Я хочу показать живой пример использования данной библиотеки на примере работы с Directions API.
Подключение библиотеки
Для начала нам потребуется получить ключ для нашего приложения. Топаем на оф. сайт, находим сверху кнопку «получить ключ», создаем новый проект, нажимаем далее и готово!
UPD: теперь бесплатно получить нельзя. С лета 2018 года Google обновили план и необходимо ввести данные своей карты для получения 200$ для запросов каждый месяц бесплатно. Этого должно хватать, но конечно тенденция не радует.
Firebase
Для правильной работы приложения нам необходимо получить файл google-service.json. Идем на firebase выбираем наш проект и добавляем его. Далее нам нужно выбрать Android проект, ввести название пакета, регистрируем приложение. Скачиваем файл и перетаскиваем в папку app. К слову её не будет видно в дереве проекта, для этого надо в Android Studio поменять отображение с Android на Project или залезть в наш проект через файловый менеджер. Далее следуем инструкциям где какой код писать.
Включаем в консоли
Так же нам необходимо включить Directions API (или любую другую необходимую вам API) в консоли, для этого идем сюда, выбираем наше приложение и включаем Directions API.
Gradle
В Gradle файлы так же необходимо добавить еще пару строк. В итоге новые строки выглядят вот так:
Обязательно проверяйте, актуальная ли это сейчас версия!
Встраиваем карту в приложение
Google map в андроид реализовывается как фрагмент (или как MapView, но об этом в другой раз, нам сейчас особой разницы нет). Просто встраиваем его в наш layout. В нашем классе, который работает с картой, необходимо найти эту карту и заимплементить интерфейс.
Код для фрагмента выглядит вот так. Я буду работать с MainActivity, соответственно если вы используете другой класс вам необходимо поменять контекст.
Отлично, фрагмент встроили, Android Studio на нас не ругается, едем дальше. Переходим в MainActivity.class и имплементим интерфейс OnMapReadyCallback.
В onCreate пишем
Так же идем в Manifests и прописываем вот такие штуки внутри тэга application
Где вместо @string/google_maps_key должен подставиться ваш ключ для карт, который мы получили ранее. Соответственно вам нужно создать нужный ресурс в файле string.
Пишем всякие интересности
Отлично, карта у нас есть, давайте наконец напишем хоть что-нибудь интересное. Пусть нашей целью будет нарисовать маршрут по Москве через несколько точек:
- Гум (55.754724, 37.621380)
- Большой театр (55.760133, 37.618697)
- Патриаршие пруды (55.764753, 37.591313)
- Парк культуры (55.728466, 37.604155)
Кладу все наши места в List и делаю это как глобальную переменную.
Для начала создадим по маркеру на каждое место. Маркер это просто объект, которому передаются координаты, а затем они накладываются на карту. Код:
Далее мы пишем вот такой код все в том же методе onMapReady
При запуске приложения мы получили вот такую картину:
Хм, Москва, конечно, весьма запутанная, но не настолько же. Почему же такой странный маршрут нам вернул Google? Потому что он построил маршрут для автомобилей, который идет по умолчанию, но мы можем это изменить. Чтобы построить маршрут для пешеходов, меняем код на:
Теперь наш маршрут выглядит вот так
Существует еще множество настроек, о всех них можно прочитать в документации. Просто мы все параметры будем добавлять не в сырой запрос, а в код, поскольку методы библиотеки имеют те же названия что и просто в запросах.
Источник