구글맵을 이용해서 간단한 네비게이션 예제를 구현해 보겠습니다. 사용자의 처음 위치에 랜드마크와 제목을 표시합니다. 동일한 위치에 사람 모양의 아이콘을 표시하고 사용자가 이동하면 아이콘도 실시간으로 이동하는 기능을 구현해 보겠습니다. 소스 프로젝트는 새로 만들 필요없이 이전에 만들었던 GoogleMap 예제를 재활용하면 됩니다.
1) GoogleMap 소스 프로젝트의 /res/layout/activity_main.xml 파일을 열고 소스코드를 추가합니다.
구글맵을 이용해서 전자지도를 구현하는 방법을 알아보겠습니다. 2013년부터 구글맵 v1의 서비스는 종료되고 Google Maps Android API v2로 변경되었습니다. 이 과정에서 많은 부분이 변경되었습니다. 유명한 오픈소스 3D 그래픽 엔진인 OpenGL 이 사용되었고 안드로이드 3.0 부터 등장한 Fragment 라는 클래스를 지도 컨트롤로 사용합니다. 사용방법은 간편해 졌습니다. 그러다 보니 환경설정하는 방법도 많이 바뀌었고 복잡해 졌습니다. 최대한 쉽게 설명드릴 테니 잘 따라와주기 바랍니다.
(1) 구글 API 키 구하기
구글맵을 사용하기 위해서는 구글 API 키를 발급해야 하는데 이때 SHA1 지문과 프로젝트 패키지명이 필요합니다. 구글맵 v1 에서는 MD5 지문을 사용하였으나 v2 부터는 보안성이 더 높은 SHA1 지문을 사용하도록 변경되었으니 유의하기 바랍니다.
1) SHA1 지문은 이클립스의 Preferences 에서 확인할 수 있습니다. 메인메뉴 [Window > Preferences] 를 선택하고 팝업창이 나타나면 왼쪽 트리목록에서 [Android > Build] 를 선택합니다. 오른쪽에 SHA1 fingerprint 에 SHA1 지문이 표시됩니다.
[ Tip! ]
이클립스 버전에 따라서 SHA1 지문이 지원되지 않을 수도 있습니다. 그런 경우에는 아래 과정을 수행하면 됩니다.
(1) 도스 커맨스 실행
(2) debug.keystore 파일이 있는 경로로 이동. (윈도우7 기준으로 C:/User/<사용자계정>/.android/)
(3) 아래 명령어를 입력하고 Enter 키.
keytool -list -keystore debug.keystore
JDK 7 부터는 아래와 같이 –v 옵션을 끝에 추가해주어야 함.
keytool -list -keystore debug.keystore -v
(4) ‘keystore 암호를 입력하십시오:’ 라는 문구가 나타나면 android 라고 입력. 암호는 보이지 않음.
(5) 결과가 나오면 SHA1 지문을 확인합니다.
2) 본인의 구글 계정의 환경설정에서 구글맵을 사용할 수 있도록 설정을 변경해야 합니다. 웹브라우저에서 아래 주소로 이동합니다. 로그오프 상태라면 로그인 합니다.
http://code.google.com/apis/console
왼쪽 메뉴에서 APIs & auth 를 선택합니다.(계정 설정에 따라서 Service 를 선택해야 하는 경우도 있음) 오른쪽에 사용 가능한 구글 API 목록이 나타납니다. 그 중에서 Google Maps Android API v2 를 찾으면 됩니다. 기본 설정은 OFF 입니다. 이것을 ON 으로 변경합니다.
3) 왼쪽 메뉴에서 [APIs & auth > Registered apps] 를 선택하고 오른쪽 화면에서 REGISTER APP 버튼을 누릅니다.(계정 설정에 따라서 API Access 를 선택해야 하는 경우도 있음)
프로젝트 이름과 패키지명, 그리고 SHA1 지문을 입력해야 합니다. 구글 API v2 부터는 소스 프로젝트가 생성될 때 마다 API 키를 새로 생성해야 합니다. Name 항목에 GoogleMap 이라고 입력합니다.
Platform 항목에서 [Android > Accessing APIs directly from Android] 를 각각 선택합니다.
Package name 항목에는 com.example.googlemap 이라고 입력합니다.
SHA1 fingerprint 항목에는 SHA1 지문을 입력합니다. 그런 다음 아래쪽에 Register 버튼을 누릅니다.
화면이 바뀌면 Android Key 를 눌러서 내용을 확인합니다. API Key 를 복사해 둡니다. 이제 구글 API 키를 획득했습니다.
(2) 소스 프로젝트 생성
지도 예제를 만들어 보겠습니다. 구글 API 키를 생성할 때와 동일하게 프로젝트 이름과 패키지명을 입력해야 합니다.
1) 새로운 소스 프로젝트를 생성하고 Application Name 항목에 GoogleMap 라고 지정합니다. 그리고 Package Name 에는 com.example.googlemap 이라고 입력합니다. 그 외에는 먼저번 시간에 했던 것과 동일합니다.
2) /res/layout/activity_main.xml 파일을 열고 아래와 같이 fragment 위젯을 추가합니다.
3) /res/layout/activity_main.xml 파일을 열고 메인 액티비티의 기초 클래스를 Activity 에서 FragmentActivity 로 변경합니다.
public class MainActivity extends FragmentActivity {
[ Tip! ]
레이아웃 파일에서 Android.name 속성에 지정한 maps.SupportMapFragment 는 4.0 이하 단말을 지원할 때 사용합니다. 4.0 이상 단말만 지원할 경우에는 maps.MapFragment 를 사용하면 됩니다. 레이아웃 파일에서 maps.MapFragment 를 사용했다면 액티비티 기초 클래스를 Activity 로 지정하고, 레이아웃 파일에서 maps.SupportMapFragment 를 사용했다면 액티비티 기초 클래스를 FragmentActivity 로 지정해야 합니다.
(3) 퍼미션 설정
구글맵을 사용하려면 OpenGL 을 비롯해서 네트워크, GPS 센서 등 여러가지 퍼미션이 필요합니다.
1) OpenGL 버전을 지정하겠습니다. AndroidManifest.xml 파일을 열고 아래쪽 탭버튼 중에서 Manifest 를 선택합니다. 그런 다음 Manifest Extras 그룹에서 Add 버튼을 누르고 팝업창이 나타나면 목록에서 Uses Feature 를 선택하고 OK 버튼을 누릅니다.
Gl es version 항목에 0x00020000 를 입력하고, 그 아래 Required 항목에는 true 를 입력합니다.
2) 구글 API 키를 입력하겠습니다. 아래쪽 탭버튼 중에서 Application 을 선택하고, Application Nodes 그룹에서 Add 버튼을 누릅니다. 팝업창이 나타나면 목록에서 Meta Data 를 선택하고 OK 버튼을 누릅니다.
Attributes for Meta Data 그룹에서 Name 항목에 com.google.android.maps.v2.API_KEY 를 입력하고, Value 항목에 구글 API 키를 입력합니다.
3) 퍼미션을 지정하겠습니다. 아래쪽 탭버튼 중에서 Permissions 를 선택하고 Add 버튼을 누릅니다. 팝업창 목록 중에서 Uses Permission 을 선택하고 OK 버튼을 누릅니다.
오른쪽 Name 항목에서 android.permission.INTERNET 을 선택합니다.
동일한 과정을 반복해서 다음 퍼미션들을 추가합니다. 마지막 퍼미션은 직접 타이핑으로 입력해야 합니다.
4) 지도 퍼미션을 추가하겠습니다. Add 버튼을 누르고 팝업창에서 Permission 을 선택한 다음 OK 버튼을 누릅니다. 오른쪽 Name 항목에 <패키지명>.permission.MAPS_RECEIVE 라고 입력합니다. 예를 들어 본 예제의 경우는 com.example.googlemap.permission.MAPS_RECEIVE 라고 입력하면 됩니다.
그런 다음 Protection level 항목에 signature 를 선택합니다.
(4) Google Play services 라이브러리 추가
구글맵을 사용하기 위해서는 구글 플레이 서비스 라이브러리가 필요합니다. 라이브러리가 포함된 프로젝트를 이클립스에 import 하고, 새로 생성한 소스 프로젝트에서 라이브러리 파일을 불러와서 사용하면 됩니다.
1) 이클립스 메인메뉴에서 [File > Import] 를 선택하고, 팝업창이 나타나면 [Android > Existing Android Code Into Workspace] 를 선택하고 Next 버튼을 누릅니다.
Browse 버튼을 누르고 팝업창이 나타나면 폴더 트리목록에서 [(안드로이드 SDK 폴더) > sdk > extras > google > google_play_services(또는 google_play_services_froyo) > libproject > google-play-services_lib] 폴더를 선택하고 ‘확인’ 버튼을 누릅니다.
Project to Import 에 새로운 항목이 추가됩니다. Copy projects into workspace 에 체크하고 Finish 버튼을 누릅니다.
Package Explorer 에 google-play-services_lib 라는 새로운 프로젝트가 추가되었습니다.
2) 구글 플레이 서비스 라이브러리를 지도 예제에 추가해 봅시다. Package Explorer 에서 GoopleMap 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 단축메뉴에서 Properties 를 선택합니다.
팝업창이 나타나면 왼쪽 메뉴에서 Android 를 선택하고 오른쪽 화면 Library 그룹에서 Add 버튼을 누릅니다. 그런 다음팝업창에서 google-play-services_lib 를 선택하고 OK 버튼을 누릅니다.
Library 목록에 google-play-services_lib 가 추가되었습니다. Apply 버튼을 누른 다음 OK 버튼을 눌러서 팝업창을 닫습니다.
소스 프로젝트의 Android Private Libraries 폴더에 google-play-services.jar 파일이 추가되었습니다.
3) 에뮬레이터에서는 구글맵 v2 가 지원되지 않습니다. 타겟에서 결과를 확인해 봅시다. 별도의 소스코드를 입력하지 않아도 지도가 화면에 표시됩니다. 손가락으로 터치 드래그하면 지도가 이동하고, 멀티터치로 확대/축소도 가능합니다.
Android App | [안드로이드앱 강의] 4-1.하드웨어 - 나.GPS 로 구하는 위치좌표
지도 앱 또는 네비게이션 앱을 구현하려면 위치좌표를 알아야 합니다. 페이스북, 트위터 같은SNS 와 주변 정보 제공 앱 같은 위치기반 서비스도 위치좌표는 필수 사항입니다. 사용자의 위치좌표는 LocationManager 클래스를 사용해서 구할 수 있으며 위치정보를 제공하는 Provider 는 GPS 센서, 기지국, Wifi 중에서 선택할 수 있습니다. 자세한 사용방법은 예제를 통해서 알아보겠습니다.
(1) GPS 센서로 위치좌표 구하기
1) 새로운 소스 프로젝트를 생성하고 이름을 GpsLocation 이라고 지정합니다. 소스 프로젝트를 생성하는 방법은 먼저번 시간에 했던 것과 동일합니다.
2) /res/layout/activity_main.xml 파일을 열고 아래와 같이 4개 TextView 위젯을 추가합니다. 1번째 TextView 에는 현재 상태를 표시하고, 2번째에는 Latitude(Latitude), 3번째에는 Longitude(경도), 4번째에는 Altitude(고도) 좌표를 표시하겠습니다.