У меня вопрос относительно использования 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
1736686552
Anonymous
У меня вопрос относительно использования 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 -> {
...
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79349921/proper-usage-of-google-api-navigation-in-android-clean-architecture[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия