본문 바로가기

위치 기반 서비스 사용하기/구글 지도 (Google Maps)

구글맵 API 활용하기 - (2) 구글맵 띄워보기

저번 시간에는 구글맵을 띄우기 위해 API Key를 발급받는 과정까지 알아보았습니다. 이번 시간부터는 본격적으로 구글맵을 띄워보는 것에 대해 다뤄보도록 하겠습니다.

[어플리케이션 정보]

액티비티
  • HelloMaps (HelloMaps.java)

레이아웃
  • main.xml

권한 (uses-permission)
  • android.permission.INTERNET
  • android.permission.ACCESS_FINE_LOCATION

외부 라이브러리 (uses-library)
  • com.google.android.maps

API Level
  • 6 : Google APis [Android 2.0.1]

어플리케이션 소스 :
구글맵은 인터넷을 통해 실시간으로 지도 데이터를 받게 되는데, 이를 위해 메니페스트 파일에 인터넷 사용 권한 (android.permission.INTERNET)을 추가해주어야 합니다. 이를 추가하지 않으면 지도 데이터를 받아올 수 없으므로 지도가 제데로 표시되지 않습니다. 그리고, 나중을 위해서(?) GPS의 위치 정보를 받을 수 있는 권한인 ACCESS_FINE_LOCATION도 추가해주도록 하였습니다.

구글맵을 띄우려면 Activity가 아닌 MapActivity를 상속해야 합니다. 따라서 프로젝트를 생성한 후, 아래와 같이 액티비티의 코드를 수정합니다.

package com.androidhuman.example.HelloMaps;

import com.google.android.maps.MapActivity; // Activity가 아닌 MapActivity를 추가합니다.
import android.os.Bundle;

public class HelloMaps extends MapActivity { // MapActivity를 상속합니다.
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

@Override 
protected boolean isRouteDisplayed() { // MapActivity를 상속하면, 이 메소드를 추가해줘야 합니다.
	// TODO Auto-generated method stub
	return false;
}
}



설정이 끝났다면, 레이아웃에 MapView를 추가해주는 일이 남았는데요, 그 전에 권한 설정 및 라이브러리 사용 설정을 변경해주어야 합니다. AndroidManifest.xml 파일을 열어보도록 합시다.

이클립스에서 열어본 Androidmanifest,xml 파일



일단, 권한(Permission)설정을 추가해주도록 합시다. 아래 탭에서 Permission 탭을 클릭합니다.
인터넷 사용 권한과 위치정보를 받을 수 있는 권한을 추가해보도록 합시다.

Add.. 버튼을 눌러 다음 창을 띄웁니다. 여기서 Uses Permission을 클릭해줍니다.


OK를 클릭한 후, 아래와 같이 위치정보를 이용하는 권한을 추가해주고, 같은 방법으로 인터넷을 이용하는 권한까지 추가해주도록 합시다.





그 다음은, 구글맵을 사용하기 위해 라이브러리를 이용하도록 해주는 과정을 수행합니다. Application 탭을 클릭한 후,Application Nodes의 Add.. 버튼을 누른 후, Uses Library를 선택합니다.



OK를 누른 후, 아래와 같이 사용할 라이브러리를 선택해줍니다.



다 추가하였다면, main.xml을 다음과 같이 수정합니다.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<com.google.android.maps.MapView
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
        android:clickable="true"
	android:apiKey="자신의 API KEY" />
</LinearLayout>



위의 코드에서, apiKey (API Key)가 가장 중요합니다. apiKey에 이전 강좌 (2009/03/16 - [안드로이드/안드로이드 입문] - #06. 구글맵 API 활용하기 - (1) MD5 Fingerprint 생성, API Key 발급받기)에서 발급받았던 API Key를 입력해야만 지도가 제데로 보이게 됩니다. 잘못된 키를 입력한다면, 지도가 제데로 뜨지 않고 회색 타일(?) 만 뜨게 되니, 주의하세요!

위에 첨부한 소스 파일을 그대로 테스트해보시려는 분들은 소스 파일에 입력되으 있는 API Key를 그대로 사용하시면 지도가 제데로 뜨지 않으니 필히 자신이 발급받은 API Key로 수정한 후 사용하셔야 합니다.

API Key를 수정하였다면, MapView 속성 중 Clickable을 true로 설정하여 맵을 클릭할 수 있도록 해줍니다. 지도롤 이동하려면 지도를 클릭한 후 움직여주어야 하니, 이 옵션은 필수입니다. :)

모두 추가해주었다면, 한번 실행해 볼까요?  다음과 같이 나온다면 성공한 것입니다!



