Android Compose с навигацией – DeepLink с полным URIAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android Compose с навигацией – DeepLink с полным URI

Сообщение Anonymous »

Я использую Jetpack Navigation с Compose в своем приложении, и мне нужно проанализировать URI, который может происходить из двух разных источников:
1. QR-код, отсканированный внутри приложения.
2. Глубокая ссылка.
Для случая использования QR-кода реализация проста: я сканирую код и передаю значение соответствующему Composable для дальнейшей обработки, используя простой объект данных в качестве маршрут.
Однако у меня возникли проблемы с глубокой ссылкой. Мое требование — получить весь URI, но я не могу использовать свой стандартный маршрут, поскольку компилятор выдает ошибку об отсутствии параметра.
Обходной путь, который я реализовал, заключается в следующем: иметь специальную точку входа Composable Navigation для обработки глубоких ссылок. Оттуда я извлекаю полный URI из намерения и перенаправляю его на свой стандартный маршрут.
Мне интересно, возможно, я что-то пропустил или это просто ограничение SDK . Есть ли у кого-нибудь лучшее решение или рекомендации по реализации этого сценария?
Это моя текущая реализация:
@Serializable data class URIRoute(val uri: String)

fun NavController.navigateToURI(
uri: String,
navOptions: NavOptions? = null
) = navigate(URIRoute(uri), navOptions)

fun NavGraphBuilder.uriScreen() {
composable {
URIScreen()
}
}

fun NavGraphBuilder.uriScreenDeepLink(
navigateToUri: (String) -> Unit
) {
composable(
route = "uriDeepLink",
deepLinks = listOf(
navDeepLink {
uriPattern = BuildConfig.MY_URI
}
)
) { backStackEntry ->
val deepLinkIntent = backStackEntry.arguments?.getParcelable(
NavController.KEY_DEEP_LINK_INTENT,
Intent::class.java
)
navigateToUri(deepLinkIntent?.data.toString())
}
}

@Composable
fun MyNavHost(
modifier: Modifier = Modifier,
navController: NavHostController,
) {
NavHost(
navController = navController,
startDestination = HomeRoute,
modifier = modifier.fillMaxSize(),
) {
...
issuerScreenDeepLink(navController::navigateToURI)
issuerScreen()
...
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... h-full-uri
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»