본문 바로가기
Programing/android

[android studio] google maps API 사용방법 정리

by TEXTBOX 2021. 11. 5.
728x90

구글 맵 연동을 한번 해보자.
우선 맵 api를 가져올 android studio 프로젝트가 없다면 미리 생성을 해두자.

1. https://console.cloud.google.com/apis/dashboard 주소로 들어가,
새 프로젝트를 생성하고 API 및 서비스 항목에서 API 및 서비스 사용 설정을 클릭을 한다.
리스트 중 [Maps SDK for Android] 항목을 클릭하여 [사용] 버튼을 클릭하여 API를 활성화 한다.

2. API 및 서비스에서 [사용자 인증 정보]에 들어가 [+ 사용자 인증 정보 만들기]를 클릭하면
몇개의 메뉴가 나타난다.
API 키를 클릭하면 아래와 같이 API 키가 생성된다.

하단에 있는 [키 제한]을 클릭한다.
앞에서 생성된 키의 제한 이름 등 변경가능하다.

애플리케이션 제한사항에 있는 [Android 앱]을 클릭하고 클릭 후 나타나는 [Android 앱의 사용량 제한]목록에
앱의 패키지 명과 SHA-1 서명 인증서 디지털 지문을 입력하여야 한다.

앱의 패키지명은 현재 적용시킬 앱의 package name을 넣으면 될 것이고, 

"C:\Program Files\Android\Android Studio\jre\bin\keytool" -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

SHA-1 서명 인증서 디지털 지문은 cmd 창을 열어 위 명령어를 넣게되면 아래와 같이 SHA-1 코드가 나타난다.

SHA1 : 이후 코드값을 복사하여 넣어주고 완료를 클릭한다.

API 제한사항에서 [키 제한]을 클릭하고 dropdown메뉴에서 [Maps SDK for Android]를 선택한 후 저장해 준다.

 

3. 생성된 API Key를 복사하여 Andorid Studio로 돌아와 [AndroidManifest.xml]파일의 <application>태그 밑에
아래와 같이 추가해 준다. 

<application
        android:...
        android:...        >
	<meta-data android:name="com.google.android.geo.API_KEY"
            android:value="발급받은 API Key" />
     ....
     ....
     ....
</application>

 

4. build.gradle에 들어가 dependencies 안에 아래에 있는 라이브러리를 추가해 줍니다.

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

 

5. 맵을 추가할 화면에 fragment 를 넣어준다.

<layout .... >
	<...>
	<...>
	<fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment" />
	<....>
</layout>

 

6. java 코드로 지도에 표시할 부분(Maker)을 설정하고, 지도를 실행해준다.

//implements OnMapReadyCallback 를 추가
public class Frag_Map extends Fragment implements OnMapReadyCallback {

    GoogleMap gMap;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        ViewGroup rootview = (ViewGroup) inflater.inflate(R.layout.fragment_test, container, false);

		//activity일 경우 getChildFragmentManager대신 getSupportFragmentManager를 사용
        SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        return rootview;
    }

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

        String str_loc_Nm = "장소명";
        double dbl_Lat = (지도상 위도값);
        double dbl_Lon = (지도상 경도값);
        String str_loc_DescNm = "장소설명";

        LatLng Location = new LatLng(dbl_Lat, dbl_Lon);

        //지도에 표시할 Maker 만들기
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(Location);
        markerOptions.title(str_loc_Nm);
        markerOptions.snippet(str_loc_DescNm);
        gMap.addMarker(markerOptions);

        //지도를 해당 위치로 이동, 줌 배수 설정
        gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(Location, 10));
        
    }
}

 

앱으로 실행하여 확인 결과 원하는 결과를 얻을 수 있었다.

728x90

댓글