2012-09-20 22 views
6

我有一個前臺服務通知,單擊時應該啓動一個活動。在調用finish()之前,此活動非常短暫。通知pendingIntent contentIntent在活動調用完成時失敗()

第一次被點擊的通知它的工作原理,第二次,然後我得到的錯誤:

Sending contentIntent failed: android.app.PendingIntent$CanceledException 

在我的代碼創建前臺服務通知的時候,我已經改變了randomActivity.class到另一個不調用完成的Activity類,它在每次單擊時都能很好地工作。來源:

Intent notificationIntent = new Intent(this, RandomActivity.class); 

到:

Intent notificationIntent = new Intent(this, HomeActivity.class); 

做工精細...

我使用來自Android開發者網站的標準通知代碼,以及使用通知建設者測試它。無論如何我都會得到相同的結果除非Activity調用finish(),否則它完美地工作。

這是預期的行爲,錯誤,還是我錯過了什麼?

我事先感謝您的幫助和希望的解決方案!

注:我使用的通知代碼是完全標準的,所以我沒有發佈它。 RandomActivity調用finish();在onCreate,所以沒有什麼不尋常的地方看到那裏。

回答

9

在嘗試儘可能的一切後,我終於找到了解決方案。張貼在任何人都絆倒這個問題。我不得不將int requestCode與通知ID匹配。爲什麼?絕對沒有想法......我只能假設它防止意圖數據變爲空或重用它?

private static int ONGOING_NOTIFICATION_ID = 76; 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 
    ONGOING_NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

同爲通知ID來startForeground:

this.startForeground(ONGOING_NOTIFICATION_ID, not); 

希望這可以幫助別人。

+0

我同意@brandall。如果您正在使用操作按鈕,則notificationID仍應使用contentIntent中的requestCode,而不是任何操作意圖。 – fahmad6

2

我不需要檢查通知ID(如你所建議的),但我確實必須將標誌更改爲FLAG_UPDATE_CURRENT,而不是FLAG_ONE_SHOT

隨着FLAG_ONE_SHOT,待交付的意圖一旦交付就取消,在此之後,沒有任何點擊通知將允許再次交付相同的未決意圖,因此是例外。

這是我的問題。