Александр Горбач


программирование, админство

Добавление поддержки гугло-карт в приложение

без комментариев

Для того, чтобы в своем приложении под андроид использовать google maps нужно пройти довольно-таки извилистый путь по подключению гугл-api и подключению библиотек google play services в свое приложение. Здесь опишу пошаговую инструкцию по модификации приложения и прохождению извилистых путей по сайтам гугла. Основная статья по подключению карт лежит на гугле, но опыт, сын ошибок трудных..

Для начала, открываем Android SDK Manager и устанавливаем пакеты Google Play Services и Google Repository
sdkman-play-services

После, нам нужно подключить эти сервисы в наш проект. Если используем андроид студию (а я ее настоятельно рекомендую использовать), то в наш build.gradle добавляем зависимость от библиотек google play services:

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.google.android.gms:play-services:+'
}

И в манифест приложения в секцию <application> добавим указание на версию библиотек, с которыми собрано приложение.


более подробно инструкция по подключению SDK так же есть на гугле.

Затем, для отображения карты нужно получить ключ Google Maps API для Android. Это ключ выдается для каждого отдельного приложения, которое идентифицируется по сертификату, которым оно подписано и полному имени приложения.
Первым делом нужно получить SHA-1 отпечаток сертификата нашего приложения. Сертификаты для каждого приложение есть для отладки и для релиза. Как сделать и прикрутить сертификат для релиза я писал в предыдущей статье, а для дебага сертификат создается автоматически на каждом компьютере. Для того, чтобы посмотреть отпечаток приложения достаточно выполнить команду

Для Linux или OS X, открыть окно терминала и выполнить:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

Для Windows Vista или Windows 7/8, выполнить:

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

Для релизного сертификата же указываем путь к нашему хранилищу:

keytool -list -v -keystore your_keystore_name -alias your_alias_name

где, your_keystore_name — это полный путь до хранилища ключей, your_alias_name — это имя вашего ключа.

Сейчас уже можем пойти в консоль API Google. Здесь мы будем получать наш ключ API. Еще раз обращаю внимание, что для дебуга и релиза нам понадобятся разные ключи, так как приложение подписывается разными сертификатами.

  1. В браузере переходим в консоль API Google
    • Если вы никогда до этого не использовали консоль Google API, то вам будет предложено создать проект, который поможет вам в дальнейшем отслеживать применение API карт Google для Android. Нажмите «Create Project», консоль создаст новый проект, который называется «API Project». На следующей странице это имя появится в левом верхнем углу. Для того чтобы переименовать или изменить какие-либо настройки проекта — просто нажмите на это название.
    • Если вы уже использовали ранее консоль Google API, то вы сразу же увидите список существующих проектов и доступных сервисов. Но все-таки стоит создать новый проект для приложения. Для этого нажмем имя проекта в верхнем левом углу и выбирает пункт «Create»
  2. Вы должны увидеть список доступных API и сервисов в главном окне. Если вы этого не видите, то выберите «Services» в левом меню
  3. В списке сервисов, отображаемых в середине страницы, прокрутите до называния Google Maps Android API v2. Справа от названия нажмите переключатель, чтобы он оказался в состоянии «Включено».
  4. Затем вам покажется условия использования Google Maps Android API. Если вы с ними согласны, тогда принимайте их, после этого вас автоматически перенаправит на список сервисов.

Теперь можем поработать с нашим проектом.

  1. В левом меню кликам на «API Access»
  2. В открывшимся окне нажимаем «Create New Android Key….»
  3. В диалоговом окне вводим отпечаток SHA-1 нашего сертификата, затем точка с запятой, потом название пакета нашего приложения. К примеру: BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75;com.example.android.mapexample
  4. Консоль гугла ответит нам 40-символьным ключом для нашего приложения, к примеру вот таким: AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

Ура! Мы получили ключ! Теперь его прикрутим к нашему приложению. В файл AdroidManifest.xml в секцию <application> добавляем:


заменив API_KEY на полученный ключ.
Теперь нужно обеспечить необходимые разрешения на приложение, для того, чтобы оно корректно отображалось и работало на устройстве.
Разрешения добавляем обычным способом, добавляя элементы <uses-permission> дочерними элементу <manifest>. Их синтакс:


К примеру, для того чтобы разрешить приложению доступ в Интернет, добавим:


И таким же образом добавляем следующие разрешения для нашего приложения:

  • android.permission.INTERNET — Для того, чтобы API могло скачивать карты с серверов Google Maps.
  • android.permission.ACCESS_NETWORK_STATE — Разрешает API проверять статус соединения, для того, чтобы определить какие данные можно скачивать.
  • com.google.android.providers.gsf.permission.READ_GSERVICES — Разрешает API доступ к интернет-сервисам Google
  • android.permission.WRITE_EXTERNAL_STORAGE — Разрешает API кэшировать тайлы карт на внешнем хранилище устройства.

Нижеследующие разрешения являются рекомендованными, но могут быть проигнорированными, если ваше приложение не обращается к текущему положению пользователя, программного или включением слоя «My Location».

  • android.permission.ACCESS_COARSE_LOCATION — Разрешает API использовать WiFi или сотовую сеть для определения местоположения устройства.
  • android.permission.ACCESS_FINE_LOCATION — Разрешает API использовать Global Positioning System (GPS) для определения положения устройства с небольшой погрешностью.

Так же нужно обозначить необходимость использования OpenGL ES версии 2, так как Google Maps Android API использует OpenGL ES версии 2 для отрисовки карт. Для этого добавляем следующий элемент <uses-feature> дочерним в раздел <manifest> в AndroidManifest.xml:


Ну и наконец-то добавляем саму карту!

Для отображения карты используем элемент в наем layout-е


Глобальная переменная для класса активности, в которой хранится наш указатель на карту:

MapView mMapView;

В методе onCreate инициализируем указатель на карту и зададим какой-нибудь маркер:

MapsInitializer.initialize(this);
mMapView = (MapView) findViewById(R.id.map);
mMapView.onCreate(savedInstanceState);
GoogleMap map = mMapView.getMap();
if (map != null) {
  map.setInfoWindowAdapter(this);
  map.setMyLocationEnabled(true);
  LatLng sydney = new LatLng(-33.867, 151.206);
  CameraUpdate camera = CameraUpdateFactory.newLatLngZoom(sydney, 13);
  map.animateCamera(camera);


   Marker marker = map.addMarker(new MarkerOptions()
                .title("Sydney")
                .snippet("The most populous city in Australia.")
                .position(sydney));

}

Для простоты сам класс активности у нас будет реализовывать интерфейс GoogleMap.InfoWindowAdapter и реализует методы:

 @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();


    }

    @Override
    protected void onPause() {
        mMapView.onPause();
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        mMapView.onDestroy();
        super.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }

UPDATE. В процессе эксплуатации карт вылезла странная ошибка с черным экраном вместо карты, описание и решение смотрим в статье Как победить черный экран в Google Maps

Автор Sash(k)a

Апрель 22nd, 2014 at 2:56 пп

Опубликовано в Без рубрики

Тэги ,

Яндекс.Метрика