Pull to refresh

Пробуем на вкус API v2 карт под Android от Google

Reading time 4 min
Views 28K
И на нашей улице переворачиваются грузовики с печеньками мороженым и мармеладками! Как уже было сказано, вышла новая версия API. И даже вкратце было рассказано, что же там есть новенького. Я, пока, не могу раскрыть всех улучшений, с точки зрения разработчика. Но некоторые особые плюсы разработки приложений, использующих карты, готов выделить.

Первое, и самое, наверное, вкусное — теперь можно во всю использовать fragment’ы, вместо MapView. Для этого достаточно вставить следующий код в разметку:

<fragment
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"/>

Во-вторых стало гораздо удобней работать с пинами. Правда, теперь нужно привыкнуть к тому, что они называются маркерами, и будет гораздо удобней. Теперь не нужно городить ItemizedOverlay, и тому подобное. Теперь достаточно просто выполнить метод addMarker(MarkerOptions options) с нужными параметрами, и маркер будет красоваться на указанной позиции.

Третий плюс — стало совсем удобно рисовать на карте объекты, которые без проблем будут зумиться и скролиться вместе с картой, без единой заморочки! Достаточно просто добавить фигуру(метод addPolygon(PolygonOptions options)) или линию(метод addPolyline(PolylineOptions options)) на карту, и всё. Это значит, что теперь без проблем можно закрасить страну, город, район… Свою машину?) Да всё, что угодно!



В глаза мне бросились следующие минусы:

  1. Теперь, для работы с картами, у пользователя обязательно должно быть установлено приложение «Карты» от самого Google. В противном случае в лог выплёвывается ошибка, что «Google Maps application is missing». Но приложение не говорит об этом пользователю, что может его разозлить. Наверное, можно сделать костыль, но жаль, что его нет сразу. PS: у меня стоит CyanogenMod на девайсе, так и поймал ошибку.
  2. Так же не получится обойтись без приложения “Сервисы Google Play”. Правда, об этой проблеме пользователю будет сообщено.., но не в очень красивой форме. Пока не искал пути, как можно сделать это сообщение более симпатичным.
  3. Кажется, что переезд на новую версию API будет неоправдано трудозатратен, что немного удручает. Особенно, если уже сделано много, но ещё предстоит не мало работы, а новые фишки как раз то, что нужно.
  4. Конечно, для кого-то может оказаться критичным то, что совместимо только с Android 2.2+


Не отпугнуло? Тогда приступим к запуску нашего первого примера.

Для начала нам необходимо установить/обновить Google Play services SDK. Для этого нужно сделать следующее:
  • Запустить Android SDK Manager
  • Выбрать для установки пункт “Extras” → “Google Play services”
  • Нажать кнопку “Install packages”


После того, как установка завершена, по адресу <android-sdk>/extras/google/google_play_services можно найти папки libproject/google-play-services_lib и samples/maps. Из содержимого первой папки нужно сделать модуль, который затем будем подключать к проекту. А из второй — как раз пример приложения по работе с картами. Советую сперва скопировать эти папки в директорию, где у вас лежат проекты, и уже там над ними работать, чтоб в SDK всегда лежала чистая копия библиотеки с примерами.

К сожалению, подсказать, как всё это проверуть в Eclipse я не могу. А вот шпаргалку, как это сделать в Intellij Idea приведу.
Разворачивание проекта примера в Intellij Idea
  • File → New Project...
  • Create project from existing sources → Next
  • Устанавливаем в Project files location полный путь до samples/maps и жмём Next, Next...
  • File → Project Structure → Modules → Module SDK: Android 4.2 Google APIs → OK
  • В google-play-services_lib/src создаём файл com/google/Hack.java с примерно таким содержимым:
    package com.google;
    
    public class Hack {
    	// Empty class to ensure there is a src folder.
    }
    

    Он необходим, чтоб Idea нормально создала из этой директории модуль
  • В папку google-play-services_lib/libs копируем android-support-v4.jar. Он потребуется для совместимости со старыми версиями Android
  • File → Project Structure → Modules → “Плюсик” над второй колонкой → Module
  • Create module from existing sources → Указываем путь до google-play-services_lib → Next, Next...
  • Справа нажимаем “Плюсик” → Jars or directories → google-play-services_lib/libs → Ok
  • Ставим галочку возле появившейся строки в списке
  • Во второй колонке выбираем другой модуль(соответственно, проект) → “Плюсик” справа → Module Dependency… → OK → OK


Проблемы при запуске случались, но были довольно мелкими.

Чтобы заработали карты остаётся получить новый API_KEY — старый теперь не подходит. Позволю себе более детально описать этот процес, который вкратце ув. djvu объяснил здесь:

  1. Создаем SHA1 отпечаток со своего дебажного или релизного ключа
  2. Идем в консоль
  3. Create project… → Вводим название проекта, например “Google Maps Android API v2 test project”
  4. Переключатель Google Maps Android API v2 переводим с состояния “off” на “оn”
  5. Соглашаемся с “terms”(иначе прощаемся с Google Maps Android API v2).
  6. В левом навбаре идем в меню API Access и жмём кнопку “Create new Android key...”, расположенную снизу.
  7. Вводим “<SHA1>;<имя пакета>”. В моём случае имя пакета было com.example.mapdemo. Если не уверены в названии вашего пакета, то можете легко подсмотреть его в файле AndroidManiffest.xml, созданном при создании приложения, в первом теге manifest, значение атрибута package.
  8. Жмём кнопку Create.
  9. Полученный ключик вставляем в AndroidManifest.xml
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="your_api_key"/>
    

  10. Запускаемся!


В полученном приложении будет очень много чего интересного, советую изучить максимально досканально.

PS: вся основная документация по новому API собрана здесь.

Легкого и удачного геокодинга вам!
Tags:
Hubs:
+4
Comments 7
Comments Comments 7

Articles