PendingIntent 启动不同 activity 的应用程序包
PendingIntent launches different activity of the app package
我正在我的应用程序中开发通知,但我遇到了一些让我发疯的未决意图问题。
正常流程:我的应用程序有启动器activity(Activity A,singleTop)显示启动画面然后启动Activity B(也是单顶)。
通知:
当应用程序处于后台时,我会在通知栏上显示一条通知,单击它会通过 PendingIntent 打开我的应用程序的启动器 activity。此 PendingIntent 地址为 Activity A (singleTop)。但是在这种情况下,它没有打开 Activity A,而是将 Activity B 置于前台,但没有调用 onNewIntent() (而是调用了 onResume()),所以我无法检索通知 Intent 的附加信息并显示信息,因为此 Activity B.getIntent() 检索第一次打开 activity 的旧 Intent。
你们中的任何人都可以告诉我一些关于这个问题的信息吗?
这是我设置 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的回答,创建pending intent的代码如下
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);
有些代码会有所帮助,但我可以猜测是什么原因造成的。
所以听起来 Activity 堆栈在单击 PendingIntent
之前是 A、B。打开 PendingIntent
时,它会因为 FLAG_ACTIVITY_CLEAR_TOP
而关闭 B,但会单独留下 activity A,因此它仍然是 运行ning。
所以 onNewIntent 不会 运行 因为 A 仍然是 运行ning,并且 FLAG_ACTIVITY_SINGLE_TOP
标志不会导致它 运行 因为当意图被触发时,它不是在历史堆栈的顶部。
您可能希望按照 Documentation for FLAG_ACTIVITY_CLEAR_TOP
中的建议将其与 FLAG_ACTIVITY_NEW_TASK
结合使用
我还建议查看您在清单中定义的标志,看看它们是否干扰了待定意图的标志,或者将它们添加到活动中,这样每次您启动它们时,它们都会遵守相同的规则。
我正在我的应用程序中开发通知,但我遇到了一些让我发疯的未决意图问题。
正常流程:我的应用程序有启动器activity(Activity A,singleTop)显示启动画面然后启动Activity B(也是单顶)。
通知: 当应用程序处于后台时,我会在通知栏上显示一条通知,单击它会通过 PendingIntent 打开我的应用程序的启动器 activity。此 PendingIntent 地址为 Activity A (singleTop)。但是在这种情况下,它没有打开 Activity A,而是将 Activity B 置于前台,但没有调用 onNewIntent() (而是调用了 onResume()),所以我无法检索通知 Intent 的附加信息并显示信息,因为此 Activity B.getIntent() 检索第一次打开 activity 的旧 Intent。
你们中的任何人都可以告诉我一些关于这个问题的信息吗?
这是我设置 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的回答,创建pending intent的代码如下
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);
有些代码会有所帮助,但我可以猜测是什么原因造成的。
所以听起来 Activity 堆栈在单击 PendingIntent
之前是 A、B。打开 PendingIntent
时,它会因为 FLAG_ACTIVITY_CLEAR_TOP
而关闭 B,但会单独留下 activity A,因此它仍然是 运行ning。
所以 onNewIntent 不会 运行 因为 A 仍然是 运行ning,并且 FLAG_ACTIVITY_SINGLE_TOP
标志不会导致它 运行 因为当意图被触发时,它不是在历史堆栈的顶部。
您可能希望按照 Documentation for FLAG_ACTIVITY_CLEAR_TOP
中的建议将其与FLAG_ACTIVITY_NEW_TASK
结合使用
我还建议查看您在清单中定义的标志,看看它们是否干扰了待定意图的标志,或者将它们添加到活动中,这样每次您启动它们时,它们都会遵守相同的规则。