установить несколько аварий / уведомлений ошибка / ошибка? - PullRequest
0 голосов
/ 08 февраля 2011

Я пытаюсь создать приложение, которое позволяет пользователю устанавливать задачи и сигналы тревоги или уведомления для каждой задачи.Я создал метод 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);
}

Ответы [ 3 ]

1 голос
/ 08 февраля 2011

Из документации :

Если для того же IntentSender уже запланирован сигнал тревоги, он сначала будет отменен.

0 голосов
/ 09 февраля 2011

@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); 

Если существует более одного намерения с одинаковым именем, самое последнее отменяет предыдущее.Чтобы обойти это, используйте текущее время, чтобы каждое намерение было разным.

Спасибо, ребята.

0 голосов
/ 08 февраля 2011

Может быть потому, что вы работаете с точностью до миллисекунды, а в Java это не гарантирует точности. Ниже от JavaDoc . Возможно, вам следует использовать System.nanoTime (), но это доступно только после Java 5. Прочитайте эту ветку на SO: System.currentTimeMillis против System.nanoTime

Возвращает текущее время в миллисекунды. Обратите внимание, что в то время как блок времени возвращаемого значения является миллисекунда, гранулярность значение зависит от базового операционная система и может быть больше. Например, многие операционные системы измерять время в десятках единиц миллисекунды.

Кроме того, приведенный ниже оператор из вашего кода является избыточным

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