private fun setTrackingMode(isTracking: Boolean) {
val manager = TMapGpsManager(requireContext())
if (isTracking) {
if (isLocationPermissionsGranted()) {
setManagerDefaultOptions(manager)
manager.setOnLocationChangeListener(onLocationChangeListener)
}
} else {
manager.setOnLocationChangeListener(null)
}
}
이전 코드에서는 트래킹 모드를 온오프하기 위한 setTrackingMode
함수에서 TMapGpsManager
를 계속 새로 생성하고 있었다. 따라서 이후에 트래킹 모드를 종료하기 위해 OnLocationChangedListener
를 null로 설정해도 이전 매니저의 리스너가 남아 화면이 계속해서 동작하는 이슈가 있었다.
private fun setTrackingMode() {
if (isLocationPermissionsGranted()) {
val manager = TMapGpsManager(requireContext()).apply {
this.minDistance = 2.5F
this.provider = TMapGpsManager.PROVIDER_GPS
this.openGps()
this.provider = TMapGpsManager.PROVIDER_NETWORK
this.openGps()
}
manager.setOnLocationChangeListener(onLocationChangeListener)
}
}
트래킹 모드를 처음 실행할 때만 매니저를 생성하고 리스너를 설정해줬다. 트래킹 모드 온오프에 따른 화면 동작은 onLocationChangeListener
내부에 분기를 두어 구현하였다.