【问题标题】:PendingIntents/AlarmManager isn't adding the delay but triggering the alarm immediatelyPendingIntents/AlarmManager 没有添加延迟,而是立即触发警报
【发布时间】:2017-12-18 12:42:18
【问题描述】:

我正在努力让待处理的意图/警报管理器正常工作。我相信我让它正常工作,但后来我向库中添加了一些“aar”文件,并且不得不重做 gradle,这似乎打破了我的基本警报。

 private void setAlarm(int hour, int min, Calendar cal, Intent intent) {
        Log.d(TAG, "Hello, we made it for " + hour + min);
//        cal = Calendar.getInstance();
//        cal.setTimeInMillis(System.currentTimeMillis());
        cal.set(Calendar.HOUR_OF_DAY, hour);
        cal.set(Calendar.MINUTE, min);
        cal.set(Calendar.SECOND, 0);
        Log.e("MainActivity", "Hello - timer after - " + cal.getTime());

        intent.putExtra("extra", "yes");
        pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() , pendingIntent);
        Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
  }

那是我用来触发警报的 sn-p。意图链接到另一个触发警报的类。

【问题讨论】:

  • 如果您设置了过去时间的警报,那么它会立即触发。调试日历实例。
  • 使用 cal.add 代替 cal.set。添加:将给定的金额添加到日历字段。
  • 我传递的参数是从前一个函数的日历中获取的。此外,待处理意图之前的日志具有我想要警报的确切时间,但在此之前触发。所以我不认为这是过去的时间。
  • @NoiseGenerator setExact 已修复!!谢谢你。这就解释了为什么它有时会工作,然后第二天突然就不行了。如果它已经过去,我现在正在考虑增加这一天。最终我想为一周设置它,但我仍在学习,所以我应该一点一点地接受它。
  • 如果时间已经到了,设法增加一天。简单的“if”语句。

标签: java android android-intent alarmmanager android-pendingintent


【解决方案1】:

请尝试以下代码。

private void setAlarm(int hour, int min, Calendar cal, Intent intent) {
        Log.d(TAG, "Hello, we made it for " + hour + min);
//        cal = Calendar.getInstance();
//        cal.setTimeInMillis(System.currentTimeMillis());
        cal.set(Calendar.HOUR_OF_DAY, hour);
        cal.set(Calendar.MINUTE, min);
        cal.set(Calendar.SECOND, 0);
        Log.e("MainActivity", "Hello - timer after - " + cal.getTime());

        intent.putExtra("extra", "yes");
        pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (hour * 60 * 60 * 1000) + (min * 60 * 1000) , pendingIntent);
        Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
  }

【讨论】:

  • 小时、分钟参数具有原始时间,而不是延迟。因此,例如,如果现在是凌晨 1:00,而我将闹钟设置为凌晨 1:30,那将是凌晨 2:30。
  • 你现在能检查一下我已经编辑了代码吗?如果您使用 set 而不是添加,我认为您必须将 System.currentTimeMillis() 添加到您的日历时间。
  • 两者的总和最终是一些未定义的时间。 :(
  • 尝试直接设置,看看是否可行 System.currentTimeMillis() + (hour * 60 * 60 * 1000) + (min * 60 * 1000)
  • 也不走运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多