2011-09-05 92 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); 

這樣,您將與所有活動清除最後一個實例一起並啓動應用程序的新實例。

相關問題