【问题标题】:Working out time from now until midnight in AlarmManager triggerAtMillis在 AlarmManager triggerAtMillis 中计算从现在到午夜的时间
【发布时间】:2017-05-07 15:11:42
【问题描述】:

我想创建一个闹钟,它会首先下一个午夜触发,然后在每个午夜之后重复。

尝试为 setRepeating() 方法中的 triggeratMillis 参数计算从现在到午夜的时间(以毫秒为单位)(因此第一个警报在下一个午夜) 但它一被创建就会立即触发。

    private void resetAtMidnight() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);

    Intent intent = new Intent(getApplicationContext(), MidnightReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
            MIDNIGHT_ALARM_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis()-System.currentTimeMillis(),
            AlarmManager.INTERVAL_DAY,
            pendingIntent);
}

我尝试将日历对象最初设置为当前日期午夜,然后从日历午夜时间中减去当前时间(以毫秒为单位)。

然后我认为它可能认为指定的午夜是前一个午夜,所以我尝试将其设为当天晚上 11:59,但这也没有奏效,并且警报立即响起。

【问题讨论】:

  • triggerAtMillis 参数是触发第一个警报的实际时间,而不是直到那时的间隔。适当地设置你的Calendar,然后只传递calendar.getTimeInMillis()This post 也可能对您有所帮助。

标签: java android alarmmanager


【解决方案1】:
public static long gettingNextMidnightTimeinMilliseconds() {
    Calendar c = Calendar.getInstance();
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    return c.getTimeInMillis() + (24 * 60 * 60 * 1000L);
}

【讨论】:

  • 而不是使用 calendar.getTimeInMillis() 使用 gettingNextMidnightTimeinMilliseconds
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多