2011-10-07 80 views
3

我正在使用此代碼來啓動鬧鐘。如何避免爲AlarmManager設置唯一的ID?

該警報設置在用戶可以啓動的活動中。

//Setting alarm to fire off NEW_GAME intent every 24 hours. 
      String alarm = Context.ALARM_SERVICE; 
      Calendar calendar = Calendar.getInstance(); 

      calendar.set(Calendar.HOUR_OF_DAY, 8); 
      calendar.set(Calendar.MINUTE, 0); 
      calendar.set(Calendar.SECOND,0); 
      calendar.set(Calendar.MILLISECOND, 0); 

      Log.i("Test", "Current time: " + System.currentTimeMillis()); 
       Log.i("Test", "Calendar time: " + calendar.getTimeInMillis()); 

       int currentDate = calendar.get(Calendar.DATE); 
       calendar.set(Calendar.DATE, currentDate+1); 

       Log.i("Test", "Calendar time with a day added: " + calendar.getTimeInMillis()); 


      AlarmManager am = (AlarmManager)getActivity().getSystemService(alarm); 
       Intent intent = new Intent("NEW_ITEM"); 
       PendingIntent sender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0); 

       am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, sender); 

我被告知我需要提供一個唯一的ID,以便在getBroadcast()所在的位置報警不會相互編寫。

問題是,當用戶可以根據需要多次打開活動時,我該如何做到這一點?

此外,如果我每次提供一個唯一的ID,這意味着它可能會設置5個相同的ALARMS,因爲唯一的ID。

如何或什麼是解決這個問題的最好方法?

+0

爲你所做的答案的工作? – LordT

回答

3

你總是可以使用你的目標時間的unix時間戳作爲唯一的ID。這樣,準確的時間將覆蓋對方報警,而其他所有的報警將保持獨立

[編輯:這裏是一些示例代碼:

AlarmManager am = (AlarmManager)getActivity().getSystemService(alarm); 
      Intent intent = new Intent(String.valueOf(calendar.getTimeInMillis())); 
      PendingIntent sender = PendingIntent.getBroadcast(getActivity(), 0, intent, 0); 
      am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, sender); 
+0

你能提供關於我如何用我的代碼做到這一點的指示嗎? – yoshi24

+0

你能提供一個例子嗎? – yoshi24

+0

添加了一些代碼 – LordT