You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:52:16