2012-08-13 173 views
0

我有一個使用AlarmManager安排通知,如果有就要到了任何情況下的應用程序不顯示通知。這很好。當應用程序啓動

的問題是,每個用戶實例的應用程序時,它會顯示狀態欄通知,如果它是事件的一天。我只想在應用程序不活動(即關閉)時才顯示StatusBar通知。

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.simple_calendar_view); 

     if (notification_value == true) { 
      int dayOfEvent = day; 
      if (notification_day == 1) { 
       dayOfEvent = day + 1; 

      } 
      if(isHoliday(dayOfEvent, month, year)) 
      { 
       String mn = monthName[month-1]; 
       String date_string = setParameter(year, mn, dayOfEvent); 
       startAlarm(year, (month-1), day, hour, mins, date_string); 
      } 
     } 
} 

回答

0

要在你的應用程序運行時只需在使用的onResume AlarmManager.cancel(PendingIntent intent)()防止AlarmManager從創建聲明和重新創建報警器的onPause()。

從上AlarmManager.cancel()Android的文檔:

具有匹配意圖刪除任何警報。任何類型的意圖與其匹配的警報(由filterEquals(Intent)定義)將被取消。

這說明你沒有讓你的舊警報的引用,具有匹配意圖的任何報警將被取消。

最後,我不建議將代碼移動到onCreate()和onDestory,因爲應用程序可以由用戶暫停(例如使用Home Button),稍後由操作系統終止。在這種情況下,onDestroy()方法永遠不會被調用。如果有通知顯示,而應用程序是在後臺是不可接受的,請閱讀如何跟蹤,當您的應用程序實際上是殺死這個詳細的解答:Checking if an Android application is running in the background

+0

好了,山姆,我確實如你所說。取消onResume()上的警報並在onPause()上重新創建它們。我面臨着這樣的問題是,由於通知正在上的onCreate()實例化時,首先運行的通知,也許然後取消上的onResume報警(),它違背了目的。我不知道如何做到這一點? – input 2012-08-13 05:46:30

+0

你只應該在的onPause()創建你的報警,不是的onCreate()。正如你所說的,只有在onResume()中取消它們時,纔會在onCreate()中啓動通知。 – Sam 2012-08-13 05:55:12