2. Google Maps API Key 발급받기
Google Maps 데이터에 접근하는 Android에 애플리케이션을 제작하기 위해서 Google Maps service에 등록 및 약관 동의 절차(Maps API Key Signup)를 거쳐야 합니다. 참고로 Maps API Key 발급은 무료이며, 로그인 가능한 구글 계정이 필요합니다.
1) SDK 디버그 서명 증명서의 MD5 핑거프린트(Fingerprint:지문) 확인하기
디버그 서명 증명서(debug.keystore 파일)는 Android SDK가 자동으로 생성하며, 개발환경의OS마다 다른 경로가 생성됩니다. (리스트2-1 참고)
[리스트2-1]OS별 디버그 서명 증명서(dubug.keystore) 저장 경로
Win Vista: C:\Users\%username%\.android\debug.keystore
Win XP: C:\Documents and Settings\%username%\.android\debug.keystore
OS X and Linux: ~/.android/debug.keystore
debug.keystore의 저장된 위치를 확인했으면 썬 JDK에 포함되어 있는 keytool를 이용하여 핑커프린트 확인할 수 있다. ([예제2-1])
[예제2-1]keytool로 Fingerprint를 확인(붉은색 글씨가 Fingerprint) (Vista환경예시)
C:\Users\test\.android>dir *.keystore
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: BXXX-XXXX
C:\Users\test\.android 디렉터리
2010-02-06 오후 09:07 1,268 debug.keystore
1개 파일 1,268 바이트
0개 디렉터리 X,XXX,654,592 바이트 남음
C:\Users\test\.android>"%java_home%\bin\keytool.exe" -list -keystore debug.keystore -keypas
s android -storepass android -alias androiddebugkey
androiddebugkey, 2010. 2. 6, PrivateKeyEntry,
인증서 지문(MD5): AA:22:33:F7:32:12:22:EC:68:93:8B:55:44:69:ED:47
2) 구글 지도 API 가입하기(Maps API Key Signup)
다음 URL 이동하여 위에서 확인한 인증서 지문(MD5) 값을 복사하여 [My certificate's MD5 fingerprint] 입력란에 넣고 Generate API Key를 클릭합니다. 여기서 구글 로그인 이 필요합니다.
[그림2-1] Maps API Key Signup - Start Webpage
[그림2-2] Maps API Key Signup - Result Webpage
발급된 사용자 키를 다른 곳에 잘 저장해 두고 애플리케이션 제작하는 단계로 넘어갑니다.
3. Google Maps API 이용한 애플리케이션 제작하기 (GoogleMapHello)
Google Maps API를 이용하여 맵 정보를 표시하는 간단한 애플리케이션 만들어 보겠습니다.
1) Eclipse 에서 GoogleMapHello 프로젝트를 생성하기
[그림3-1]New Android Project : GoogleMapHello
2) Maps library를 사용 설정 및 인터넷 접속 허용 설정하기(AndroidManifest.xml)
Standard Android library에는 Maps library가 포함되어 있지 않으므로 사용하려면 별도의 설정이 필요합니다. 또한 인터넷에 접속하여 Maps data를 조회하려면 INTERNET Permission을 지정해야 합니다.
[예제3-1] GoogleMapHello의 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="tobe30.sample.googlemaphello"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".GoogleMapHello"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--map library 사용 설정-->
<uses-library android:name="com.google.android.maps" />
</application>
<uses-sdk android:minSdkVersion="7" />
<!--INTERNET Permission 지정-->
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
3) 애플리케이션의 레이아웃 작성하기 (res/layout/main.xml)
com.google.android.maps.MapView 클래스를 레이아웃에 추가한다.
[예제3-2] GoogleMapHello의 res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="043KehnZyxJK7Ny0hTKJPBcp_rihr6VLCMoDQeA"
/>
android:clickable 속성은 사용자의 상호작용 허용 여부를 설정하는 것입니다. 이것을 false로 설정하는 경우 터칭(에뮬레이터에서는 마우스로)으로 맵을 조작할 수 없게 됩니다.
android:apiKey에는 위에 "2. Google Maps API Key 발급받기" 과정을 통해 얻은 자신의 Maps API Key를 설정합니다.
4) 애플리케이션의 Activity를 구현하기 (GoogleMapHello.java)
MapActivity 클래스는 MapView에 지도 표시를 관리하는 역할을 합니다. 그래서GoogleMapHello Activity는 MapActivity 클래스를 상속받아 구현해야 합니다.
[예제3-3]GoogleMapHello Activity 소스
package tobe30.sample.googlemaphello;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import android.os.Bundle;
// GoogleMapHello 는 MapActivity를 상속
public class GoogleMapHello extends MapActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true); //줌컨트롤을 활성
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
isRouteDisplayed() 메소드는 MapActivity의 추상 메소드이므로 반드시 구현해야 합니다. isRouteDisplayed() 메소드는 애플리케이션에 라우트 정보를 표시할 경우 true를 반환하고, 그렇지 않은 경우 false를 반환합니다.
5) 실행
Eclipse > Run > Run as > Android Application
[그림3-2]GoogleMapHello 실행화면
※ GoogleMapHello는 Map API를 이용하는 애플리케이션이므로 실행할 때 타켓이 Google APIs(Google Inc.) - API Level n으로 설정된 ADV로 실행해야 한다.(그림3-3)
[그림3-3]Google APIs(Google Inc.) - API Level n 타켓의 AVD 생성
참고
끝!
노트북에서 해보느라고 아주 죽는 줄 알았습니다. 노트북이 사양이 좀 딸려서 애플리케이션 한번 실행하는데 꽤나 느립니다. 역시 최고에 장벽은 영어! 나에게는 존재하지 않는 영어 실력으로 영문 문서 읽어가면서 하려니 포스팅 하나 작성하는데 하루 종일 걸렸습니다. 나름 최선을 다해 자세히 설명을 하려고 노력했는데 보시는 분들이 얼마나 잘 이해하실지.....그리고 이 글은 맘으로대 퍼가셔도 상관없습니다. 출처만 분명히 밝혀주시면 됩니다.