반응형
카카오 Map API 를 사용하기 위해선 당연히 카카오 개발자 홈페이지에서 앱 등록이 필요합니다.
밑의 사이트 가이드를 보고 따라해주세요.
https://apis.map.kakao.com/android/guide/#step1
개발자 등록 하는 법 !
1. 카카오 개발자 사이트에 들어가서 상단의 내 어플리케이션 클릭!
2. 로그인 후 어플리케이션 추가.
해쉬키 구하는 법! (로그를 사용해서 알 수 있습니다.)
private fun getHashKey() {
var packageInfo: PackageInfo? = null
try {
packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
if (packageInfo == null) Log.e("KeyHash", "KeyHash:null")
for (signature in packageInfo!!.signatures) {
try {
val md: MessageDigest = MessageDigest.getInstance("SHA")
md.update(signature.toByteArray())
Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT))
} catch (e: NoSuchAlgorithmException) {
Log.e("KeyHash", "Unable to get MessageDigest. signature=$signature", e)
}
}
}
카카오 가이드 문서에 자세히 나와있으니 보고 따라하시면 됩니다!
manifest 퍼미션 추가
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
layout
<?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">
<net.daum.mf.map.api.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivty
주의할점 MapView를 Import할 때 두가지가 나오는데 'net.daum.mf.map.api.MapView'를 import해줘야합니다.
private lateinit var binding: ActivityMainBinding
private val ACCESS_FINE_LOCATION = 1000
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
if (checkLocationService()) {
permissionCheck()
} else {
Toast.makeText(this, "GPS를 켜주세요", Toast.LENGTH_SHORT).show()
}
mapView = binding.mapView // 카카오 지도 뷰
}
private fun permissionCheck() {
val preference = getPreferences(MODE_PRIVATE)
val isFirstCheck = preference.getBoolean("isFirstPermissionCheck", true)
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// 권한이 없는 상태
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION)) {
// 권한 거절
val builder = AlertDialog.Builder(this)
builder.setMessage("현재 위치를 확인하시려면 위치 권한을 허용해주세요.")
builder.setPositiveButton("확인") { dialog, which ->
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), ACCESS_FINE_LOCATION)
}
builder.setNegativeButton("취소") { dialog, which ->
}
builder.show()
} else {
if (isFirstCheck) {
// 최초 권한 요청
preference.edit().putBoolean("isFirstPermissionCheck", false).apply()
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), ACCESS_FINE_LOCATION)
} else {
val builder = AlertDialog.Builder(this)
builder.setMessage("현재 위치를 확인하시려면 설정에서 위치 권한을 허용해주세요.")
builder.setPositiveButton("설정으로 이동") { dialog, which ->
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.parse("package:$packageName"))
startActivity(intent)
}
builder.setNegativeButton("취소") { dialog, which ->
}
builder.show()
}
}
} else {
}
}
// 권한 요청
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == ACCESS_FINE_LOCATION) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "위치 권한이 승인되었습니다", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "위치 권한이 거절되었습니다", Toast.LENGTH_SHORT).show()
}
}
}
// GPS가 켜져있는지 확인
private fun checkLocationService(): Boolean {
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
}
}
다 따라하고 난 다음에 어플리케이션을 켰을 때 나온다면 성공입니다!
만약 화면에 지도가 나오지 않는다면 !
manifest에 android:usesCleartextTraffic="true" 추가해주세요
<application
android:usesCleartextTraffic="true"
/>
반응형
'안드로이드' 카테고리의 다른 글
[Android] 카카오맵 Api 장소 검색하기 (Retrofit) (0) | 2022.03.03 |
---|---|
[Android] 카카오 맵 API 현재위치에 마커찍기 (0) | 2022.03.03 |
[Android / Kotlin] 네이버 Map API 간단히 사용하기 (0) | 2022.02.28 |
android studio 원격 연결 ,디버깅 (feat .adb ) (0) | 2022.02.28 |
안드로이드 스튜디오 인터넷 연결 모니터하는 법. (0) | 2022.02.23 |