提醒未在正确时间触发

Reminders are not Triggering on Correct Time

提醒未在正确的时间触发,仅在我重启设备时触发。

我创建提醒的那一天,同一天我在正确的时间收到它,但在那之后它只在我重新启动我的设备时触发(而不是在我选择的正确时间)。

比如,我创建了 5 个不同的提醒 - 一个每天触发,第二个每 2 天触发一次,第三个每 3 天触发一次,第四个每周触发一次,第五个每月触发一次

但是每当我重新启动我的设备时,它们都会同时触发(比如如果我在 :05:00 重新启动我的设备,那么它们都会同时触发),而我期待 Eye Drop 在 12:15,Cyrip 每 2 天在 13:20 触发,依此类推。

AlarmReceiver.java:

public void setRepeatAlarm(Context context, Calendar calendar, int ID, long RepeatTime) {
    mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

    // Put Reminder ID in Intent Extra
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra(ReminderEditActivity.EXTRA_REMINDER_ID, Integer.toString(ID));
    mPendingIntent = PendingIntent.getBroadcast(context, ID, intent, PendingIntent.FLAG_CANCEL_CURRENT);

    // Calculate notification timein
    Calendar c = Calendar.getInstance();
    long currentTime = c.getTimeInMillis();
    long diffTime = calendar.getTimeInMillis() - currentTime;

    // Start alarm using initial notification time and repeat interval time
    mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
            SystemClock.elapsedRealtime() + diffTime,
            RepeatTime , mPendingIntent);

    // Restart alarm if device is rebooted
    ComponentName receiver = new ComponentName(context, BootReceiver.class);
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}

当您(重新)创建警报时(例如在启动接收器中),您必须通过添加重复间隔来调整日期,直到日期在未来。

目前您正在使用相同的参数重新创建警报。它仅在达到第一个触发时间之前有效。之后每次重新启动时,您都会给警报管理器一个过去的日期,因此会立即触发警报。

编辑:

例如在 setRepeatAlarm() 你可以:

// Calculate notification timein
...
long diffTime = ...

// ensure the next alarm is in the future
while(diffTime < 0) {
    diffTime += RepeatTime;
}