Я использую 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
Android Compose с навигацией – DeepLink с полным URI ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение