Android startactivity不';从悬挂式帐篷发射后无法工作
我有活动A,B。 A是帖子列表,B显示帖子。 我创建启动活动B的通知,如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 到目前为止,一切都很好。但当我从上面挂起的意图启动应用程序时,问题就发生了 若我在后台应用程
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是任务的根。当您打开通知但应用程序根本没有运行时,您希望发生什么?当您打开通知但应用程序根本没有运行时,您希望发生什么?