서론
- 위치 기반 서비스(LBS:Location Based Service)에 대해
(개인적이 주관으로 기술한 내용)
   스마트 폰에서 유용하다라고 생각하는 것 중에 위치 기반 기술, 맵 정보, 그리고 여기에 다른 유용한 정보를 융합하여 더 나은 정보를 제공하는 애플리케이션이 상당 부분을 차지합니다. 사례를 보면 자기 주위 가장 싼 주유소를 찾아주는 앱(App.: Application 의 줄임말 ), 특정 책이 있는 서점을 찾아주는 앱 등이 이를 대표하는 앱입니다.

[휴대전화의 위치 기반(맵정보 활용) 서비스의 특징 및 문제점]
  - 하나 이상의 서비스를 융합하여 새로운 서비스 제공하는 Mashup 형태
  - 프라이버시 침해 우려(맵서비스 제공자에게 개인의 위치정보 전달)
  - 위치정보(맵정보)와 융합할 소스 정보 제공자에 의존적
     위치(맵정보)와 융합할 정보를 공급자가 차단하는 경우 서비스 불가.

이런 몇 가지 문제점이 보완된다면 더욱 다양한 방향으로 활용될 것이기 때문에 위치기반(맵정보) 서비스
말로 스마트 폰에 핵심라고 할 수 있습니다.

1. 위치 기반 애플리케이션(Location Based Application)
  위치 기반 애플리케이션은 무선 기기내에 GPS(Global Positioning System) 등을 이용하여 사용자의 현재 위치 정보(맵 정보)에 따르는 다른 유용한 정보를 결합하여 새로운 기능를 제공하는 애플리케이션입니다. (제나름대로 정의한 것)
이런 애플리케이션을 안드로이드에서 Google Maps API와 android.location Library를 이용하며 아주 손쉽게 제작이 가능합니다.(리스트1-1)

[리스트1-1]위치 기반 관련 패키지(라이브러리)
  Google Maps Service에 접근하는 인터페이스를 제공하는 패키지로써 주요 클래스는 맵을 표시하는  MapView 클래스와 MapView를 Activity를 관리하는 MapActivity 클래스 등으로 구성되어 있습니다.
 
  GPS나 무선랜 등의 정보를 이용하여 휴대전화의 현재 위치 정보(위도,경도)를 얻기 위한 기능을 제공하는 패키지로써 시스템의 위치 서비스(Location Service)의 접근을 제공하는 LocationManager 클래스, 위치정보와 주소정보를 변환하는 Geocoder 클래스, GPS엔진 상태를 표현하는 GpsStatus 클래스 등으로 구성되어 있습니다.

*** 이제 구글맵을 연동하는 안드로이드 애플리케이션을 제작 방법을 소개하려고 합니다. 시작 전에 컴퓨터에 안드로이드 개발환경 구축 전인 경우 지금부터 과정을 진행할 수가 없습니다. 만일 이런 경우의 독자라면  "안드로이드(Android) 개발환경 구축하기" 포스트를 참고하여 개발환경을 먼저 구축하고 다음 내용 진행하시기 바랍니다.

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 생성
사용자 삽입 이미지






























참고

끝!
노트북에서 해보느라고 아주 죽는 줄 알았습니다. 노트북이 사양이 좀 딸려서 애플리케이션 한번 실행하는데 꽤나 느립니다. 역시 최고에 장벽은 영어! 나에게는 존재하지 않는 영어 실력으로 영문 문서 읽어가면서 하려니 포스팅 하나 작성하는데 하루 종일 걸렸습니다. 나름 최선을 다해 자세히 설명을 하려고 노력했는데 보시는 분들이 얼마나 잘 이해하실지.....그리고 이 글은 맘으로대 퍼가셔도 상관없습니다. 출처만 분명히 밝혀주시면 됩니다.

이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 좐군

2010/03/31 12:59 2010/03/31 12:59

Trackback URL : http://John.tobe30.com/tc/trackback/310

