提醒未在正确时间触发
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;
}
提醒未在正确的时间触发,仅在我重启设备时触发。
我创建提醒的那一天,同一天我在正确的时间收到它,但在那之后它只在我重新启动我的设备时触发(而不是在我选择的正确时间)。
比如,我创建了 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;
}