Сказ про подключение Google Maps Api v2 в android приложение

от автора

image
Столкнулся с необходимостью использования в приложении карты: выбор естественно пал на Google Maps (android все-таки). Привычно обратившись к сайту developers.android, через несколько ссылок попал на страницу Google Maps Android API v2. Изучив написанное, пришел к выводу, что дело в шляпе и стал вкрячивать форму из примера сразу в разрабатываемое приложение. Однако через час безуспешных попыток, решил что сначала нужно все же потренироваться и создал в Intellij IDEA (речь в статье пойдет именно про разработку в этой среде) новый проект. Спустя еще три часа и тонны перелопаченных сайтов, я все-таки добился хоть какого-то результата. И хотя меня терзают смутные сомнения, что он не единственно верный, хочу поделиться опытом, дабы сэкономить чье-то время. Кому интересно, добро пожаловать под кат!

Начнем с получение api-ключа. В принципе, если сразу делать все, как рекомендуют ребята из Google — проблем быть не должно. Однако в интернете очень много примеров получения ключа для первой версии api, что может ввести в заблуждение.
Первое, что надо сделать, получить SHA1 подписи тестового сертификата (именно SHA1, тогда как для первой версии api был нужен MD5). Идем в папку %JDK%/bin, зажимаем shift и, кликнув на пустом месте, выбираем “Открыть окно команд”. В появившейся консоли вводим

keytool -list -v -keystore "C:\Users\%user_name%\.android\debug.keystore" -storepass android 

Описание параметров

  • -list — получение списка сертификатов хранилища
  • -v — указывает на необходимость получения расширенной информации о сертификатах
  • -keystore — путь к хранилищу
  • -storepass — пароль от хранилища

В появившейся информации о сертификате копируем значения SHA1 и идем в Google APIs Console. На вкладке Services включаем Google Maps Android API v2, переходим в API Access и нажимаем кнопку Create new Android key…. В появившееся окно вводим хэш сертификата и, через точку с запятой, название пакета нашего будущего приложения, например com.example.mapsdemo.

После нажатия кнопки Create (или Update как на снимке) мы получаем наш api-ключ.
А вот теперь начинается самое интересное.
В отличии от первой версии api, где использовалась библиотека com.google.android.maps, во второй версии карты запихнули в Google Play Services, так что проверьте в SDK Manager‘е, что данная библиотека установлена.
Теперь запускаем Intellij IDEA, и создадим новый проект:

не забываем, что имя пакета должно быть com.example.mapsdemo.
В секцию application manifest‘а добавим следующий узел:

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="%API_KEY%"/> 

где %API_KEY% — полученный в APIs Console ключ.
Так же нужно дать разрешение на использование интернета и на доступ к сервису:

<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 

И добавить фичу, что мы используем OpenGL ES версии 2:

<uses-feature android:glEsVersion="0x00020000" android:required="true"/> 

Теперь то, о чем молчит Google!
Из папки %android-sdk%\extras\google\google_play_services\libproject копируем папку google-play-services_lib в, например, %IdeaProjects%\Android. В среде выбираем File -> Import Module… и указываем только что скопированную папку. Дальше везде можно смело кликать Next и в конце Finish.
Идем в настройки проекта на вкладку Modules, выбираем MapsDemo, вкладку Dependencies, нажимаем "+" и, выбрав Module Dependecy…, указываем google-play-services_lib. Снова жмем "+", но на этот раз выбираем Jars or directories…. Выбираем пакет в папке %android-sdk%\extras\google\google_play_services\libproject\google-play-services_lib\libs и потом еще в %android-sdk%\extras\android\support\v4.

Идем на вкладку Libraries, удаляем ссылку на google-play-services и добавляем на %android-sdk%\extras\android\support\v4 в модуль MapsDemo. Жмем кнопку Ok.

Теперь займемся формой.
Меняем разметку в layout‘е на

<fragment xmlns:android="http://schemas.android.com/apk/res/android"           android:id="@+id/mapView"           android:layout_width="match_parent"           android:layout_height="match_parent"           android:name="com.google.android.gms.maps.SupportMapFragment"/> 

На developers.android написано использовать MapFragment, вместо SupportMapFragment, но у меня не получилось.
А в коде, меняем родителя класса с Activity на FragmentActivity.
Запускаем приложение. Если оно не упало, а появилась надпись с кнопкой (в зависимости от sdk эмулятора (чистый android или google api) надпись и кнопка будут разные), то поздравляю Вы все сделали правильно. Нажатие на кнопку приведет к ошибке и закрытию приложения, но это не страшно: отладиться на эмуляторе все равно нельзя, нужно подключить живое устройство, на котором приложение должно выглядеть так:

Получить доступ к карте в коде можно так:

GoogleMap map = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.mapView)).getMap(); 

Ну, а работа с классом GoogleMap — это история, возможно, другой статьи!

ссылка на оригинал статьи http://habrahabr.ru/post/191206/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *