자바 안드로이드 앱개발 강좌, 구글 지도 앱 만들기

안드로이드 앱 개발은 오늘날 가장 인기 있는 모바일 개발 분야 중 하나입니다. 다양한 라이브러리와 프레임워크를 통해 개발자들은 훌륭한 사용자 경험을 제공하는 앱을 만들 수 있습니다. 이번 강좌에서는 자바를 사용하여 구글 지도를 활용한 안드로이드 앱을 만드는 방법에 대해 설명하겠습니다. 본 강좌는 다음과 같은 단계로 진행됩니다:

  • 1. 프로젝트 설정
  • 2. 구글 지도 API 설정
  • 3. 지도를 앱에 표시하기
  • 4. 마커 추가 및 사용자 위치 표시
  • 5. 지도 스타일 및 기능 추가

1. 프로젝트 설정

먼저, 안드로이드 스튜디오를 열고 새로운 프로젝트를 생성합니다. 다음과 같은 설정을 따라 프로젝트를 설정합니다:

  • 이름: GoogleMapsApp
  • 패키지 이름: com.example.googlemapsapp
  • 언어: Java
  • 최소 API 레벨: API 21: Android 5.0 (Lollipop)

프로젝트가 생성되면, app/build.gradle 파일에 구글 지도 라이브러리를 추가해야 합니다. 이를 위해 다음 코드를 dependencies 섹션에 추가합니다:

implementation 'com.google.android.gms:play-services-maps:18.0.2'

이제 Gradle 파일을 Sync하여 종속성을 업데이트합니다.

2. 구글 지도 API 설정

구글 지도를 사용하기 위해서는 구글 클라우드 플랫폼에서 API 키를 발급받아야 합니다. 다음 단계를 따라 구글 지도 API 키를 생성합니다:

  1. 구글 클라우드 플랫폼에 로그인하여 새 프로젝트를 생성합니다.
  2. 대시보드에서 ‘API 및 서비스’ -> ‘라이브러리’로 이동합니다.
  3. ‘Google Maps Android API’를 검색하고 활성화합니다.
  4. ‘API 및 서비스’ -> ‘사용자인증 정보’에서 ‘사용자인증 정보 만들기’ 버튼을 클릭합니다.
  5. API 키를 선택하고 생성하여 발급받은 키를 복사합니다.

발급받은 API 키는 AndroidManifest.xml 파일 내에 추가해야 합니다:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.googlemapsapp">

    <application>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="YOUR_API_KEY"/>
        ...
    </application>

</manifest>

이제 구글 지도 API를 사용할 준비가 완료되었습니다.

3. 지도를 앱에 표시하기

구글 지도를 앱에 표시하기 위해 지도 프래그먼트를 레이아웃에 추가해야 합니다. res/layout/activity_main.xml 파일을 열고 다음 코드를 추가합니다:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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"/>

</RelativeLayout>

다음으로, MainActivity.java 파일에서 지도를 초기화하고 표시하는 코드를 추가하겠습니다:


import androidx.fragment.app.FragmentActivity;
import android.os.Bundle;
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.56, 126.97);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(seoul));
    }
}

위의 코드에서, 지도가 준비되면 서울의 위치로 카메라를 이동하도록 설정했습니다.

4. 마커 추가 및 사용자 위치 표시

이제 사용자가 정의한 위치에 마커를 추가해 보겠습니다. onMapReady 메서드에 다음 코드를 추가하여 마커를 배치합니다:


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // 지도의 중심 위치 설정
        LatLng seoul = new LatLng(37.56, 126.97);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(seoul));

        // 마커 추가
        mMap.addMarker(new MarkerOptions().position(seoul).title("Marker in Seoul"));

        // 사용자 위치 표시 허용
        mMap.setMyLocationEnabled(true);
    }

위의 코드는 서울 위치에 마커를 추가하고 사용자의 현재 위치를 표시하는 기능을 활성화합니다.

5. 지도 스타일 및 기능 추가

마지막으로, 구글 지도에 스타일을 추가하고 몇 가지 기능을 확장해 보겠습니다. 예를 들어, 사용자 위치가 변경될 때 마커를 업데이트하도록 하겠습니다:


import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;

public class MainActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;
    private FusedLocationProviderClient fusedLocationClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        LatLng seoul = new LatLng(37.56, 126.97);
        mMap.moveCamera(CameraUpdateFactory.newLatLng(seoul));
        mMap.addMarker(new MarkerOptions().position(seoul).title("Marker in Seoul"));
        mMap.setMyLocationEnabled(true);
        
        // 사용자 위치 업데이트 설정
        startLocationUpdates();
    }

    private void startLocationUpdates() {
        LocationRequest locationRequest = LocationRequest.create();
        locationRequest.setInterval(10000);
        locationRequest.setFastestInterval(5000);
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

        LocationCallback locationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                if (locationResult == null) {
                    return;
                }
                for (Location location : locationResult.getLocations()) {
                    // 사용자 위치 업데이트
                    LatLng userLocation = new LatLng(location.getLatitude(), location.getLongitude());
                    mMap.addMarker(new MarkerOptions().position(userLocation).title("You are here"));
                    mMap.moveCamera(CameraUpdateFactory.newLatLng(userLocation));
                }
            }
        };
        
        fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null);
    }
}

위의 코드는 사용자의 위치가 변경될 때마다 마커를 업데이트하여 지도 위에 사용자 위치를 반영합니다.

결론

이제 기본적인 구글 지도 앱을 만들기 위한 모든 단계를 완료했습니다. 이 앱은 비즈니스나 개인 프로젝트등 다양한 용도로 확장할 수 있습니다. 필요한 추가 기능, 예를 들어 다양한 마커 스타일, 경로 표시, 또는 여러 위치 검색 등을 쉽게 구현할 수 있습니다. 안드로이드 앱 개발에 있어 구글 지도 API는 매우 유용한 도구입니다. 더 나아가 이 API를 사용하여 사용자에게 풍부한 경험을 제공할 수 있습니다. 다음 단계로는 이 앱을 추가 기능과 스타일로 발전시키는 것입니다.

이 강좌가 여러분의 앱 개발에 재미와 도움이 되었기를 바랍니다. 이제 여러분만의 구글 지도 앱을 만들어 보세요!