我正在我的应用程序中开发通知,而且我遇到了一些令我疯狂的未决意图的问题。
正常流程:我的应用程序具有启动器活动(活动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);
答案 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的标志,或者将它们添加到活动中,这样每次启动它们时,它们都遵守相同的规则