我开发了一个应用程序,它具有从服务器接收通知的功能。
问题是,当我单击收到的通知时,它会打开我的应用程序本身的一个新实例。
这种行为是好的,如果我的应用程序不在前台,但如果是,并且我尝试打开通知,则会创建我的应用程序的新实例,从而与之前打开的应用程序实例重叠。
我不希望这种情况发生,所以当我点击通知时,如果我的应用程序在前台,我必须关闭它并打开一个新实例。
我应该如何覆盖通知的点击事件?
我开发了一个应用程序,它具有从服务器接收通知的功能。
问题是,当我单击收到的通知时,它会打开我的应用程序本身的一个新实例。
这种行为是好的,如果我的应用程序不在前台,但如果是,并且我尝试打开通知,则会创建我的应用程序的新实例,从而与之前打开的应用程序实例重叠。
我不希望这种情况发生,所以当我点击通知时,如果我的应用程序在前台,我必须关闭它并打开一个新实例。
我应该如何覆盖通知的点击事件?
你需要用 IntentFlags 做一些魔术。尝试为您的意图添加不同的标志。
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_NEW_TASK);
您可以在意图中添加标志,同时将意图设置为待处理意图,如下所示:
Intent notificationIntent = new Intent(context, activity.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
如果您在意图中使用操作 MAIN 和类别 LAUNCHER,它将恢复您现有的实例。这与您从启动器或上次使用的应用程序启动应用程序相同。可能不需要类别 LAUNCHER。
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
这样,您将清除最后一个实例以及所有活动并启动应用程序的新实例。