Google Map

| 09.01.2015

Рассмотрим простейший пример использования в приложении карты Google Map. Пока что, все что мы сделаем, это создадим экран с одной кнопкой и фрагментом. При запуске приложения во фрагмент автоматически будет загружаться карта обычного (схематичного) типа, а при клике на кнопку во фрагмент будем загружать спутниковую карту.

Google Map

Предварительно нам нужно получить API-ключ для приложения в Google API консоли, как это расписано здесь. Обратите внимание, что если вы генерировали SHA1-ключ с помощью консоли, то запускать приложение на «живом телефоне» можно будет только путем подготовки «подписанного» apk-файла.

Разметка res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:id="@+id/btnTest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClickLoad"
        android:text="@string/load">
    </Button>
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </fragment>
</LinearLayout>

Фрагмент включает в себя атрибут name с именем класса SupportMapFragment.

Код MainActivity.java


package ru.androiddocs.map;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;

import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;


public class MainActivity extends ActionBarActivity {

    SupportMapFragment mapFragment;
    GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        map = mapFragment.getMap();
        if (map == null) {
            finish();            
        }        
    }

    public void onClickLoad(View view) {
        map.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
    }
}

После запуска приложения во фрагмент сразу подгружается карта, а метод onClickLoad() обрабатывает клик по кнопке. По клику мы устанавливаем новый тип карты MAP_TYPE_SATELLITE (вид со спутника). Получится такой вид:

Google Map

Содержимое моего файлика build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 20
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "ru.androiddocs.map"
        minSdkVersion 9
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.google.android.gms:play-services:5.+'
}

Содержимое файла AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.androiddocs.map" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyBxW0IafpfsEE8J9_s5ecBExCPTkh_YbFG">
        </meta-data>
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version">
        </meta-data>
    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true">
    </uses-feature>
</manifest>

Строковые ресурсы strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Map</string>   
    <string name="load">Load</string>

</resources>

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

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

*