2011-02-08 27 views
0

我試圖製作一個應用程序,允許用戶爲每項任務設置任務和警報或通知。我在下面創建了一個'setAlarm'方法。然而,我有一個錯誤,就是每當我設置多個任務與警報,不知何故所有先前的任務取消,只有最近設置的警報將關閉。你知道最新的問題嗎?我的猜測是,每次我調用'setAlarm'時,'日曆'實例都會重置。我怎麼能解決這個問題?設置多個警報/通知錯誤/錯誤?

public void setAlarm() { 
     Intent intent1 = new Intent(NewGoal.this, SingleAlarm.class); 
     PendingIntent sender = PendingIntent.getBroadcast(NewGoal.this, 
       0, intent1, 0); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 

     if (alarm_time == 10) { 
      calendar.add(Calendar.SECOND, alarm_time); 
     } else if (alarm_time == 30 { 
      calendar.add(Calendar.SECOND, alarm_time) 
     } 

     AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); 
     am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); 
     Log.i(TEST, "In setAlarm method"); 
     Log.i(TEST, "calendar=" + calendar.MILLISECOND); 
} 
+0

我沒有看到任何明顯的。在你的`AlarmManager`中,你從`calendar`對象中傳入了一個很長的值,所以這可能是用來確定何時在正確的時間點燃警報的。我在猜測你的問題實際上是在`AlarmManager`的某處,無論是在`set()`方法還是實際在適當的時候觸發警報的方法。 – 2011-02-08 02:42:04

+0

我建議將[java]標籤更改爲[android]以獲得android開發者的關注。 – 2011-02-08 02:50:16

回答

0

可能是因爲您正在使用毫秒粒度,而在Java中這些不能保證準確。以下是來自JavaDoc。可能是你應該使用System.nanoTime(),但這僅因爲Java 5的閱讀此線程上SO:System.currentTimeMillis vs System.nanoTime

返回 毫秒爲單位的當前時間。請注意,儘管返回值的時間單位 的值爲 毫秒,但值的粒度取決於底層的 操作系統,可能會更大。例如,許多操作系統 以幾十個單位爲單位來測量時間。

此外,從你的代碼下面的語句是多餘的

calendar.setTimeInMillis(System.currentTimeMillis()); 
1

documentation

如果已經安排在同IntentSender報警時,它會先被取消。

0

@ dave.c謝謝,我也在文檔中發現了這一點。這是我如何解決它的。

final int intent_id= (int) System.currentTimeMillis(); 

    Intent intent1 = new Intent(NewGoal.this, AlarmBroadcastReceiver.class); 
    PendingIntent sender = PendingIntent.getBroadcast(NewGoal.this, intent_id, intent1, 0); 

如果存在多個具有相同名稱的意圖,則最近的意向將取消前一個。爲了解決這個問題,請使用當前時間使每個意圖不同。

謝謝你們。