2013-02-18 23 views
1

我的應用程序顯示通知。我想通過addAction將通知添加到通知中,導致通知消失並在一小時後重新出現,但是我不想爲此打開一個活動,最好的情況:用戶單擊操作,通知消失並且然後在一小時後重新出現,如通知的貪睡定時器。將操作添加到通知以再次顯示通知,但稍後會像通知中的貪睡計時器一樣顯示通知?

有沒有辦法做到這一點,而無需打開活動?

感謝您的幫助

回答

4

每個通知操作來自一個的PendingIntent。當然,你不想開展一項活動,你不必這樣做。

你的情況下,最好的選擇是在創建您的PendingIntent:

public static PendingIntent getBroadcast (Context context, int requestCode, Intent intent, int flags) 

這樣,當用戶點擊該通知,就會產生系統上的廣播。然後您必須創建一個BroadcastReceiver,才能接收此廣播並使用AlarmManager安排另一個PendingIntent。第二個未決意圖將是一個不同的廣播,只要它被解僱,您的BroadcastReceiver就可以接收並顯示新的通知。

是否有意義?

** 編輯:

只是爲了澄清爲僞例如:

  • 您的應用程序已經在清單註冊一個BroadcastReceiver接收 'com.yourapp.mybroadcast' 的廣播
  • 通知具有com.yourapp.mybroadcast的PendingIntent進階布爾isSchedule =真和INT時間= 60(60分鐘)
  • 用戶點擊通知,此廣播被觸發並且您的BroadcastReceiver收到onReceive(Context context, Intent intent)
  • 在您的onReceive內部,您閱讀isSchedule = true(意味着它必須創建新的時間表和時間= 60分鐘。因此它使用AlarmManager創建一個新的Broadcast PendingIntent,其中isSchedule = false;在60分鐘內被觸發
  • AlarmManager將在60分鐘內再次調用您的BroadcastReceiver,但這次isSchedule = false,因此您的BroadcastReceiver知道它的 時間來再次顯示通知。
+0

嘿,謝謝你的回答,我得到的邏輯,但似乎無法得到它與此代碼的工作:d = b.getInt(「deltaMillis」); DateTime alarmTime = new DateTime(); alarmTime.plusMillis(d); \t \t \t意圖delayedI = new Intent(context,MBroadcastReceiver.class); \t \t \t PendingIntent pi = PendingIntent.getBroadcast(context,0,delayedIntent,PendingIntent.FLAG_CANCEL_CURRENT); \t \t \t AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); (AlarmManager。 \t \t \t am.set(AlarmManager。RTC_WAKEUP,alarmTime.getMillis(),pi);從logcat我看到代碼得到執行,但廣播不會被解僱 – 2013-02-18 14:19:04

+0

沒關係,問題出在Joda時間。它似乎不完全與系統時間同步。當我使用System.currentTimeMillis()+ scheduleDelta作爲通知的工作時間時! – 2013-02-18 14:23:53