И на нашей улице переворачиваются грузовики с печеньками мороженым и мармеладками! Как уже было сказано, вышла новая версия API. И даже вкратце было рассказано, что же там есть новенького. Я, пока, не могу раскрыть всех улучшений, с точки зрения разработчика. Но некоторые особые плюсы разработки приложений, использующих карты, готов выделить.
Первое, и самое, наверное, вкусное — теперь можно во всю использовать fragment’ы, вместо MapView. Для этого достаточно вставить следующий код в разметку:
Во-вторых стало гораздо удобней работать с пинами. Правда, теперь нужно привыкнуть к тому, что они называются маркерами, и будет гораздо удобней. Теперь не нужно городить ItemizedOverlay, и тому подобное. Теперь достаточно просто выполнить метод addMarker(MarkerOptions options) с нужными параметрами, и маркер будет красоваться на указанной позиции.
Третий плюс — стало совсем удобно рисовать на карте объекты, которые без проблем будут зумиться и скролиться вместе с картой, без единой заморочки! Достаточно просто добавить фигуру(метод addPolygon(PolygonOptions options)) или линию(метод addPolyline(PolylineOptions options)) на карту, и всё. Это значит, что теперь без проблем можно закрасить страну, город, район… Свою машину?) Да всё, что угодно!
В глаза мне бросились следующие минусы:
Не отпугнуло? Тогда приступим к запуску нашего первого примера.
Для начала нам необходимо установить/обновить Google Play services SDK. Для этого нужно сделать следующее:
После того, как установка завершена, по адресу <android-sdk>/extras/google/google_play_services можно найти папки libproject/google-play-services_lib и samples/maps. Из содержимого первой папки нужно сделать модуль, который затем будем подключать к проекту. А из второй — как раз пример приложения по работе с картами. Советую сперва скопировать эти папки в директорию, где у вас лежат проекты, и уже там над ними работать, чтоб в SDK всегда лежала чистая копия библиотеки с примерами.
К сожалению, подсказать, как всё это проверуть в Eclipse я не могу. А вот шпаргалку, как это сделать в Intellij Idea приведу.
Чтобы заработали карты остаётся получить новый API_KEY — старый теперь не подходит. Позволю себе более детально описать этот процес, который вкратце ув. djvu объяснил здесь:
В полученном приложении будет очень много чего интересного, советую изучить максимально досканально.
PS: вся основная документация по новому 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)) на карту, и всё. Это значит, что теперь без проблем можно закрасить страну, город, район… Свою машину?) Да всё, что угодно!
В глаза мне бросились следующие минусы:
- Теперь, для работы с картами, у пользователя обязательно должно быть установлено приложение «Карты» от самого Google. В противном случае в лог выплёвывается ошибка, что «Google Maps application is missing». Но прилож��ние не говорит об этом пользователю, что может его разозлить. Наверное, можно сделать костыль, но жаль, что его нет сразу. PS: у меня стоит CyanogenMod на девайсе, так и поймал ошибку.
- Так же не получится обойтись без приложения “Сервисы Google Play”. Правда, об этой проблеме пользователю будет сообщено.., но не в очень красивой форме. Пока не искал пути, как можно сделать это сообщение более симпатичным.
- Кажется, что переезд на новую версию API будет неоправдано трудозатратен, что немного удручает. Особенно, если уже сделано много, но ещё предстоит не мало работы, а новые фишки как раз то, что нужно.
- Конечно, для кого-то может оказаться критичным то, что совместимо только с 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 объяснил здесь:
- Создаем SHA1 отпечаток со своего дебажного или релизного ключа
- Идем в консоль
- Create project… → Вводим название проекта, например “Google Maps Android API v2 test project”
- Переключатель Google Maps Android API v2 переводим с состояния “off” на “оn”
- Соглашаемся с “terms”(иначе прощаемся с Google Maps Android API v2).
- В левом навбаре идем в меню API Access и жмём кнопку “Create new Android key...”, расположенную снизу.
- Вводим “<SHA1>;<имя пакета>”. В моём случае имя пакета было com.example.mapdemo. Если не уверены в названии вашего пакета, то можете легко подсмотреть его в файле AndroidManiffest.xml, созданном при создании приложения, в первом теге manifest, значение атрибута package.
- Жмём кнопку Create.
- Полученный ключик вставляем в AndroidManifest.xml
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_api_key"/>
- Запускаемся!
В полученном приложении будет очень много чего интересного, советую изучить максимально досканально.
PS: вся основная документация по новому API собрана здесь.
Легкого и удачного геокодинга вам!