gpt4 book ai didi

java - 提醒未在正确时间触发

转载 作者:行者123 更新时间:2023-11-29 19:59:58 25 4
gpt4 key购买 nike

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

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

比如,我创建了 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;
}

关于java - 提醒未在正确时间触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com