Nano Hash - криптовалюты, майнинг, программирование

установить несколько будильников/уведомлений об ошибках/ошибках?

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

  • Я не вижу ничего очевидного. В вашем AlarmManager вы передаете длинное значение из объекта calendar, так что, предположительно, это то, что используется для определения того, когда срабатывать будильник в нужное время. Я предполагаю, что ваша проблема на самом деле где-то в AlarmManager, либо в методе set(), либо в методе, который фактически запускает сигналы тревоги в нужное время. 08.02.2011
  • Я бы рекомендовал изменить тег [java] на [android], чтобы привлечь внимание разработчиков Android. 08.02.2011
  • @britishmutt - ты прав. Кажется, когда я вызываю метод set(), он отменяет предыдущее намерение. Как я могу избежать этой проблемы? 08.02.2011

Ответы:



2

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

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

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

calendar.setTimeInMillis(System.currentTimeMillis());
08.02.2011
  • Ну, я не уверен, почему эта проблема повлияет на будильники, которые отличаются минутами или часами. Спасибо за предупреждение об увольнении. Я думаю, что аварийный менеджер сбрасывается каждый раз, когда запускается setAlarm. 08.02.2011

  • 3

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

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

    Спасибо, парни.

    08.02.2011
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..