startWithTrip 메소드가 길안내를 시작하지 않습니다

안녕하세요

질문요약 : startWIthTrip 메소드를 활용해서 경로안내가 시작되면 어떤 기능들이 동작하나요? 그리고 어떻게 동작해야하나요? 간단한 예제가 있다면 부탁드리겠습니다.

https://developers.kakaomobility.com/docs/android-ui-ref-kotlin/class-KNGuidance/
의 startWithTrip 메소드를 활용해도 경로안내를 시작하지 않습니다.
startWIthTrip 메소드를 활용해서 경로안내가 시작되면 어떤 기능들이 동작하나요?

저는 지금 TBT의 위치, 도착지와 출발지도 임의로 제가 설정했습니다. 운행시작을 하면 이와 비슷한 기능들이 다 알아서 동작될 것이라고 생각했습니다. 아래는 제가 작성한 코드입니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

fun requestRoute() {

    val x = FindLoadApplication.knsdk.sharedGpsManager()?.recentGpsData?.pos?.x ?: 0.0
    val y = FindLoadApplication.knsdk.sharedGpsManager()?.recentGpsData?.pos?.y ?: 0.0
    var currentLocWGS = KATECToWGS84(x, y)

    // 예시 목적지는 서울역
    val goalKatec = WGS84ToKATEC(126.972263, 37.556091)
    val startKatec = WGS84ToKATEC(currentLocWGS.x, currentLocWGS.y)

    // 출발지와 목적지를 설정합니다.
    val startPoi = KNPOI("현위치", startKatec.x.toInt(),startKatec.y.toInt(),"현위치")
    val goalPoi = KNPOI("목적지",goalKatec.x.toInt(),goalKatec.y.toInt(),"목적지")

    FindLoadApplication.knsdk.makeTripWithStart(
        aStart = startPoi,
        aGoal = goalPoi,
        aVias = null
    ) { aError, aTrip ->

        // 경로 요청이 성공하면 aError는 Null이 됩니다.
        if (aError == null) {
            Log.v(TAG, "경로요청 성공")
            runOnUiThread {
                val avoidOption = 0
                val routeOption = KNRoutePriority.KNRoutePriority_Recommand
                aTrip?.routeWithPriority(routeOption, avoidOption) { error, routes ->
                    // 경로 요청 실패
                    if (error != null) {
                        Log.v(TAG,"error is ${error.msg} code is ${error.code}")
                    }
                    // 경로 요청 성공
                    else {
                        Log.v(TAG,"routes is ${routes}")

                        if (routes != null) {
                            //binding.mapView.setRoutes(routes.toList())
                            
                            FindLoadApplication.knsdk.sharedGuidance()?.startWithTrip(aTrip, KNRoutePriority.KNRoutePriority_Time, KNRouteAvoidOption.KNRouteAvoidOption_RoadEvent.value)

                        }

                    }

                }
            }
        }
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

안녕하세요, 카카오모빌리티 기술 제휴 담당자입니다.

아래 두 가지 확인 부탁드립니다.

  1. makeTripWithStart 결과를 받은 이후
    KNError의 값이 나오는지 확인부탁드립니다.
    해당 값이 나오는 경우, 어떤 오류인지 확인이 가능할 것 같습니다.

  2. routeWithPriority 경로 요청 전에 설정된
    val avoidOption = 0
    val routeOption = KNRoutePriority.KNRoutePriority_Recommand

경로 요청 시에 넣은 옵션과 주행시작(startWithTrip)시의 옵션이 동일해야 합니다.

위 두 가지 확인 후 다시 한번 문의 부탁드립니다.

질문 요약 :
startWithTrip 메소드가 잘 호출됐을때 맵뷰(KNMapView) 에서는 어떤 일이 일어나나요?

답변해주셔서 감사합니다! 말씀해주신대로 코드를 수정하였습니다. 하지만 따로 달라지는 것은 없네요. startWithTrip 메소드가 공식문서에는 “경로와 경로 옵션을 설정하여 길 안내를 시작합니다.” 라고 되어있는데 메소드가 제대로 동작하게되면 구체적으로 어떤 일들이 벌어지는 것인가요?
ex) 아래와 같은 파란 실선으로 경로가 표시됨

ex) TBT(현재 사용자위치)가 설정됨

startWithTrip 메소드를 실행하게 되면
요청하였던 경로를 기준으로 주행화면이 나타나고, 주행이 시작되어야 합니다.

첨부해 주신 스크린샷으로 보았을 때는
해당 메소드만 실행 후, KNNaviView에 설정되어야 하는 Delegate등의 설정이 되어있지 않은 것으로 보입니다.

KNNaviView가 위치해있는 Activity에서 Delegate의 설정 후,
KNNaviView의 initiWithGuidance에 KNGuidance, KNTrip, 경로옵션, 회피옵션 등을 넣고 확인 부탁드립니다.
아래는 예시입니다.

fun guideStart() {
    GlobalApplication.knsdk.sharedGuidance().apply {
        //  guidance delegate 등록
        guideStateDelegate = this@NaviActivity
        locationGuideDelegate = this@NaviActivity
        routeGuideDelegate = this@NaviActivity
        safetyGuideDelegate = this@NaviActivity
        voiceGuideDelegate = this@NaviActivity
        citsGuideDelegate = this@NaviActivity

        naviView.initWithGuidance(
            this,
            trip,
            routeOption!!,
            avoidOption!!
        )
    }
}

