我有活动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在从待处理的意图打开应用程序时不起作用?我怎样才能使它发挥作用?
答案 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是您任务的根。