Kakao Map API를 이용하려면 먼저 Kakao Map SDK를 다운로드 받고, Kakao Platform에 애플리케이션을 등록하고 App Key를 받아야합니다. 우선 아래의 두 사이트를 켜주세요.
apis.map.kakao.com/android/guide/
Kakao Map SDK 다운로드
SDK를 다운로드 받은 후 압축을 해제한 후 내부 파일을 아래와 같이 붙여넣기 해주면 됩니다.
App key 발급받기
애플리케이션을 추가하고 플랫폼 등록을 클릭한 후 Android 플랫폼을 등록합니다.
Android 플랫폼 등록을 할때 키 해시가 필요합니다.
키 해시를 얻기 위해서 아래의 코드를 프로젝트에 작성한 후 앱을 실행하여 Log에 출력되는 KeyHash를 입력해주고 등록하면 App Key를 발급받을 수 있습니다.
fun getHashkey() {
var packageInfo : PackageInfo? = null
try {
packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES)
}catch (e: Exception){
e.printStackTrace()
}
if(packageInfo != null){
val signature = packageInfo.signingInfo.apkContentsSigners
for (signature in signature){
val md : MessageDigest
md = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
val key = String(Base64.encode(md.digest(), 0))
Log.d(Constants.TAG, "key Hash : $key")
}
}
}
프로젝트 내부에서 설정을 해야합니다.
AndroidManifest.xml에 아래와 같이 추가해주어야 합니다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<application
...
android:usesCleartextTraffic="true"> //http 허용
<activity android:name="com.example.xxxx" />
<activity android:name="com.example.xxxx">
<intent-filter>
...
</intent-filter>
</activity>
<meta-data android:name="com.kakao.sdk.AppKey" android:value="네이티브 앱 키"/>
</application>
마지막으로 build.gradle(Module)에 다운로드 받았던 SDK 라이브러리를 추가해주면 map api를 사용할 수 있습니다.
implementation files('libs/libDaumMapAndroid.jar')
이제 설정은 마무리 했으니 MapView를 띄우기 위한 작업을 하겠습니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
val mapView = MapView(requireActivity())
// 맵 포인트 설정
val msrstnPoint = MapPoint.mapPointWithGeoCoord(it.dmX, it.dmY)
// 중심점 변경
mapView.setMapCenterPoint(msrstnPoint, true)
// 줌 레벨 변경
mapView.setZoomLevel(3, true)
// 줌 인
mapView.zoomIn(true)
// 줌 아웃
mapView.zoomOut(true)
// 설정값을 mapView에 추가
binding.arplltnMapView.addView(mapView)
val marker = MapPOIItem()
// ?
marker.tag = 0
// 마커 생성 위치
marker.setMapPoint(msrstnPoint)
// 기본으로 제공하는 마커
marker.markerType = MapPOIItem.MarkerType.BluePin
// 마커를 클릭했을때, 마커 메시지
marker.itemName = "관측 측정소"
// 마커를 클릭했을때, 기본으로 제공하는 마커
marker.selectedMarkerType = MapPOIItem.MarkerType.RedPin
// mapView에 마커 추가
mapView.addPOIItem(marker)
위처럼 layout을 작성하고, kt 파일에서 프로그래밍방식으로 MapView를 원하는대로 설정하여 사용할 수 있습니다.
오류 해결
다양한 오류가 있는데, AndroidManifest.xml을 제가 작성해놓은 것에 맞게 작성하면 큰 문제없이 실행되지만,
MapView를 선언하게 될때 import net.daum.mf.map.api.MapView로 선언해야 합니다. 아니면 오류가 발생합니다.
'Android' 카테고리의 다른 글
AndroidProgramming - Listener 등록 (Kotlin) (0) | 2021.04.08 |
---|---|
FCM (Firebase Cloud Messaging) (0) | 2021.04.03 |
Extension functions(확장 함수) (0) | 2021.03.28 |
StateBar (상태바) : 색상 변경 (0) | 2021.03.28 |
Retrofit2, OkHttp를 함께 사용하는 이유와 예제 (0) | 2021.03.21 |