안드로이드 Google Map api 이용하기

|
1. 환경 확인
- 안드로이드 SDK매니저에서 Google APIs by Google Inc., 가 설치되었는지 확인. 이 역시 안드로이드 버전별로 있다.
설치가 안되어 있다면 Available packages에서 추가하여 설치한다.

- API Key 발급 : 구글 맵을 사용하려면 API Key를 발급받아야 한다.
링크 : http://code.google.com/intl/ko-KR/android/add-ons/google-apis/maps-api-signup.html

API key발급을 위해서는 어플리케이션을 sign하는 키의 MD5해시가 필요한데, 이는 따로 확인하여 넣어주어야 한다.

일단 시작->실행에서 cmd를 입력하여 커맨드 윈도우를 띄운다.
여기서 keytool 이라고 실행해 본다.
뭔가 옵션 목록이 주욱 나오면 다음 단계로 넘어가면 되고, 안뜬다면 keytool의 PATH를 먼저 걸어주어야 한다.
(절대경로를 사용해서 직접 실행해도 된다... 이건 각자 마음...)

(아래부터 나오는 예시는 작성자의 컴퓨터 환경이므로 폴더명 등은 확인하여 수정해야 함)
jdk 설치경로를 확인하여 시스템환경값에 추가하여 준다. 기본설치(next, next...)를 했다면 Program Files\Java\jdk1.x.x_xx 일것이다
keytool이 위치하는 경로는 그 아래 bin 폴더이다.

내 컴퓨터 -> 속성 -> 고급 -> 환경 변수에서 시스템 변수 중 PATH값을 더블클릭하여 jdk경로\bin 위치 추가. (구분자는 ; )

한번만 하고 말거라면 현재 창에서 다음 명령을 줘도 된다.
[code]
set PATH=%PATH%;C:\Program Files\Java\jdk1.6.0_22\bin
[/code]

다음으로 keystore의 위치를 확인한다.
Eclipse메뉴 -> Window -> Preferences -> Android -> Build 항목에서
Default debug keystore항목의 값을 확인한다.
(만약 Custom debug keystore항목에 값이 설정되어 있으면 이 값이 디버그 키가 된다.)

다시 커맨드창으로 돌아와서 keystore 위치로 이동한다.
[code]
cd C:\Users\user\.android
[/code]

그리고 다음 명령으로 MD5값을 확인한다.
[code]
keytool -list -keystore debug.keystore -storepass android -keypass android -alias androiddebugkey
[/code]

인증서 지문이라고 나오는 값을 위 키 발급 링크에 입력하여 API key 값을 발급받는다.




2. 레이아웃 구성
Google APIs 라이브러리로 프로젝트를 설정하여 Android project를 생성한 다음 레이아웃을 구성할때 MapView를 사용할 수 있다.
다른 구성값들은 일반적인 View들과 비슷하며, API key를 추가적으로 입력해 주어야 한다.
MapView 속성값에 android:apiKey="API Key 문자열" 을 추가해준다.

또한 MapView가 서버에서 지도 데이터를 받아오므로 인터넷 연결에 대한 권한과,
GPS장치를 사용할 예정이라면 GPS에 대한 어플리케이션 권한을 추가해 준다.

AndroidManifest.xml 내 manifest하위 노드로 추가.
[code xml]
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
[/code]



3. 코드 작성
- 초기화 : 필요없다고 봐도 무방. 레이아웃에 MapView를 넣고 apiKey를 정상적으로 줬다면 기본 위치로 맵이 뜨게 된다.
- 다른 View와 마찬가지로 findViewById로 객체를 받아와서 사용할 수 있다.
- 맵을 이동하거나 줌인/아웃을 하기 위해서는 MapController클래스를 사용한다. 이는 MapView.getController()를 통해 얻어올 수 있다.
- 좌표값을 위해 사용되는 GeoPoint는 실제 위/경도값에서 1e6을 곱한 값이다. (1000000을 곱한 값)


4. GPS값 받아오기
[code java]
LocationManager loc = (LocationManager)getSystemService(LOCATION_SERVICE);
Location l = loc.getLastKnownLocation(LocationManager.GPS_PROVIDER);
[/code]

하지만 getLastKnownLocation은 현 위치값을 refresh하도록 하지는 않는다.
현재 위치값을 새로 받아오려면 다음과 같이 사용한다.

[code java]
loc.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() {
  @Override
  public void onLocationChanged(Location location) {
    //location.getLatitude()와 location.getLongitude()로 값을 받아올 수 있음
  }
....
});
[/code]
And