// KNGuidance_GuideStateDelegate

// 길 안내 시작 시 호출
override fun guidanceGuideStarted(guidance: KNGuidance) {
    naviView.guidanceGuideStarted(guidance)
}

// 경로 변경 시 호출. 교통 변화 또는 경로 이탈로 인한 재탐색 및 사용자 재탐색 시 전달 
override fun guidanceCheckingRouteChange(guidance: KNGuidance) {
    naviView.guidanceCheckingRouteChange(guidance)
}

// 수신 받은 새 경로가 기존의 안내된 경로와 동일할 경우 호출
override fun guidanceRouteUnchanged(guidance: KNGuidance) {
    naviView.guidanceRouteUnchanged(guidance)
}

// 경로에 오류가 발생 시 호출
override fun guidanceRouteUnchangedWithError(guidnace: KNGuidance, error: KNError) {
    naviView.guidanceRouteUnchangedWithError(guidnace, error)
}

// 경로에서 이탈한 뒤 새로운 경로를 요청할 때 호출
override fun guidanceOutOfRoute(guidance: KNGuidance) {
    naviView.guidanceOutOfRoute(guidance)
}

// 수신 받은 새 경로가 기존의 안내된 경로와 다를 경우 호출. 여러 개의 경로가 있을 경우 첫 번째 경로를 주행 경로로 사용하고 나머지는 대안 경로로 설정됨
override fun guidanceRouteChanged(aGuidance: KNGuidance, aFromRoute: KNRoute, aFromLocation: KNLocation, aToRoute: KNRoute, aToLocation: KNLocation, aChangeReason: KNGuideRouteChangeReason) {
    naviView.guidanceRouteChanged(guidance)
}

// 길 안내 종료 시 호출
override fun guidanceGuideEnded(guidance: KNGuidance) {
    naviView.guidanceGuideEnded(guidance)
}

// 주행 중 기타 요인들로 인해 경로가 변경되었을 때 호출
override fun guidanceDidUpdateRoutes(guidance: KNGuidance, routes: List<KNRoute>, multiRouteInfo: KNMultiRouteInfo?) {
    naviView.guidanceDidUpdateRoutes(guidance, routes, multiRouteInfo)
}

override fun guidanceDidUpdateIndoorRoute(aGuidance: KNGuidance, aRoute: KNRoute?) {
    naviView.guidanceDidUpdateIndoorRoute(aGuidance, aRoute)
}


// KNGuidance_LocationGuideDelegate

// 위치 정보가 변경될 경우 호출. `locationGuide`의 항목이 1개 이상 변경 시 전달됨.
override fun guidanceDidUpdateLocation(guidance: KNGuidance, locationGuide: KNGuide_Location) {
    naviView.guidanceDidUpdateLocation(guidance, locationGuide)
}


// KNGuidance_RouteGuideDelegate

// 경로 안내 정보 업데이트 시 호출. `routeGuide`의 항목이 1개 이상 변경 시 전달됨.
override fun guidanceDidUpdateRouteGuide(guidance: KNGuidance, routeGuide: KNGuide_Route) {
    naviView.guidanceDidUpdateRouteGuide(guidance, routeGuide)
}


// KNGuidance_SafetyGuideDelegate

// 주행상태가 변경되었을때 호출
override fun naviViewGuideState(state: KNGuideState) {}
// 안전 운행 정보 업데이트 시 호출. `safetyGuide`의 항목이 1개 이상 변경 시 전달됨.
override fun guidanceDidUpdateSafetyGuide(guidance: KNGuidance, safetyGuide: KNGuide_Safety?) {
    naviView.guidanceDidUpdateSafetyGuide(guidance, safetyGuide)
}

// 주변의 안전 운행 정보 업데이트 시 호출
override fun guidanceDidUpdateAroundSafeties(guidance: KNGuidance, safeties: List<KNSafety>?) {
    naviView.guidanceDidUpdateAroundSafeties(guidance, safeties)
}


// KNGuidance_VoiceGuideDelegate

// 음성 안내 사용 여부
override fun shouldPlayVoiceGuide(guidance: KNGuidance, voiceGuide: KNGuide_Voice, newData: MutableList<ByteArray>): Boolean {
    return naviView.shouldPlayVoiceGuide(guidance, voiceGuide, newData)
}

// 음성 안내 시작
override fun willPlayVoiceGuide(guidance: KNGuidance, voiceGuide: KNGuide_Voice) {
    naviView.willPlayVoiceGuide(guidance, voiceGuide)
}

// 음성 안내 종료
override fun didFinishPlayVoiceGuide(guidance: KNGuidance, voiceGuide: KNGuide_Voice) {
    naviView.didFinishPlayVoiceGuide(guidance, voiceGuide)
}


// KNGuidance_CitsGuideDelegate

// CITS 정보 변경 시 호출
override fun didUpdateCitsGuide(guidance: KNGuidance, citsGuide: KNGuide_Cits) {
    naviView.didUpdateCitsGuide(guidance, citsGuide)
}