1. 프로젝트 생성

 

1.1 프로젝트 만들기

 

전에 google map을 사용할 수 있는 API key를 생성했는데요.


[안드로이드] google map 사용을 위한 API 생성(2018.11)


이제 키가 잘 작동 하는지 테스트를 해보겠습니다.

안드로이드 프로젝트를 하나 생성 합니다.


MapTest 이라는 이름으로 생성을 하겠습니다.


프로젝트 명을 입력하는 화면 하단에 Package name이 있습니다.

com.example.컴퓨터이름.프로젝트명 이런식으로 나타나는데 [Edit] 버튼을 누르면 편집이 가능 합니다.



필요하면 편집을 하고 [Done] 버튼을 누르면 반영이 됩니다.



com.android.google.maptest 이렇게 변경을 해 보았습니다.



Android 4.0으로 선택을 했는데 각자 알아서 선택을 하면 됩니다.



Empty Activity를 선택 합니다.



모두 기본으로 놓았는데 변경이 필요하면 수정 합니다.

이제 [Finish] 버튼을 눌러 프로젝트를 생성 합니다.

 

수정한 Package name으로 생성이 되었는지 확인해 볼까요?



잘 되어 있군요.

 

1.2 패키지 이름 등록

 

새로 만든 프로젝트에서 구글 맵을 사용 하려면 패키지 이름을 API 키에 등록해야 합니다.

google에 로그인을 하고 https://console.developers.google.com 에 접속 합니다.



사용자 인증 정보 만들기에서 API1을 선택 합니다. 등록할 때 이름을 변경 했다면 다른 이름이겠죠.

 

라디오 버튼 중 Android 앱을 선택합니다.

[+ 패키지 이름 및 지문 추가]를 선택하면 패키지 이름과 SHA-1 인증서 지문이 하나 추가 됩니다.



신규 생성한 내용을 추가 합니다.

빨간색 박스가 이번에 만든 패키지인증서 지문 입니다.

[저장] 버튼을 선택 하면 패키지 이름으로 생성된 프로젝트 에서 지도를 사용할 수 있습니다.

 


2. 프로젝트 개발

 

2.1 API 키 등록

 

구글 맵을 사용하기 위한 키를 등록 해야 권한을 이용 하여 앱에 지도가 표시 됩니다.


AndroidMainifest.xml


<meta-data
   
android:name="com.google.android.geo.API_KEY"
   
android:value="생성된 API 키 입력" />


2.2 Layout 작성

 

activity_main.xml


지도를 표시할 fragment 를 추가합니다.

그런데 빨간색으로 오류가 나오는 군요.

map 관련 class가 없어서 발생 하니 추가해야 합니다.



build.gradle

implementation 'com.google.android.gms:play-services:10.0.1'


를 추가 합니다.

그러면 상단에 Sync를 맞추라고 합니다. [Sync Now]를 클릭 합니다.



다시 activity_main.xml에 가봅니다.



빨간색이 없어졌습니다.



2.3 지도 사용

 

이제 지도를 그려 보겠습니다.

MainActivity.java implements OnMapReadyCallback를 이용해 보겠습니다.

 

onCreate()함수에 Fragment를 추가 하고


FragmentManager fragmentManager = getFragmentManager();
MapFragment mapFragment = (MapFragment)fragmentManager
        .findFragmentById(R.id.
map);
mapFragment.getMapAsync(this);


onMapReady() 함수에 지도를 그려줍니다OnMapReadyCallback이걸 추가하면 map 기능이 추가되어서 onMapReady() 함수에서 작업하면 됩니다.  이 함수에서 정거장 위치, 약속장소등을 어떻게 표시하는지 기회가 되면 설명 드리겠습니다.


@Override
public void onMapReady(final GoogleMap map) {

    LatLng SEOUL =
new LatLng(37.56, 126.97);

   
MarkerOptions markerOptions = new MarkerOptions();
   
markerOptions.position(SEOUL);
   
markerOptions.title("서울");
   
markerOptions.snippet("한국 수도");

   
map.addMarker(markerOptions);
   
map.moveCamera(CameraUpdateFactory.newLatLng(SEOUL));
   
map.animateCamera(CameraUpdateFactory.zoomTo(14));
}


실행을 해볼까요?

아직 오류가 발생합니다.

 

Error: Program type already present: android.support.v4.app.BackStackRecord$Op

 

android.support.v4 오류이군요.

gradle에 아래 내용을 추가 합니다.


implementation 'com.android.support:support-v4:27.1.0'


오류가 없어졌습니다.


왔다 갔다. 이것 저것 추가하고 혼란 스러운가요?


하단에 추가한 전체 소스가 그리 길지 않습니다.


전체 소스를 보면서 읽으면 별거 없습니다.



2.4  결과


android google map

 

이제 잘 나오는 군요.

지도의 좌표를 임의로 설정해서 나온 결과 입니다.

다음 번에는 핸드폰의 위치를 지도에 표시 해보도록 하겠습니다.

 

 

3. Source Code

 

3.1 AndroidManifest.xml


개인이 발급 받은 API 키 값을 넣으세요.

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzxxxxx API 키 값xxxxxxxxxx_L8" />


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


3.2 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment" />

</android.support.constraint.ConstraintLayout>

3.3 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.android.google.maptest"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.google.android.gms:play-services:10.0.1'
    implementation 'com.android.support:support-v4:27.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}


3.4 MainActivity.java

package com.android.google.maptest;

import android.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

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

        FragmentManager fragmentManager = getFragmentManager();
        MapFragment mapFragment = (MapFragment)fragmentManager
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

    @Override
    public void onMapReady(final GoogleMap map) {

        LatLng SEOUL = new LatLng(37.56, 126.97);

        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(SEOUL);
        markerOptions.title("서울");
        markerOptions.snippet("한국 수도");

        map.addMarker(markerOptions);
        map.moveCamera(CameraUpdateFactory.newLatLng(SEOUL));
        map.animateCamera(CameraUpdateFactory.zoomTo(14));
    }

}

- copy coding -


+ Recent posts