Jetpack Compose单Activity架构下静态快捷方式配置问题
解决Jetpack Compose单Activity架构下静态快捷方式点击无响应问题
1. 修改静态快捷方式的XML配置
在你的shortcuts.xml的intent中添加额外参数,用来标识要跳转的目标路由:
<?xml version="1.0" encoding="utf-8"?> <shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:shortcutId="search" android:enabled="true" android:shortcutShortLabel="@string/shortcut_search" android:icon="@drawable/ic_search"> <intent android:action="android.intent.action.VIEW" android:targetPackage="tw.com.test.app" android:targetClass="tw.com.test.app.MainActivity"> <!-- 添加跳转路由参数 --> <extra android:name="nav_route" android:value="search_screen" /> </intent> </shortcut> </shortcuts>
2. 在MainActivity中处理Intent参数并导航
在你的MainActivity中,读取Intent携带的参数,通过Compose导航组件跳转到对应页面:
class MainActivity : ComponentActivity() { private lateinit var navController: NavHostController override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { navController = rememberNavController() YourAppTheme { NavHost(navController = navController, startDestination = "home_screen") { composable("home_screen") { HomeScreen() } composable("search_screen") { SearchScreen() } // 注册其他页面路由 } } } // 处理启动时的Intent handleShortcutIntent(intent) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) // 应用后台运行时,点击快捷方式会触发此方法 handleShortcutIntent(intent) } private fun handleShortcutIntent(intent: Intent?) { intent?.getStringExtra("nav_route")?.let { route -> // 检查路由是否存在,避免导航错误 if (navController.graph.hasRoute(route)) { navController.navigate(route) { // 可选配置:避免重复创建页面实例,调整返回栈 launchSingleTop = true popUpTo("home_screen") { inclusive = false } } } } } }
关键说明
- 静态快捷方式仅会启动MainActivity,但Compose导航需要明确路由参数才能定位到具体页面,因此必须通过
extra传递路由信息。 - 重写
onNewIntent是为了处理应用后台运行时的快捷方式点击事件,此时不会重新创建Activity。 - 导航时的
launchSingleTop和popUpTo可根据业务需求调整,控制页面实例和返回栈行为。
内容的提问来源于stack exchange,提问作者Sharz
相关产品推荐
相关产品推荐

