- Google MAPs API в android или как работать с картами быстрее
- Принцип работы Google MAPs API
- А как вообще работать с этой страшной штукой?
- Подключение библиотеки
- Встраиваем карту в приложение
- Пишем всякие интересности
- Using API Keys
- Before you begin
- Creating API keys
- Console
- Cloud SDK
- Adding the API key to your app
- Restricting API keys
- Console
- Cloud SDK
- Finding your app’s certificate information
- Using Gradle
- Manually
- Debug certificate
- Displaying the debug certificate fingerprint
- Release certificate
- Displaying the release certificate fingerprint
- Using Google Places API in Android
- 5 Answers 5
- Выбор текущего местоположения и просмотр подробных сведений на карте
- Как получить код
- Как настроить проект
- Как получить ключ API и активировать нужные API
- Как добавить ключ API в свое приложение
- Как создать сборку и запустить приложение
- Понимание кода
- Создание клиента Places API
- Kotlin
- Запрос доступа к данным о местоположении
- Kotlin
- Kotlin
- Добавление карты
- Kotlin
- Kotlin
- Kotlin
- Kotlin
- Как получить информацию о местоположении устройства Android и позиции карты
- Kotlin
- Как получить данные о текущем местоположении
- Kotlin
- Kotlin
- Kotlin
- Kotlin
- Сохранение состояния карты
- Kotlin
- Kotlin
- Kotlin
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? Потому что он построил маршрут для автомобилей, который идет по умолчанию, но мы можем это изменить. Чтобы построить маршрут для пешеходов, меняем код на:
Теперь наш маршрут выглядит вот так
Существует еще множество настроек, о всех них можно прочитать в документации. Просто мы все параметры будем добавлять не в сырой запрос, а в код, поскольку методы библиотеки имеют те же названия что и просто в запросах.
Источник
Using API Keys
Before you begin
Before you start using the Places SDK for Android, you need a project with a billing account and the Places SDK for Android enabled. To learn more, see Set up in Cloud Console.
Creating API keys
The API key is a unique identifier that authenticates requests associated with your project for usage and billing purposes. You must have at least one API key associated with your project.
To create an API key:
Console
Go to the Google Maps Platform > Credentials page.
The API key created dialog displays your newly created API key.
The new API key is listed on the Credentials page under API keys.
(Remember to restrict the API key before using it in production.)
Cloud SDK
Read more about the Google Cloud SDK , Cloud SDK installation , and the following commands:
Adding the API key to your app
Add the API key when initializing the Places SDK for Android in your application.
Restricting API keys
Restricting API keys adds security to your application by ensuring only authorized requests are made with your API key. We strongly recommend that you follow the instructions to set restrictions for your API keys. For more information, see API security best practices.
When you restrict your API key, you must provide the SHA-1 certificate fingerprint of the signing key that was used to sign the application. There are two certificate types:
- Debug certificate: Only use this certificate type with apps you’re testing and other non-production code. Do not attempt to publish an app that’s signed with a debug certificate. The Android SDK tools generate this certificate automatically when you run a debug build.
- Release certificate: Use this certificate when you’re ready to release your app to an app store. The Android SDK tools generate this certificate when you run a release build.
For more information about digital certificates, see the Sign your app guide.
For information about getting your certificate fingerprint, see Authenticating Your Client. If you’re using Play App Signing; instead, you must go to the app signing page on the Play Console to get your certificate fingerprint.
To restrict an API key:
Console
Go to the Google Maps Platform > Credentials page.
- Application restrictions:
- Select Android apps.
- Click + Add package name and fingerprint.
- Enter your package name and SHA-1 certificate fingerprint. For example:
- API restrictions:
- Click Restrict key.
- Select Places API from Select APIs dropdown. If the Places API is not listed, you need to enable it.
Cloud SDK
List existing keys.
Clear existing restrictions on existing key.
Set new restrictions on existing key.
Read more about the Google Cloud SDK , Cloud SDK installation , and the following commands:
Finding your app’s certificate information
Android-restricted API keys are linked to specific certificate/package pairs. You only need one key for each certificate, no matter how many users you have for the app.
The API key is based on a short form of your app’s digital certificate, known as its SHA-1 fingerprint. To display the SHA-1 fingerprint for your certificate, first ensure that you are using the right certificate. You may have two certificates:
- A debug certificate: The Android SDK tools generate this certificate automatically when you do a debug build. Only use this certificate with apps that you’re testing. Do not attempt to publish an app that’s signed with a debug certificate. The debug certificate is described in more detail in Signing in Debug Mode in the Android Developer Documentation.
- A release certificate: The Android SDK tools generate this certificate when you do a release build. You can also generate this certificate using the keytool program. Use this certificate when you are ready to release your app to the world.
Using Gradle
Gradle makes it very easy to get your app’s signing info. Simply run ./gradlew signingReport .
The output should look something like this:
Manually
Follow the steps below to display a certificate’s SHA-1 fingerprint using the keytool program with the -v parameter. For more information about Keytool, see the Oracle documentation.
Debug certificate
Displaying the debug certificate fingerprint
Locate your debug keystore file. The file name is debug.keystore , and is created the first time you build your project. By default, it is stored in the same directory as your Android Virtual Device (AVD) files:
- macOS and Linux:
/.android/
List the SHA-1 fingerprint:
For Linux or macOS, open a terminal window and enter the following:
For Windows Vista and Windows 7, run:
You should see output similar to this:
Release certificate
Displaying the release certificate fingerprint
Locate your release certificate keystore file. There is no default location or name for the release keystore. If you don’t specify one when you build your app for release, the build will leave your .apk unsigned, and you’ll have to sign it before you can publish it. For the release certificate, you also need the certificate’s alias and the passwords for the keystore and the certificate. You can list the aliases for all the keys in a keystore by entering:
Replace your_keystore_name with the fully-qualified path and name of the keystore, including the .keystore extension. You’ll be prompted for the keystore’s password. Then keytool displays all the aliases in the keystore.
Enter the following at a terminal or command prompt:
Replace your_keystore_name with the fully-qualified path and name of the keystore, including the .keystore extension. Replace your_alias_name with the alias that you assigned to the certificate when you created it.
You should see output similar to this:
The line that begins SHA1 contains the certificate’s SHA-1 fingerprint. The fingerprint is the sequence of 20 two-digit hexadecimal numbers separated by colons.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Источник
Using Google Places API in Android
I am trying to develop an app which can display the schools and airports in the locality. I found that using Google Places API is the way to go.
I have seen the documentation here. Can anyone explain how to use the API?
5 Answers 5
New tutorial available
It appears that the original tutorial by Brian is now 404, so here is a link to the Google one in case people see this answer first.
When this article was first written this tutorial didn’t exist.
You can find a tutorial on the Places API in a J2SE environment, using the Google APIs Client Library for Java on my blog. It also includes a sample application in Github that might get you started.
If should be fairly easy to port to Android, as the Google APIs Client Library for Java is Android compatible.
You will have to get familiar with HttpClient, HttpRequest, and HttpResponse if you’re not already.
Very simply:
Step 1) build your uri with your api key and search terms as per google’s syntax
Step 2) perform a post using that uri
Step 3) decode the response from the post
The point is that you have to build the URL, create the HttpRequest and get the data in XML or JSON format. After that, you may parse this data to get the information you want. Most of people do it in each use, but I think the best option is to have an API for that purpose.
Источник
Выбор текущего местоположения и просмотр подробных сведений на карте
В этом руководстве рассказывается, как определить текущее местоположение устройства Android и показать сведения об организации или другом объекте, который там находится. Следуйте руководству по созданию приложения для Android с помощью Maps SDK for Android, Places SDK for Android и поставщика геоданных из нескольких источников в Location API сервисов Google Play.
Как получить код
Версия на языке Java:
Версия на языке Kotlin:
Как настроить проект
Чтобы создать проект в Android Studio, выполните следующие действия:
Импортируйте обучающий проект:
- В Android Studio выберите Файл > Создать > Импортировать проект.
- Перейдите в каталог, где вы сохранили репозиторий с примерами Google Maps Android API версии 2 после его скачивания.
- Найдите проект CurrentPlaceDetailsOnMap. Он расположен в следующем каталоге:
PATH-TO-SAVED-REPO/android-samples/tutorials/java/CurrentPlaceDetailsOnMap (Java)
PATH-TO-SAVED-REPO/android-samples/tutorials/kotlin/CurrentPlaceDetailsOnMap (Kotlin) - Выберите каталог проекта и нажмите ОК. Теперь Android Studio создаст ваш проект с использованием инструмента сборки Gradle.
Как получить ключ API и активировать нужные API
Для выполнения этого учебного проекта вам понадобится ключ Google API, который авторизован для работы с Maps SDK for Android и Places SDK for Android.
Нажмите кнопку ниже, чтобы получить ключ и активировать API.
Более подробную информацию можно найти в полном руководстве по получению ключа API.
Как добавить ключ API в свое приложение
- Откройте файл local.properties проекта.
Добавьте приведенную ниже строку и укажите вместо YOUR_API_KEY ваш ключ API.
Плагин Secrets Gradle Plugin для Android копирует ключ API во время сборки приложения и делает его доступным в виде переменной сборки в манифесте Android.
Как создать сборку и запустить приложение
- Подключите устройство Android к компьютеру. Выполните инструкции по активации параметров для разработчиков на устройстве Android и настройте ваше приложение и систему для обнаружения этого устройства. Для настройки виртуального устройства вы также можете использовать Менеджер виртуального устройства Android (AVD). Выбирая эмулятор, убедитесь, что вы используете образ, который содержит интерфейсы Google API. Подробную информацию можно найти в руководстве по началу работы.
- В Android Studio выберите пункт меню Запустить или нажмите на значок воспроизведения, чтобы запустить свое приложение. В открывшемся окне выберите устройство.
Android Studio запустит Gradle для сборки приложения, а затем отобразит результаты на устройстве или в эмуляторе. Вы должны увидеть карту с набором маркеров, в центре которой будет ваше актуальное местоположение, как показано на иллюстрации на этой странице.
- Если карта не отображается, проверьте, получен ли ключ API и добавлен ли он в приложение как описано выше. Проверьте журнал Android Monitor в Android Studio на наличие сообщений об ошибках, касающихся ключа API.
- Если на карте отображается только один маркер, установленный на Сиднейском мосту (местоположение по умолчанию, указанное в приложении), проверьте, предоставили ли вы приложению доступ к данным о местоположении. Приложение запрашивает доступ в процессе запуска, используя шаблон, который приводится в руководстве с описанием разрешений Android. Обратите внимание, что разрешения можно также предоставить непосредственно на устройстве, выбрав Настройки > Приложения >название приложения > Разрешения > Местоположение. Подробную информацию о том, как указывать разрешения в коде, вы найдете ниже, в руководстве по запросу доступа к данным о местоположении.
- Используйте средства отладки Android Studio чтобы просмотреть журналы и выполнить отладку приложения.
Понимание кода
В этой части руководства описаны наиболее важные компоненты приложения CurrentPlaceDetailsOnMap, чтобы вы могли понять принципы создания подобного приложения.
Создание клиента Places API
Ниже указаны объекты, которые являются основными точками входа в Places SDK на платформе Android:
- Класс Places создает клиентов для Places SDK на платформе Android и управляет ими.
- Интерфейс PlaceDetectionClient устанавливает текущее местоположение устройства и мест рядом.
Интерфейс LocationServices – главная точка входа для сервисов геолокации на платформе Android.
Чтобы использовать API, выполните следующие действия в рамках метода onCreate() вашего фрагмента или действия:
- Инициализируйте объект Places .
- Создайте объект PlaceDetectionClient .
- Создайте объект FusedLocationProviderClient .
Kotlin
Запрос доступа к данным о местоположении
Чтобы в вашем приложении работали функции геолокации (в том числе кнопка Мое местоположение на карте), необходимо получить от пользователя разрешение на доступ к данным о местоположении.
Это руководство содержит код, позволяющий запросить доступ к точным данным о местоположении. Подробную информацию можно найти в руководстве по разрешениям Android.
Добавьте следующее разрешение в качестве дочернего для элемента в вашем манифесте Android:
Запросите разрешения при запуске приложения, чтобы пользователь мог принять или отклонить запрос доступа к данным о местоположении. Следующий код позволяет проверить, предоставил ли пользователь доступ к данным о точном местоположении. Если разрешение отсутствует, оно будет запрошено у пользователя.
Kotlin
Переопределите обратный вызов метода onRequestPermissionsResult() , чтобы обработать результат запроса доступа:
Kotlin
Метод updateLocationUI() мы рассмотрим ниже.
Добавление карты
Отобразите карту, используя Maps SDK для Android.
Добавьте элемент в файл макета для объекта activity, activity_maps.xml . Этот элемент указывает, что фрагмент SupportMapFragment должен выступать в роли контейнера для карты и предоставить доступ к объекту GoogleMap . В учебном проекте используется версия вспомогательной библиотеки Android для фрагмента карты, чтобы обеспечить обратную совместимость с более ранними версиями фреймворка Android.
В методе onCreate() своего объекта activity установите файл макета как представление контента.
Kotlin
Реализуйте интерфейс OnMapReadyCallback и переопределите метод onMapReady() , чтобы настроить карту, когда объект GoogleMap будет доступен:
Kotlin
В методе onCreate() своего объекта activity получите дескриптор для фрагмента карты путем вызова метода FragmentManager.findFragmentById() . Затем используйте метод getMapAsync() , чтобы зарегистрировать обратный вызов карты:
Kotlin
Разместите в коде метод updateLocationUI() , чтобы добавить на карту элементы управления. Если пользователь предоставил разрешение на использование данных о местоположении, активируйте слой «Мое местоположение» и соответствующий элемент управления на карте. В противном случае отключите их и установите для текущего местоположения значение null:
Kotlin
Как получить информацию о местоположении устройства Android и позиции карты
Обратитесь к поставщику геоданных из нескольких источников, чтобы определить последнее известное местоположение устройства. Затем используйте эти данные для позиционирования карты. В этом руководстве есть код, который вам понадобится. Дополнительную информацию о том, как определить местоположение устройства, можно найти в руководстве по работе с поставщиком геоданных из нескольких источников для Location API сервисов Google Play.
Kotlin
Как получить данные о текущем местоположении
Получить список мест, где с вероятностью может находиться устройство, можно с помощью Places SDK for Android. Место в данном случае – это компания или другой объект для посещения.
Выполните приведенные ниже инструкции, чтобы настроить показ места, когда пользователь нажимает кнопку Узнать место. Пользователь увидит список подходящих мест и сможет сделать выбор, а затем добавить на карту маркер, чтобы указать местоположение выбранного места. В этом руководстве вы найдете код для взаимодействия с Places SDK for Android. Дополнительную информацию можно найти в руководстве по получению информации о текущем месте.
- Создайте файл макета ( current_place_menu.xml ) для меню параметров и переопределите метод onCreateOptionsMenu() , чтобы настроить это меню. Ознакомьтесь с кодом в примере приложения.
- Переопределите метод onOptionsItemSelected() , чтобы получать актуальную информацию о месте, когда пользователь нажимает Узнать место:
Kotlin
Создайте метод showCurrentPlace() , чтобы получить список мест, где может находиться устройство:
Kotlin
Создайте метод openPlacesDialog() , чтобы показать форму, в которой пользователь может выбрать место из списка. Добавьте на карту маркер для выбранного места. Маркер должен содержать сведения о названии и адресе места, а также другие атрибуты, которые предоставляет API:
Kotlin
Создайте собственный макет для контента информационного окна. Это позволяет показывать в окне несколько строк. Сначала добавьте файл макета XML ( custom_info_contents.xml ), который содержит текстовое представление для заголовка информационного окна, и еще одно текстовое представление для фрагмента (иными словами, текстовый контент информационного окна).
Реализуйте интерфейс InfoWindowAdapter , чтобы развернуть макет и загрузить контент информационного окна:
Kotlin
Сохранение состояния карты
Сохраните информацию о положении камеры и местоположении устройства. Когда пользователь поворачивает устройство Android или изменяет параметры конфигурации, фреймворк Android останавливает и заново запускает объект activity для карты. Чтобы обеспечить удобство для пользователя, сохраните соответствующее состояние приложения и восстановите его при необходимости.
Это руководство содержит весь код, который необходим для сохранения состояния карты. Дополнительную информацию вы можете найти в руководстве по использованию пакета savedInstanceState .
В операции, работающей с картой, настройте основные значения для сохранения состояния объекта activity:
Kotlin
Реализуйте обратный вызов onSaveInstanceState() , чтобы сохранить состояние, когда операция будет приостановлена:
Kotlin
В методе onCreate() своей операции получите информацию о местоположении устройства и положении камеры карты, если это было ранее сохранено:
Kotlin
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Источник