从pendingintent启动后,startactivity不起作用

时间:2017-10-26 02:55:49

标签: android android-intent android-pendingintent

我有活动A,B。 A是帖子列表,B是帖子。 我创建了启动活动B的通知

docker run -it -p 3000:3000 -v /Users/admin/Documents/docker-tut/frontend a69c09e48c75

B在开始时没有午餐模式且没有意图标志,因此可以堆叠多次。

这是我点击通知时的预期。

A - > (open noti) - >乙

A - > B - > (open noti) - >另一个B

到目前为止,一切都很好。但是,当我从上述未决意图启动应用程序时,会出现问题。

如果我在应用程序甚至不存在于后台时打开通知,它会显示B独立。然后,当我打开另一个通知时,什么都不显示。

(open noti) - > B - > (打开另一个noti) - >另一个B预计但没有发生任何事情。

如果我把FLAG_ACTIVITY_NEW_TASK放到B,它会显示B但会破坏前一个。这不是我想要的。

所以我的问题是,为什么没有标记new_task或clear_top的startactivity在从待处理的意图打开应用程序时不起作用?我怎样才能使它发挥作用?

1 个答案:

答案 0 :(得分:0)

要获得所需的行为,您可能需要让B更聪明一些。它需要知道它何时作为任务(第一个Activity)中的“根”Activity启动,如果它是从Notification启动的话就是这种情况。应用程序没有运行。

如果它作为“root”Activity启动,它应该通过清除任务并启动A并告诉A它应该自动启动B来重定向到A,以便用户看到B.执行此操作,在B.onCreate()执行此操作:

super.onCreate(...);
if (isTaskRoot()) {
    // We need to redirect the user to A by restarting the task
    Intent redirectIntent = new Intent(this, A.class);
    redirectIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    // Add extras so that A will automatically launch B
    redirectIntent.putExtra("launchB", true);
    // add any other extras from the original intent
    redirectIntent.putExtras(getIntent());
    startActivity(redirectIntent);
    // We are done, don't do anything else
    finish();
    return;
}

现在,在A中你需要自动启动B.为此,请将此代码添加到A.onCreate()

super.onCreate(...);
... rest of code from A.onCreate()...
if (getIntent().hasExtra("launchB")) {
    // We should immediately launch B because the user launched B from
    //   from a Notification when the app was not running
    Intent launchIntent = new Intent(this, B.class);
    // Add any extras from the original Intent
    launchIntent.putExtras(getIntent());
    startActivity(launchIntent);
}

这将始终确保A是您任务的根。