我有一个包含多个可组合屏幕的活动。 每个屏幕都具有有意打开或通过用户点击打开的功能。 此外,每个可组合屏幕都有一个后退箭头。
我想做的是知道该可组合项是通过深层链接打开的还是用户只是在该屏幕中单击了
您可以为所有屏幕设置额外参数以检测源。当您从应用程序内部导航时,您可以将源参数设置为“应用内”,但是当您通过深层链接导航时,您可以将该参数设置为“深层链接”。收到深层链接后,您可以在 MainActivity 中使用此代码:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val navController = rememberNavController()
// Handle deep links
intent?.data?.let { uri ->
val source = "deeplink"
navController.navigate(Screen.Detail.createRoute(source))
}
NavHost(navController = navController, startDestination = Screen.Home.route) {
composable(Screen.Home.route) {
HomeScreen(navController)
}
composable(Screen.Detail.route) { backStackEntry ->
val source = backStackEntry.arguments?.getString("source") ?: "user"
DetailScreen(source)
}
}
}
}
上面的代码将检测来自深层链接的意图,并将参数设置为“深层链接”,然后导航到您想要的屏幕。在屏幕中,您可以像这样检查来源:
@Composable
fun DetailScreen(source: String) {
val isOpenedFromDeepLink = source == "deeplink"
// Your UI logic
if (isOpenedFromDeepLink) {
// Handle deep link specific logic
} else {
// Handle user navigation specific logic
}
}