2010-09-18 104 views
1

我每半小時發送一次C2DM更新到我的Android應用程序,創建一個通知。問題是,當我在早上醒來時,我在狀態欄中排隊了15條通知。如何摺疊Android通知?

如何只保留最新的通知,覆蓋以前的通知?

我試着查看C2DM文檔(http://code.google.com/android/c2dm/),其中提到了一個名爲collapse_key的參數,但我找不到解釋如何使用它,我也不確定解決方案是否在C2DM端。

謝謝!

+0

你的問題的答案,但我會添加澄清的一點。摺疊鍵不適用於這種情況 - 來自文檔:「[摺疊鍵] - 任意字符串,用於在設備脫機時摺疊一組類似消息,以便只有最後一條消息被髮送到這是爲了避免在手機重新聯機時向手機發送太多的信息。「一旦意圖在電話上運行(您的代碼被調用),就C2DM代碼而言,C2DM消息已發送,交付和遺忘。 – mbafford 2011-03-07 14:36:57

回答

5

如果要取消在視圖上設置的任何先前通知,可以嘗試設置其中一個標誌。

PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_UPDATE_CURRENT 

像這樣的東西應該取代舊的通知,我相信

NotificationManager mManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
Intent intent = new Intent(this,test.class); 
Notification notification = new Notification(R.drawable.icon, "Notify", System.currentTimeMillis()); 
notification.setLatestEventInfo(this,"App Name","Description of the notification", 
PendingIntent.getActivity(this.getBaseContext(), 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)); 
mManager.notify(0, notification); 
3

Notification有一個名爲number屬性顯示在圖標下方一點點號(多個通知)。它可讓您使用相同的圖標進行多重通知。

在更新通知時使用相同的ID。 :)乾杯。

+0

接受Rahul的回答是因爲它回答了我的原始問題,但我絕對也使用了數字屬性 - 感謝提示! – yayitswei 2010-09-18 19:08:06

+0

@yayitswei,那很好,我把我的答案定義爲Rahul答案的補充。 – st0le 2010-09-19 05:58:47

1

除了其他答案,您的C2DM請求中還有一個參數叫做delay_while_idle。確保你沒有包括那個或者讓它錯誤。當屏幕關閉時(即,您正在睡覺時),您的手機處於「閒置」狀態。 Google會在服務器上排列所有消息,直到手機閒置(例如,當您在早上開啓屏幕時)。然後,Google一次發送所有15條消息,並在當時顯示它們。

在Chrome瀏覽器的手機源,有一個與這條線稱爲sendNoRetry方法:

if (delayWhileIdle) { 
      postDataBuilder.append("&") 
       .append(PARAM_DELAY_WHILE_IDLE).append("=1"); 
} 

確保它是不正確的,那麼預期谷歌的服務器會向您發送您的C2DM消息,每次30分鐘。

0

collapse_id鍵應該做的工作。要更新任何以前的通知,只需使用相同的密鑰。要在設備上生成新通知,請使用其他密鑰。

例如, *聊天通知使用密鑰 「聊天」(collapse_id = 「聊天」) *爲邀請使用密鑰 「邀請」(collapse_id = 「邀請」)

因此,所有的unqiue collapse_id通知將在設備上分組。

欲瞭解更多詳情請訪問:https://documentation.onesignal.com/reference#create-notification