2011-09-05 57 views
4

我开发了一个应用程序,它具有从服务器接收通知的功能。收到通知时重新启动应用程序

问题是,当我点击我收到的通知时,会打开我的应用程序本身的新实例

这种行为是好的,如果我的应用程序是不是在前台,但如果是我尝试打开一个通知,创建我的应用程序的新实例,因此重叠的应用程序之前打开的情况下。

我不希望发生这种情况,所以当我点击通知,如果我的应用程序在前台我不得不关闭它,并打开一个新的实例

我应该如何覆盖通知的点击事件?

+0

我有完全相同的问题。现在我终止不可见的实例,当我有几个我的活动运行的实例。它有效,但我确信这不是最好的方法。 – Shlublu

+0

@Shlublu - 你可以给我一些关于如何做到这一点的指导。 Bcoz我在这里完全空白。 –

+1

我觉得下面的链接可以帮助你 http://stackoverflow.com/questions/2326622/starting-activity-through-notification-avoiding-duplicate-activities –

回答

5

你需要做一些魔术与IntentFlags。 尝试为您的意图添加不同的标志。

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_NEW_TASK); 
+0

嘿,但它不更新从服务器的值。关于它的任何想法? –

+0

在创建pendingIntent时,将flags参数设置为PendingIntent.FLAG_UPDATE_CURRENT。然后您将更新新的值 –

+1

请参阅此代码PendingIntent pintent = PendingIntent.getService(this,0,urintent,PendingIntent.FLAG_UPDATE_CURRENT); –

0

如果您在意图中使用动作MAIN和类别LAUNCHER,它将恢复您的现有实例。这与您从启动器或上次使用的应用程序启动应用程序相同。可能类别LAUNCHER没有必要。

+0

问题是,它像往常一样在这种情况下重叠,另外我的应用程序不会自动启动,客户不会喜欢。但是,感谢您的建议bro。 –

1

您可以在意图添加标志,而意图设置为未决的意图是这样的:

Intent notificationIntent = new Intent(context, activity.class); 
      notificationIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 
      PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 
+0

没有这没有帮助。我在TabAcitivity中使用它,在此之前我也有一个启动画面。因此,当我收到通知时,我将其重定向到第一个标签。但仍然可以看到我以前的实例重叠。 –

+0

您可以将android:launchMode =“singleInstance”添加到清单文件中的活动标记... –

+0

也尝试了此操作。 –

-1
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 

这样,您将与所有活动清除最后一个实例一起并启动应用程序的新实例。

相关问题