PendingIntent启动应用程序包的不同活动

时间:2015-03-27 10:05:01

标签: android android-activity android-pendingintent

我正在我的应用程序中开发通知,而且我遇到了一些令我疯狂的未决意图的问题。

正常流程:我的应用程序具有启动器活动(活动A,singleTop),它显示Splash,然后启动活动B(也是singleTop)。

通知: 当应用程序处于后台时,我会在通知栏上显示通知,通过PendingIntent打开我的应用程序的启动器活动。此PendingIntent地址为活动A(singleTop)。但是在这种情况下,它不是打开Activity A,而是将Activity B置于前台,但是没有调用onNewIntent()(而是调用onResume()),所以我无法检索通知Intent的额外内容并显示信息,因为此活动B.getIntent()检索第一次打开活动的旧意图。

你们中的任何人可以就这个问题给我一些启示吗?

这就是我设置PendingIntent:

的方法
Intent notificationIntent = new Intent(context, SplashActivity.class);
notificationIntent.putExtra(StaticResources.EXTRA_NOTIFICATION_TYPE, "Notification");
notificationIntent.putExtra(StaticResources.EXTRA_NOTIFICATION_MESSAGE, "Message");
notificationIntent.putExtra(StaticResources.EXTRA_NOTIFICATION_TITLE, "title");

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

编辑: 根据@ Woodi_333给出的答案,创建待定意图的代码如下。

Intent notificationIntent = new Intent(context, SplashActivity.class);
notificationIntent.putExtra(StaticResources.EXTRA_NOTIFICATION_TYPE, "Notification");
notificationIntent.putExtra(StaticResources.EXTRA_NOTIFICATION_MESSAGE, "Message");
notificationIntent.putExtra(StaticResources.EXTRA_NOTIFICATION_TITLE, "title");

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

1 个答案:

答案 0 :(得分:1)

有些代码会有所帮助,但我可以猜测造成这种情况的原因。

所以在点击PendingIntent之前听起来像活动堆栈是A,B。打开PendingIntent时,它会因FLAG_ACTIVITY_CLEAR_TOP而关闭B,但会单独保留活动A,因此它仍然在运行。 所以onNewIntent不会运行,因为A仍在运行,FLAG_ACTIVITY_SINGLE_TOP标志不会导致它运行,因为触发意图时,它不在历史堆栈的顶部。

您可能希望将其与Documentation for FLAG_ACTIVITY_CLEAR_TOP

中建议的FLAG_ACTIVITY_NEW_TASK结合使用

我还建议查看你在清单中定义的标志,看看它们是否干扰了Pending Intent的标志,或者将它们添加到活动中,这样每次启动它们时,它们都遵守相同的规则