提醒不会在正确的时间触发,仅在我重新启动设备时触发。
我创建提醒的那一天,当天我在正确的时间得到它,但之后它只在我重启设备时触发(而不是我选择的正确时间)。
就像,我创造了5种不同的提醒 - 一种是每天触发,第二种是每2天触发,第三种是每3天触发,第四种触发每周触发,第五次触发每月触发
但每当我重新启动设备时,它们都会在同一时间触发(例如,如果我在05:00重新启动设备,那么它们都会同时触发),而我预计Eye Drop会在12:15触发, Cyrip将在每天的第二天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);
}
答案 0 :(得分:2)
当您(重新)创建警报时(例如在启动接收器中),您必须通过添加重复间隔来调整日期,直到日期为止。
目前,您正在使用相同的参数重新创建警报。它只能在达到第一个触发时间之前有效。在每次重新启动之后,您将向警报管理员提供过去的日期,以便立即触发警报。
修改强>:
例如在setRepeatAlarm()
中你可以:
// Calculate notification timein
...
long diffTime = ...
// ensure the next alarm is in the future
while(diffTime < 0) {
diffTime += RepeatTime;
}