Android 通知导航到现有活动

问题描述

我正在修改 Android 通知我有一个带有 Fragment 导航的 Activity 应用程序,这就是我想要实现的目标:当我点击通知时,我想

  • 如果没有,则启动我的 Activity 的新实例
  • 如果返回堆栈或其他任务中有一个,请重新打开在我留下它的片段中

我目前在做什么:

        val intent = Intent(context,MainActivity::class.java)
        return TaskStackBuilder.create(context).run {
            addNextIntentWithParentStack(intent)
            getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT)
        }

我为我的 Activity 尝试了清单中的每个 launchMode,但它总是从第一个 Activity 屏幕开始,而不是我离开应用程序的那个屏幕。

解决方法

规则 #1) 永远不要使用 TaskStackBuilder。默认行为是重置任务(即:删除堆栈中的任何现有活动),这通常不是您想要的。 TaskStackBuilder 可用于构建复杂的后台堆栈,但您确实需要了解它在幕后是如何工作的,并且它有很多副作用。一般来说,尽量避免。

规则 #2) 如果您只想将现有任务带到前台,无论您离开它时处于什么状态,请使用 Intent 中的“启动 PackageManager”:

Intent intent = getPackageManager()
    .getLaunchIntentForPackage("package.name.of.app.to.launch");
startActivity(intent);

并且您不需要任何特殊标志或启动模式。

规则 #3) 避免使用特殊的启动模式 singleTasksingleInstance。它们通常不是您所需要的,并且它们有很多不明显的副作用。如果您正在构建 HOME 屏幕替代品,通常只需要这些。