어때요? 생각보다 어렵지는 않죠? :)
다음 시간에는 지도를 확대/축소하는 것에 대해서 알아보도록 하겠습니다.
  • 이전 댓글 더보기
  • 라르크 2011.02.08 17:38

    지도를 맵뷰가 아닌 웹뷰로 띄우려고 하는데요 . 웹 페이지는 만들어놨구요. 웹페이지에 들어가면 제 위치를 중심으로 주변 맵을 띄워줍니다. 그런데 웹뷰로 링크를 걸면 에뮬레이터에서는 보여지는데 단말기에서는 안보여져요 ㅠ
    이유 아시나요?

    • Favicon of https://androidhuman.tistory.com 커니 2011.02.09 19:31 신고

      글쎄요.... 웹뷰라면,...웹페이지상에서 구글맵을 띄우도록 한것 아닌가ㅇㅛ??

      단말기 브라우저에서 자바스크립트 실행 설정이 혹시 체크되어 있지 않은 것은 아닐까요?

  • 라르크 2011.02.10 11:40

    답변감사합니다. 그런데 웹 페이지를 단말기 웹 브라우저에서 주소를 치고 들어가면 지도가 나와요. 그 주소를 웹뷰에 링크를 걸면 하얗게만 나오고 안나오구요. 커니님께서 말씀하신것처럼 단말기내에 설정이 안되어있다면 웹 브라우저에서 들어갔을때도 안나와야 되는거 아닌가요 ㅠㅠ

    • Favicon of https://androidhuman.tistory.com 커니 2011.02.10 13:31 신고

      그렇다면 혹시 웹뷰에서 javascript 옵션을 활성화해보는건 어떠려나요? 에뮬레이터와 단말기가 조금 다를 수도 있으니, WebView 설정에 javascript 옵션을 활성화해보면 되지 않을까요?

  • 라르크 2011.02.10 13:53

    mWeb.getSettings().setJavaScriptEnabled(true);
    이렇게 선언해줬는데 아닌가요?
    제가 잘 몰라서 ㅠ

  • 갑시다 2011.03.23 20:06

    안녕하세요
    정말 좋은정보 감사드립니다.
    다 잘되는데 나중에 구글맵이 아니라 검정색화면이 뜨는데 무슨 문제인지 혹시 아시나 해서 이렇게 글 남깁니다.
    답변주세요.

    • Favicon of https://androidhuman.tistory.com 커니 2011.03.25 16:46 신고

      구글맵 뷰가 포함된 레이아웃을 액티비티의 레이아웃으로 선언하셨나요? setContentView()를 사용하셨는지 확인하는 것이 좋을 것 같습니다.

  • Mr.Haam 2011.04.01 11:59

    저기 죄송하지만 구글맵 api말구 다른 맵api가 있다면 사용할 수 있는 방법도 있을까요?

  • bacteria 2011.04.09 22:57

    구글맵 연동후 일정 크기 이상 확대하면
    지도가 아니라 깨진 도트만 출력되는데 ..
    일정크기 이상 확대하려면 gps를 연동해야하는건가요?

    • Favicon of https://androidhuman.tistory.com 커니 2011.04.12 00:50 신고

      GPS와 지도가 확대되지 않는건 상관이 없습니다.
      네트워크 상태가 좋지 않거나, 로케일 설정에 따른 확대 제한 문제가 원인으로 추정됩니다.

  • 2011.07.15 11:25

    커니님 글 잘 보고있습니다 ^.^

    한가지 궁금한게 있어서요..

    한 액티비티에서 위에는 동영상 아래에는 맵을띄우고 싶은데요,

    혹시 MapActivity를 상속받지 않고 가능한 방법이 있을까요??

    • Favicon of https://androidhuman.tistory.com 커니 2011.07.15 19:39 신고

      MapView를 사용하려면 항상 MapActivity를 사용해야 합니다. :) 이를 사용하지 않는 방법은 없습니다.

      MapActivity를 상속하더라도 동영상을 띄우는 것은 전혀 지장이 없으니 그냥 레이아웃에 영상 표시 영역 설정하시고 영상 표시하면 될듯 합니다.

  • 2011.07.18 14:39

    답변 감사드립니다 ^^

  • 1111 2011.07.27 18:28

    빌드 타켓을 android2-2로 설정하고 외부라이브러리를 통해 구글 맵을 가져와서 실행하면 sorry가 뜨던데 꼭 빌드타켓을 google APIs로 설정해야만 맵을 띄울 수 있는 건가요?

  • 공부하는학생 2011.08.31 13:37

    에러도 안뜨고 잘되는데 왜 지도가 안나타나고 격자무늬만 나올까요..?

    • 공부하는학생 2011.08.31 13:45

      제가 덕수궁을 경도와 위도를 설정해서 나타내는거랑
      gps켜서 하는거 두개로 했는데 gps켜서하는건 지도가 나오는데 첫번째꺼는 격자무늬만나오네요 ㅠㅠ

    • Favicon of https://androidhuman.tistory.com 커니 2011.08.31 15:30 신고

      구글맵 API Key를 발급받으셨나요? 애플리케이션 서명에 사용하는 key에 따라 API Key를 발급받아야 합니다~~

  • Favicon of https://meksj76.tistory.com 사진미소 2011.10.04 20:37 신고

    MD5 받고
    사이트에 가서 사용자 키받았습니다.
    그런데 회색 타일만 보이는 이유는 뭣때문일까요?
    커니님 올려놓은 소스에 key 만 바꿔서 넣었는데도 그렇네요...
    키값 보내드려볼까요? 답답합니다 뭐가 문제인지 ㅠ.ㅠ

  • 음음 2011.11.23 20:25

    빌드타겟을 Android 2.2로 설정하면 어떻게 맵정보를 읽어올 수 있죠??
    Google API로 하면 되는데 Android 2.2환경에 작업해보고 싶어서요..

    • Favicon of https://androidhuman.tistory.com 커니 2011.11.23 23:37 신고

      Google APIs가 별도로 존재하는 것이 아니라 안드로이드 2.2 버전의 Google Api가 들어가있는 이미지가 있는 겁니다.

  • Favicon of http://premiumarticles.info/slot-machine-strategy.html this link 2012.05.02 04:18

    예상다

  • 흐규흐규 2012.06.11 20:44

    아무리 구글키 값받고 적어도 바둑판모양만 뜨네요 ㅜㅜ

    • 어려워 2012.08.09 11:12

      에뮬로는 안떠도 기기로는 뜨더라구요. 한번 해보세요!

  • 안드로이드 정복할거야 2012.11.08 01:12

    빌트패스가아니라 빌드 타겟입니ㅏ

    프로젝트 속성 (Properties)를 선택해보면 Build Target에 Android 1.6, 2.0, 2.0.1 등등..과 Google APIs 가 있습니다.

    Google APIs에서 사용하고 싶은 SDK 버전 (API 레벨)을 선택하서서 맞는 걸로 선택해주시면 됩니다.

    제가 궁금한것은 프로젝트 속성을 Google APis를 빌드 타겟으로 설정안하고 안드로이드 2.3을 선택해서 그소스에 지도를 못불러오나요?

    • Favicon of https://androidhuman.tistory.com 커니 2012.11.08 20:50 신고

      빌드타겟을 구글맵으로 설정하지 않으면 컴파일조차 안될걸요?
      구글맵을 표시하는 클라스들을 참조할 수 없으니 컴파일도 불가능하죠.

  • Favicon of https://ccmpraise.tistory.com 주한길 2013.04.15 01:13 신고

    좋은글 출처를 표시하고 블로그에 담아갑니다. ^^

  • 맵문제 2013.05.07 18:14

    v2로 바뀌면서 제 구글api키 받아서 제대로 넣었는데도 위치정보는 뜨는데 맵은 회색만 뜨네요
    혹시 v2 api키 받으려고 패키지명까지 입력할때 그 패키지명에 문제가 있어서 그러는건가요??
    예상되는 문제 있으시면 지적 좀 부탁드려요

    • Favicon of https://androidhuman.tistory.com 커니 2013.05.08 09:19 신고

      패키지명에 문제가 있다면 오타(..)말곤 없습니다.
      패키지명 외에도 각종 권한 입력할 때 오타가 자주 발생하는 편이니 (저도 한번 그런 적이 있었는데, 끝까지 뭐가 틀렸는지는 못 알아내고 그냥 처음부터 다시 해서 고친 기억이...) 해당 부분은 복사-붙여넣기 하는 식으로 다시 해보는 것을 추천드립니다.

  • 구글맵 2013.08.18 02:44

    ㅠ_ㅠ 나와있는 것 그대로 했고 에뮬로 인터넷도 되고 api key도 제대로 입력했는데 계속 회색격자무늬만 뜨는데 ㅠㅠㅠ 뭐가 문제 인걸까요?ㅠㅠ

    • Favicon of https://androidhuman.tistory.com 커니 2013.09.02 01:46 신고

      에뮬레이터에서는 정상적으로 출력되지 않을 수도 있습니다.
      실제 기기로 한번 테스트해보세요~

  • 질문용! 2013.09.01 16:26

    이것 대체 몇버전이나요? 아무리 가상머신으로 돌려도 지도는 안보이네요 가상머신 몇정도 돌려야지 이 파일의 맵이 정상적으로 볼수가 있나요? api 제걸로 했는대도 그냥 오목판빠게 안보이네요

    • Favicon of https://androidhuman.tistory.com 커니 2013.09.02 01:45 신고

      가상머신과는 상관없고, API Key혹은 MD5 Hash 입력 과정에서 실수가 있지 않을까 생각됩니다. 저도 그부분에서 실수를 많이 했거든요..

  • 질문입니당 2014.12.06 00:07

    안녕하세요! 올려주신 정보로 필요한 어플을 잘 만들었습니다.!

    그런데 이제 apk파일로 변환을 하려고 추출을 하였는데요. 구글맵이 안뜹니다ㅠㅠ
    무슨 구글키같은게 잘못된 걸까요?

    답변좀 꼭 부탁드릴게요ㅠ.ㅜ