Мой градиент:
реализация "androidx.navigation:navigation-compose:2.7.7"
Манифест
Код: Выделить всё
Код: Выделить всё
private fun getPendingIntent(
name: String?,
sender: String,
recipient: String,
context: Context,
): PendingIntent {
val deepLink =
Uri.parse("scheme_chatalyze2://chat_screen2/{$name}/{$sender}/{$recipient}")
val intent = Intent(
Intent.ACTION_VIEW,
deepLink
)
return PendingIntent.getActivity(
context.applicationContext, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
}
Код: Выделить всё
@RequiresApi(Build.VERSION_CODES.S)
@Composable
fun MainScreensNavigationGraph(navHostController: NavHostController) {
Log.d("4444", " ChatalyzeNavigationGraph loaded")
NavHost(navController = navHostController, startDestination = ScreenRoute.ChatsScreen.route) {
composable(route = ScreenRoute.ChatsScreen.route) {
ChatsScreen(navController = navHostController)
}
composable(
route = ScreenRoute.ChatScreen.route,
deepLinks = listOf(
navDeepLink {
// uriPattern = "scheme_chatalyze2://chat_screen2/{$RECIPIENT_NAME}/{$RECIPIENT_PHONE}/{$SENDER_PHONE}"
uriPattern =
"scheme_chatalyze2://chat_screen2/{$RECIPIENT_NAME}/{$RECIPIENT_PHONE}/{$SENDER_PHONE}"
action = Intent.ACTION_VIEW
}
),
arguments = listOf(
navArgument(RECIPIENT_NAME) {
type = NavType.StringType
},
navArgument(RECIPIENT_PHONE) {
type = NavType.StringType
},
navArgument(SENDER_PHONE) {
type = NavType.StringType
}
)
) { entry ->
val recipientName = entry.arguments?.getString(RECIPIENT_NAME)
val recipientPhone = entry.arguments?.getString(RECIPIENT_PHONE)
val senderPhone = entry.arguments?.getString(SENDER_PHONE)
IfLetHelper.execute(recipientName, recipientPhone, senderPhone) {
ChatScreen(
navHostController = navHostController,
recipientName = it[0],
recipientPhone = it[1],
senderPhone = it[2]
)
}
}
}
}
Код: Выделить всё
@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun ChatScreen(
viewModel: ChatScreenViewModel = hiltViewModel(),
navHostController: NavHostController,
recipientName: String,
recipientPhone: String,
senderPhone: String,
) {
Log.d("4444", " ChatScreen loaded")
}
Код: Выделить всё
private fun getPendingIntent(
name: String?,
sender: String,
recipient: String,
context: Context
): PendingIntent {
val deepLink = Uri.parse("scheme_chatalyze2://chat_screen2/{$name}/{$sender}/{$recipient}")
val deepLinkIntent = Intent(
Intent.ACTION_VIEW,
deepLink,
// context,
// MainScreensActivity::class.java
)
val resultPendingIntent: PendingIntent = TaskStackBuilder.create(context).run {
addNextIntentWithParentStack(deepLinkIntent)
getPendingIntent(0, PendingIntent.FLAG_IMMUTABLE)
}
return resultPendingIntent
Я пробовал использовать все типы режимов запуска, но поведение такое же.
Я также пробовал использовать onNewIntent() в MainScreenActivity и вызывать deepLink внутри, но все равно получалось onDestroy для экрана MainScreenActivity, хотя я достиг цели ChatScreen
Источник: https://stackoverflow.com/questions/780 ... n-in-jetpa