Android startactivity不';从悬挂式帐篷发射后无法工作

Android startactivity不';从悬挂式帐篷发射后无法工作,android,android-intent,android-pendingintent,Android,Android Intent,Android Pendingintent,我有活动A,B。 A是帖子列表,B显示帖子。 我创建启动活动B的通知,如 PendingIntent.getActivity(context, (int) id, intentForB, PendingIntent.FLAG_UPDATE_CURRENT); B在启动时没有午餐模式和意图标志,因此可以多次堆叠 这是我在单击通知时所期望的 A->(不公开)->B A->B->(打开noti)->另一个B 到目前为止,一切都很好。但当我从上面挂起的意图启动应用程序时,问题就发生了 若我在后台应用程

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

PendingIntent.getActivity(context, (int) id, intentForB, PendingIntent.FLAG_UPDATE_CURRENT);
B在启动时没有午餐模式和意图标志,因此可以多次堆叠

这是我在单击通知时所期望的

A->(不公开)->B

A->B->(打开noti)->另一个B

到目前为止,一切都很好。但当我从上面挂起的意图启动应用程序时,问题就发生了

若我在后台应用程序不存在时打开通知,它会显示B standalone。然后当我打开另一个通知时,什么也不显示

(打开noti)->B->(打开另一个noti)->预期会有另一个B,但什么也没有发生

若我把FLAG\u ACTIVITY\u NEW\u TASK放在B上,它会显示B,但会破坏前一个。这不是我想要的


所以我的问题是,当从挂起的意图打开应用程序时,为什么没有标记new_task或clear_top的startactivity不起作用?我怎样才能让它起作用呢?

要获得你想要的行为,你可能需要让B更聪明一点。它需要知道它是何时作为任务(第一个
活动
)中的“根”
活动启动的,如果它是在应用程序未运行时从
通知
启动的,则会出现这种情况

如果它作为“根”
活动启动
,它应该通过清除任务并启动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()


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

要获得您想要的行为,您可能需要让B更聪明一些。它需要知道它是何时作为任务(第一个
活动
)中的“根”
活动启动的,如果它是在应用程序未运行时从
通知
启动的,则会出现这种情况

如果它作为“根”
活动启动
,它应该通过清除任务并启动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()


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

当您打开通知但应用程序根本没有运行时,您希望发生什么?当您打开通知但应用程序根本没有运行时,您希望发生什么?