Comments List

  1. 공돌이 2010/04/01 20:02 # M/D Reply Permalink

    좐군님 대단하세요 ㅎㅎ 안드로이드 책이랑 다른 사이트 참고해서 했어요 ㅎㅎ

    http://androidhuman.tistory.com/

    이곳에도 강좌가 많더군요^^ 아시고 계실지도 ㅎㅎ

    1. 좐군 2010/04/02 15:48 # M/D Permalink

      저는 주로 공식사이트로 이용하는 편이라.
      모르는 곳이였는데... 좋은 정보 감사합니다.

  2. 스티븐잡스 2010/04/03 21:48 # M/D Reply Permalink

    안녕하세요.

    mabifest Fie에서l 라이브러리를 com.google.android.maps 가져다 쓰잖아요?
    그리고 나서 *.java 파일에서 맵뷰컨트롤러를 호출하려고 하니까 에러가 나네요

    MapView map_veiw = (MapView)findViewById(R.id.mapview);

    id 다음에 mapview를 인식못하네요.. R.java 파일에 임의로 써줘야 되는건지..

    1. 좐군 2010/04/05 13:31 # M/D Permalink

      안녕하세요. 주인장입니다.

      위 글을 작성 할 때 같은 문제를 겪었습니다.
      프로젝트를 다시 생성도 해보고, 이클립스에서 속성창릅 불러 수정도 했는데 결국 해결못하고, R.java 파일을 직접 해당 ID값을 입력해서 컴파일을 했습니다.

      리소스 관련된 사항은 다음을 참고하세요.
      http://developer.android.com/guide/topics/resources/available-resources.html#layoutresources

      해보시고 잘 안되시면 다시 댓글 남겨주세요.

  3. 스티븐잡스 2010/04/06 20:05 # M/D Reply Permalink

    되었습니다. R.id.mapview를 직접 만들어주니 해결되었습니다.

    리소스 관련 사항도 잘 보았습니다(영어라서 대충ㅠ)

    근데 왜 알아서 안생길까요......ㅠ

    아무튼 감사합니다.

  4. 하로하로 2010/04/21 14:50 # M/D Reply Permalink

    MD5나 API key는 각 개인별로 있는거라 모자이크 하시는게 좋을꺼 같은데요.....

    1. 좐군 2010/04/21 17:11 # M/D Permalink

      이 그림에 포함된 키값 임의로 제가 지정한 값입니다.ㅋㅋ

  5. 이민효 2010/05/30 19:07 # M/D Reply Permalink

    제가 쌩 초보자라서 그런데 R.java 파일을 직접 해당 ID값을 입력하라는게 어뭔지를 잘 몰라서요.. 소스좀 보여주시면 안될까요 ? ㅠ

    1. 들짐승소년캔듸 2010/10/11 14:23 # M/D Permalink

      직접 안되거나 또는 R.java에 들어가지 않을경우

      에는 가끔 메인메뉴에 Project - > Clean 해주시면

      어느정도 완화되는 효과를 보실수 있을꺼 같습니다 ^-^

  6. 예영파피 2010/06/04 16:27 # M/D Reply Permalink

    좋은글 잘보고 갑니다. 퍼가요

    출처는 http://john.tobe30.com/tc/entry/Android_GoogleMapsAPI_Using 로 표시합니다.

  7. nuno1333 2010/08/05 12:45 # M/D Reply Permalink

    잘보고 잘따라 했습니다 좀 퍼가요

  8. ^^ 2010/08/24 11:50 # M/D Reply Permalink

    좋은 글 고맙습니다. 담아갈게요~^^

  9. risepower 2010/08/27 03:10 # M/D Reply Permalink

    오우 구글 API 때문에 머리가 아팠는데... 게보린 안먹어도 될듯 ㅜㅜ 약값 지켜준 님께 감사요 !! ^-^

  10. 들짐승소년캔듸 2010/10/11 14:24 # M/D Reply Permalink

    좋은글 잘 보고 있습니다 ^-^;

    게다가 설명도 너무 보기쉽게 잘해주셔서~

    책보는것보다는 훨씬 수월하게 잘 해결하였습니다~

    감사합니다~

  11. 소징 2010/11/25 13:20 # M/D Reply Permalink

    잘 보고 잘 활용했습니다~~!! 정말 책보다 더 좋은듯해요 감사합니다!

  12. woodz 2010/12/28 21:56 # M/D Reply Permalink

    정리가 아주 잘되어 있네요~ 감사합니다. ^^

  13. 코프 2011/04/22 09:23 # M/D Reply Permalink

    좋은 정보 감사해요.와우...덕분에 좋은거 하나 알았네요..
    혹시 좀더 많은 질문과 궁금한점을 여쭤봐도 될까여?
    wss02@naver.com 네이트온 친추좀.
    앱개발에관심이 너무 많아서요.ㅜㅜ

  14. 코프 2011/04/22 10:43 # M/D Reply Permalink

    이제 잘 됩니다.그런데 한가지 궁금점이 현재 내 위치를
    뿌려지게 하고 싶은데..그건 어떤식으로 구현을 해야하나여?

  15. http://blog.daum.net/linkinparklife  2011/10/14 10:33 # M/D Reply Permalink

    20자리 키가 발급됐는데 앞의 16자리만 입력해야 제대로 먹네요.
    감사합니다.

    1. 좐군 2011/11/16 02:33 # M/D Permalink

      하하 그런가요....

Leave a comment
[로그인][오픈아이디란?]