안드로이드 앱 개발에서 구글 지도를 사용하는 것에 대한 이해는 많은 개발자들에게 큰 가치가 있습니다.
구글 지도 API를 활용하면 사용자가 실시간으로 지도 정보를 보고, 특정 위치를 찾고, 내비게이션 기능을 제공하는 등의
다양한 기능을 구현할 수 있습니다. 이번 글에서는 자바를 사용하여 안드로이드 앱에서 구글 지도를 구현하는 방법과
주요 기능들을 자세히 설명하고 몇 가지 예제 코드를 제공하겠습니다.
1. 구글 지도 API란?
구글 지도 API는 구글에서 제공하는 지도 정보를 사용하여 웹사이트나 모바일 애플리케이션에서 지도 기능을 쉽게
구현할 수 있도록 해주는 서비스입니다. 이 API를 사용하면 사용자가 원하는 지역의 지도, 마커, 경로 등의 정보
를 제공받을 수 있습니다. 안드로이드 앱에서 구글 지도를 사용하기 위해서는 구글 맵 API를 연동해야 합니다.
2. 구글 지도 API 키 생성하기
구글 지도를 앱에서 사용하기 위해서는 API 키가 필요합니다. 다음은 API 키를 생성하는 방법입니다.
- 구글 클라우드 플랫폼에 로그인합니다. (Google Cloud Console)
- 새 프로젝트를 생성합니다.
- 대시보드에서 ‘API 및 서비스’ > ‘라이브러리’로 이동합니다.
- ‘Maps SDK for Android’를 검색하여 활성화합니다.
- ‘API 및 서비스’ > ‘사용자 인증 정보’로 이동하여 API 키를 생성합니다.
3. 안드로이드 프로젝트 설정
API 키 준비가 완료되면 안드로이드 프로젝트를 설정합니다. Android Studio를 열고 새로운 프로젝트를 생성합니다.
여기서는 ‘Empty Activity’를 선택하겠습니다.
3.1. Gradle 파일 수정
`build.gradle` 파일을 열고 다음 의존성을 추가합니다:
dependencies {
implementation 'com.google.android.gms:play-services-maps:17.0.1' // 구글 맵 의존성
}
3.2. AndroidManifest.xml 수정
`AndroidManifest.xml` 파일에서 다음과 같이 권한과 API 키를 추가합니다:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mymapapp">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
...
android:meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY"/>
</application>
</manifest>
4. 지도 화면 구현하기
이제 본격적으로 지도를 화면에 표시해보겠습니다. `activity_main.xml` 파일을 수정하여 지도 프래그먼트를 추가합니다.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
4.1. MainActivity.java 구현
지도를 제어하기 위해 `MainActivity.java` 파일을 다음과 같이 수정합니다.
package com.example.mymapapp;
import android.os.Bundle;
import androidx.fragment.app.FragmentActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// 예시 위치: 서울
LatLng seoul = new LatLng(37.5665, 126.978);
mMap.addMarker(new MarkerOptions().position(seoul).title("Marker in 서울"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(seoul));
}
}
5. 마커 추가하기
사용자가 다양한 장소를 쉽게 찾을 수 있도록 마커를 추가하는 기능을 구현합니다. 예시 코드에서 이미 한 마커를 추가했지만,
여러 개의 마커를 추가하는 방법을 보여드리겠습니다.
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// 서울 마커
LatLng seoul = new LatLng(37.5665, 126.978);
mMap.addMarker(new MarkerOptions().position(seoul).title("Marker in 서울"));
// 부산 마커
LatLng busan = new LatLng(35.1796, 129.0756);
mMap.addMarker(new MarkerOptions().position(busan).title("Marker in 부산"));
// 대구 마커
LatLng daegu = new LatLng(35.8714, 128.6014);
mMap.addMarker(new MarkerOptions().position(daegu).title("Marker in 대구"));
// 카메라 위치 변경
mMap.moveCamera(CameraUpdateFactory.newLatLng(seoul));
}
6. 위치 접근 허가 요청하기
위치 기반 서비스를 구현할 때는 사용자로부터 위치 접근 권한을 요청해야 합니다. 다음은 위치 권한을 요청하는
방법입니다.
import android.Manifest;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
// 위치 권한 요청
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
} else {
mMap.setMyLocationEnabled(true);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
}
}
}
}
7. 현재 위치 표시하기
사용자의 현재 위치를 지도에 표시하는 방법을 구현해보겠습니다. 방금 추가한 코드와 함께 .setMyLocationEnabled(true)
메서드를 통해 현재 위치를 표시할 수 있습니다. 현재 위치를 중심으로 카메라를 이동하려면 다음과 같이 수정합니다.
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// 사용자 위치 접근 허용 여부에 따라서 현재 위치 표시
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
}
// 서울 마커
LatLng seoul = new LatLng(37.5665, 126.978);
mMap.addMarker(new MarkerOptions().position(seoul).title("Marker in 서울"));
// 카메라 위치 변경
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(seoul, 10));
}
8. 경로 찾기 기능 구현하기
경로 찾기 기능은 사용자와 특정 목적지 간의 길을 찾는 데 사용됩니다. Google Directions API를 활용하여
경로를 찾을 수 있지만, 이를 위해서는 추가적인 작업이 필요합니다.
Directions API를 호출하기 위해 Axios 또는 Retrofit 같은 HTTP 클라이언트를 사용하여 요청을 보내고,
반환된 경로 데이터를 분석해 지도의 Polyline에 표시할 수 있습니다. 이 부분은 간단하게 설명하겠습니다.
// Retrofit을 이용한 Directions API 호출
public interface DirectionsService {
@GET("directions/json")
Call getDirections(@Query("origin") String origin,
@Query("destination") String destination,
@Query("key") String apiKey);
}
이 API를 통해 얻은 경로 데이터를 통해 Polyline을 지도에 추가하여 경로를 표시할 수 있습니다.
9. 결론
이 글에서는 안드로이드 앱 개발에서 구글 지도를 활용하기 위한 기본적인 설정과 기능 구현 방법을
살펴보았습니다. 구글 지도 API를 활용하면 다양한 위치 기반 서비스를 제공하는 강력한 애플리케이션을
만들 수 있습니다. 추가로 사용자 친화적인 기능을 추가하고, Directions API를 활용하여 복잡한 경로
찾기 기능을 구현해보시기를 추천합니다.
앱 개발의 길은 쉽지 않지만, 구글 지도를 통해 다채로운 사용자 경험을 제공할 수 있는 가능성은 무한합니다.
여러분의 아이디어를 이끌어내는 데 도움이 되었길 바랍니다.