提醒不是在正确的时间触发

时间:2016-04-05 09:05:05

标签: java android reminders

提醒不会在正确的时间触发,仅在我重新启动设备时触发。

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

就像,我创造了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);
}

1 个答案:

答案 0 :(得分:2)

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

目前,您正在使用相同的参数重新创建警报。它只能在达到第一个触发时间之前有效。在每次重新启动之后,您将向警报管理员提供过去的日期,以便立即触发警报。

修改

例如在setRepeatAlarm()中你可以:

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

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