Google Developers Console
사이트에 접속 후 프로젝트 생성
적당한 프로젝트 이름을 짓고 만들기
Google Maps Android API를 사용하려면 추가 설정 필요. API 및 사용 서비스 사용 설정을 클릭
검색으로 Maps SDK for Android를 찾아 선택 후 사용 클릭
왼쪽 상단 메뉴 아이콘 클릭 후 API 및 서비스 사용자 인증 정보 클릭
사용자 인증 정보 만들기를 클릭하여 API 키 클릭
생성된 Key 값 Edit API key를 클릭하거나
만들어진 API key를 클릭해 사용자 인증정보로 이동
애플리케이션 제한사항에 Android 앱 클릭, 사용량 제한 클릭 후
패키지 이름을 자신의 프로젝트 패키지로 지정
SHA-1 인증서 지문을 얻기
윈도우키 + R을 누른 후 cmd를 입력, 엔터 누르고 명령 프롬프트 창 열기
자신의 AndroidStudio 설치 경로\jre\bin\keytool 경로 값으로 아래 명령어 입력
"D:\Program Files\Android\Android Studio\jre\bin\keytool" -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
SHA-1 Key를 복사해서 넣어준다
keytool 오류: java.lang.Exception: 키 저장소 파일이 존재하지않음: C:\Users\사용자ID\.android\debug.keystore
위와 같은 오류가 나면 앱을 빌드하여 Device에 설치한 적이 없어 에러가 뜰 수 있다.
안드로이드 프로젝트를 빌드 후, 안드로이드 디바이스에 설치하면
debug.keystore 파일이 사용자 디렉토리의 하위 디렉토리인 .android 디렉토리 안에 생성된다.
다시 cmd에서 명령어를 입력하면 나올 것이다.
패키지와 SHA-1 지문을 넣고 API 제한사항에 키 제한 체크
Maps SDK for Android 선택 후 확인
Masnifest metedata 추가
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="API키" />
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.project.kovid">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Kovid"
android:usesCleartextTraffic="true"
tools:targetApi="n">
<activity
android:name="com.project.kovid.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${GoogleMapApiKey}"/>
</application>
</manifest>
API Key를 넣어준 후
Google Maps Android API를 사용하려면 Google Play services 라이브러리 패키지를 설치해줘야 한다.
안드로이드 스튜디오 메뉴에서 Tools > SDK Manager 선택
SDK Tools 탭 클릭, Google Play services 항목 체크하고 OK 클릭하여 설치 진행
모듈 app의 build.gradle
dependencies {
...
//구글맵
implementation 'com.google.android.gms:play-services-maps:18.0.2'
implementation 'com.google.android.gms:play-services-location:19.0.1'
}
사용할 Layout xml에 지도가 표시될 <com.google.android.gms.maps.MapView> 추가
<com.google.android.gms.maps.MapView
android:id="@+id/map_view"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
구현은 Fragment에서 하였다. (binding 사용)
OnMapReadyCallback implement 하고 onMapReady를 override 한다.
MapView에 MapAsync(this) 지정, onMapReady() 메소드 안 카메라 이동시키고 임시 마커 추가
class MapFragment : BaseFragment<FragmentMapBinding>(R.layout.fragment_map), OnMapReadyCallback {
private lateinit var mGoogleMap: GoogleMap
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.mapView.onCreate(savedInstanceState)
binding.mapView.getMapAsync(this)
}
//GoogleMap Setting
override fun onMapReady(googleMap: GoogleMap) {
val seoul = LatLng(37.554891, 126.970814)
mGoogleMap.mapType = GoogleMap.MAP_TYPE_NORMAL // default 노말 생략 가능
mGoogleMap = googleMap
mGoogleMap.apply {
moveCamera(CameraUpdateFactory.newLatLngZoom(seoul, 15F)) //카메라 이동
viewModel.myLocation.observe(this@MapFragment){
moveCamera(CameraUpdateFactory.newLatLngZoom(seoul, 15F)) //카메라 이동
addMarker { //사용자 현위치 마커 추가
position(currentPlace)
title("서울")
snippet("대한민국의 수도")
}
}
}
}
지도 종류 (mapType)
MAP_TYPE_NORMAL | 일반 도로 지도, 도로 등의 중요한 특징들이 표시된 지도 |
MAY_TYPE_HYBRID | 도로 지도와 위성사진 데이터가 동시 표시된 지도 |
MAY_TYPE_SATELLITE | 위성사진 데이터로 도로 및 특징이 표시된 지도 (대한민국은 위성지도 사용제한) |
MAY_TYPE_TERRAIN | 지형도 데이터로 색상, 등고선 및 원근 음영이 표시된 지도 |
임시 서울역 마크가 찍히는 것 확인
참고 시 유익한 관련 포스팅
Android Google Map에 현재 위치 표시하기( FusedLocationProviderClient 사용)
FusedLocationProviderClient를 사용하여 구글맵에 현재 위치를 표시하는 예제
https://webnautes.tistory.com/1249
FusedLocationProviderClient는 Deprecated 된 FusedLocationApi를 대체하게 되며 Google Play services 11.6.0 이상에서 사용하는 것을 권장
Android Google Map에 현재 위치 표시하기( GoogleApiClient, FusedLocationApi 사용)
GoogleApiClient와 FusedLocationApi를 사용하여 구글맵에 현재 위치를 표시하는 예제
https://webnautes.tistory.com/1011
Places API Web Service를 사용하여 Google Map에 현재 위치 주변의 음식점 표시하기
Places API Web Service를 이용하여 현재 위치 주변의 음식점 정보를 안드로이드의 구글맵에 표시하는 내용 구성
https://webnautes.tistory.com/1080
다중 마커, 클러스터
'Android > Library' 카테고리의 다른 글
GoogleMap 다중 Marker Clustering, Custom Cluster (0) | 2022.02.21 |
---|---|
GeoCoding 위도 경도 <-> 주소 변환하기 (4) | 2022.02.20 |
Epoxy, Epoxy에 Databinding 사용 (RecyclerView 쉽게 사용) (0) | 2022.02.14 |
Android Room Database / 룸 데이터 베이스 (0) | 2022.01.14 |
Navigation (네비게이션) / Jetpack (0) | 2021.08.30 |