我正在我的应用程序中开发通知,并且我的未决意图使我发疯。

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

通知:
当应用程序处于后台时,我在通知栏上显示一条通知,该通知栏通过PendingIntent在单击时打开我的应用程序的启动器活动。该PendingIntent指向活动A(singleTop)。但是在这种情况下,它不是打开活动A,而是将活动B置于前台,但是没有调用onNewIntent()(而是调用了onResume()),因此我无法检索通知Intent的其他内容并显示信息,因为此Activity 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);

最佳答案

一些代码会有所帮助,但是我可以猜测是什么原因造成的。

因此,听起来像单击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组合

我还建议您查看清单中定义的标志,以查看它们是否正在干扰“待定”标志,或者将其添加到活动中,因此每次启动它们时,它们都遵循相同的规则。

关于android - PendingIntent启动应用程序包的不同 Activity ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29298006/

10-13 09:08