카카오맵 API에서는 길찾기 기능을 사용하려면 카카오맵 앱을 켜고 해당 위치로 길찾기 기능을 검색하도록 구현해야한다.
private fun howTogoSpot(poiItem: MapPOIItem){
try {
val nowLocation = goToNowLocation(false)
if (nowLocation?.mapPointGeoCoord?.latitude.toString().isBlank() || nowLocation?.mapPointGeoCoord?.longitude.toString().isBlank()){
return
}
val url : String ="kakaomap://route?sp=${nowLocation?.mapPointGeoCoord?.latitude},${nowLocation?.mapPointGeoCoord?.longitude}&ep=${poiItem.mapPoint.mapPointGeoCoord.latitude},${poiItem.mapPoint.mapPointGeoCoord.longitude}&by=PUBLICTRANSIT"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
intent.addCategory(Intent.CATEGORY_BROWSABLE)
startActivity(intent)
}catch (e : ActivityNotFoundException){ // 카카오맵이 설치되어있지 않은경우 설치유도
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("market://details?id=net.daum.android.map")
)
)
}
}
private fun goToNowLocation(goLocation : Boolean) : MapPoint?
{
// goLocation 파라미터가 false면 단순히 현재 위치만 MapPoint로 반환해주고 True면 현재위치로 지도를 이동시켜준다.
val permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
if(permissionCheck == PackageManager.PERMISSION_GRANTED) {
val lm: LocationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
try {
val userNowLocation: Location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)!!
val uLatitude = userNowLocation.latitude
val uLongitude = userNowLocation.longitude
val uNowPosition = MapPoint.mapPointWithGeoCoord(uLatitude, uLongitude)
if (goLocation) {
binding.mapView.setMapCenterPoint(uNowPosition, true)
}
return uNowPosition
}catch(e: NullPointerException){
Log.e("LOCATION_ERROR", e.toString())
ActivityCompat.finishAffinity(this)
// val intent = Intent(this, MainActivity::class.java)
// startActivity(intent)
System.exit(0)
}
}else{
Toast.makeText(this, "위치 권한이 없습니다.", Toast.LENGTH_SHORT).show()
ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, PERMISSIONS_REQUEST_CODE)
}
return null
}
아래 코드는 list에 값이 안들어가서 카카오맵이 설치되어도 무조건 플레이스토어로 간다.. 그래서 위 코드를 사용했다.
더보기
val url : String ="kakaomap://route?sp=37.537229,127.005515&ep=37.4979502,127.0276368&by=FOOT"
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
intent.addCategory(Intent.CATEGORY_BROWSABLE)
val list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
//카카오맵 어플리케이션이 사용자 핸드폰에 깔려있으면 바로 앱으로 연동
//그렇지 않다면 다운로드 페이지로 연결
if (list.isEmpty()){
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=net.daum.android.map")))
}else{
startActivity(intent)
}
공식문서를 참고하면 더 좋을듯하다.
https://apis.map.kakao.com/android/guide/#urlscheme_route
'프로그래밍 > Android' 카테고리의 다른 글
[Android] 특정 이벤트 발생시 행동(브로드캐스트) (0) | 2022.10.11 |
---|---|
[Android] URL을 이용해 이미지 띄우기 (0) | 2022.10.07 |
[Android] 커스텀 리스너(프래그먼트에서 액티비티로 데이터 전달) (0) | 2022.09.27 |
[Android] TextView안의 텍스트가 길 경우 흐르도록 표시 (0) | 2022.09.26 |
[Android] 카카오맵 API 현재위치 추적 (1) | 2022.09.26 |
댓글