У меня вопрос относительно использования API Google (в моем случае NavigationAPI) в чистой архитектуре.
Поэтому для использования навигации Google необходимо иметь объект Navigator из NavigationApi. getNavigator API.
Изначально я думал, что можно разместить всю необходимую реализацию на уровне ДАННЫХ, однако этот уровень должен только хранить и предоставлять доступ к данным (локальным, удаленным). Но тогда Navigator сильно зависит от SupportNavigationFragment, который находится на уровне представления. Как мы знаем, нижние уровни не должны зависеть от более высоких.
Поэтому я подумал, что всю упомянутую реализацию следует перенести во фрагмент, но я не уверен на 100%, правильно ли это. даже если это звучит разумно. Есть ли у кого-нибудь опыт работы с Google API в чистой арке?
Функциональность, которая мне нужна:
private var navigator: Navigator? = null
override fun initializeNavigator(activity: FragmentActivity) {
NavigationApi.getNavigator(activity, object : NavigationApi.NavigatorListener {
override fun onNavigatorReady(navigator: Navigator?) {
navigator = navigator
addListeners()
}
override fun onError(errorCode: Int) {
handleError(errorCode)
}
})
}
override fun startNavigation() {
navigator?.setAudioGuidance(Navigator.AudioGuidance.VOICE_ALERTS_AND_GUIDANCE)
navigator?.startGuidance()
}
override fun stopNavigation() {
navigator?.stopGuidance()
navigator?.clearDestinations()
}
override fun getRouteSummary(waypoint: Waypoint, options: RoutingOptions) = callbackFlow {
navigator?.let { navigator ->
val pendingRoute = navigator.setDestination(waypoint, options)
pendingRoute.setOnResultListener { code ->
_navigationStateFlow.value = NavigationState.SUMMARY
val result = trySend(
NavigationSummary(
response = code,
meters = navigator.currentTimeAndDistance.meters,
seconds = navigator.currentTimeAndDistance.seconds
)
)
}
awaitClose {
…
}
}
}
private fun addListeners() {
val arrivalListener = Navigator.ArrivalListener {
navigator?.clearDestinations()
}
navigator?.addArrivalListener(arrivalListener)
val routeChangedListener = Navigator.RouteChangedListener {
…
}
navigator?.addRouteChangedListener(routeChangedListener)
}
private fun handleError(errorCode: Int) {
when (errorCode) {
NavigationApi.ErrorCode.NOT_AUTHORIZED -> {
…
}
NavigationApi.ErrorCode.TERMS_NOT_ACCEPTED -> {
...
}
NavigationApi.ErrorCode.NETWORK_ERROR -> {
…
}
NavigationApi.ErrorCode.LOCATION_PERMISSION_MISSING -> {
…
}
else -> {
...
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... chitecture
Правильное использование Google API (навигация) в чистой архитектуре Android ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Правильное место для сопоставления домена в чистой архитектуре Android
Anonymous » » в форуме Android - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Правильное место для сопоставления домена в чистой архитектуре Android
Anonymous » » в форуме Android - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Использование нескольких EF Core DbContexts в одном приложении в чистой архитектуре
Anonymous » » в форуме C# - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
В чем разница между mvvm с чистой архитектурой и mvvm без чистой архитектуры в Android?
Anonymous » » в форуме Android - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Где реализовать шифрование токена доступа в чистой архитектуре Android?
Anonymous » » в форуме Android - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-