Можно ли использовать глубокую ссылку в Jetpack для создания навигации, используя относительные URL-адреса?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Можно ли использовать глубокую ссылку в Jetpack для создания навигации, используя относительные URL-адреса?

Сообщение Anonymous »

Я хотел бы иметь возможность объявлять глубокие ссылки в моем навигационном графе с относительными URL-адресами. Для этого есть несколько причин. Во-первых, для приложения вполне разумно объявлять несколько схем/хостов для обработки как глубокие ссылки, например. традиционный веб-адрес, например https://www.myurl.com, и пользовательскую схему, например myscheme://app. Было бы сложно объявить несколько глубоких ссылок для всех моих направлений, чтобы удовлетворить эти требования. Кроме того, представьте, что ваше приложение разделено на модули, каждый из которых объявляет свой собственный навигационный граф, было бы удобно, если бы эти модули просто объявляли относительные URL-адреса для своих глубоких ссылок и не заботились о наличии нескольких схем/хостов. Я пытался реализовать это с некоторым успехом, однако столкнулся с проблемами при попытке передать параметры как часть глубокой ссылки.

Код: Выделить всё

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApplicationTheme {
val navController = rememberNavController()

NavHost(
navController = navController,
startDestination = "screen-1"
) {
composable(
"screen-1",
deepLinks = listOf(
navDeepLink {
uriPattern = "/screen-1"
action = Intent.ACTION_VIEW
}
)
) {
Column {
Text("Screen 1")
Button(
onClick = { navController.navigate("screen-3/hello") }
) {
Text("Navigate to Screen 3!!!")
}
}
}
composable(
"screen-2",
deepLinks = listOf(
navDeepLink {
uriPattern = "/screen-2"
action = Intent.ACTION_VIEW
}
)
) {
Text("Screen 2")
}
composable(
"screen-3/{title}",
arguments = listOf(
navArgument("title") {
type = NavType.StringType
}
),
deepLinks = listOf(
navDeepLink {
uriPattern = "/screen-3/{title}"
action = Intent.ACTION_VIEW
}
)
) { backStackEntry ->
val title = backStackEntry.arguments?.getString("title")
Text("Screen 3 - $title")
}
}
}
}
}
По большей части вышеописанное работает, позволяя запускать экраны 1 и 2 через глубокую ссылку. Однако экран 3 не работает. Если я объявлю абсолютный URL-адрес (см. ниже), это сработает.

Код: Выделить всё

deepLinks = listOf(
navDeepLink {
uriPattern = "myscheme://app/screen-3/{title}"
action = Intent.ACTION_VIEW
}
)
Я также пробовал использовать подстановочные знаки, но безрезультатно, например

Код: Выделить всё

uriPattern = "*/screen-3/{title}"
Есть идеи?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... ative-urls
Ответить

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

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

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

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

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