Android 当时间设置为0:00时即时调用报警

Android 当时间设置为0:00时即时调用报警,android,alarmmanager,android-alarms,android-calendar,Android,Alarmmanager,Android Alarms,Android Calendar,我正在制作一个警报,该警报与用户选择的任何其他警报一样在小时和分钟内激活。我发现一个问题,当时间设置为0:00时,警报立即启动 我有一个自定义的AlarmManager,我在其中调用schedule repeating,如下所示: CustomAlarmManager alarmManager = new CustomAlarmManager(getActivity()); alarmManager.scheduleRepeatingAlarm(getActivity(), alarmI

我正在制作一个警报,该警报与用户选择的任何其他警报一样在小时和分钟内激活。我发现一个问题,当时间设置为0:00时,警报立即启动

我有一个自定义的
AlarmManager
,我在其中调用schedule repeating,如下所示:

CustomAlarmManager alarmManager = new CustomAlarmManager(getActivity());
alarmManager.scheduleRepeatingAlarm(getActivity(),
    alarmID, alarmHour, alarmMinute);
对于有问题的示例,正在传递这些值:

Id = 619
Hour = 0
Minute = 0
这是
setRepeatingAlarm()
函数:

public void scheduleRepeatingAlarm(Context context, int alarmID, int hour, int minute) {
    System.out.println("schedule is running");
    Intent intent = new Intent(context, AlarmNotificationReciever.class);
    Bundle extras = new Bundle();
    extras.putBoolean(KEY_REPEAT, true);
    extras.putInt("AlarmId", alarmID);
    intent.putExtras(extras);
    PendingIntent pIntent = PendingIntent.getBroadcast(context,
        alarmID, intent, PendingIntent.FLAG_CANCEL_CURRENT);

    Calendar calender = Calendar.getInstance();
    calender.set(Calendar.HOUR_OF_DAY, hour);
    calender.set(Calendar.MINUTE, minute);

    if (android.os.Build.VERSION.SDK_INT >= 19) {
        setSingleExactAlarm(calender.getTimeInMillis(), pIntent);
    } else {
        mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            calender.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pIntent);

    }
}
我假设问题将出现在以下几行:

Calendar calender = Calendar.getInstance();
calender.set(Calendar.HOUR_OF_DAY, hour);
calender.set(Calendar.MINUTE, minute);
设置报警时,此行:

setSingleExactAlarm(calender.getTimeInMillis(), pIntent);
对于其他任何一个小时和一分钟的组合,它似乎都在起作用,并将其视为一个开始的时间。但对于小时=0和分钟=0,它会立即开火


提前感谢您的帮助。

这是预期的行为

Calendar.getInstance()
返回设置为当前日期/时间的
Calendar
实例

保持日期不变,并将小时和分钟字段设置为
0
可以有效地设置过去的报警(视为错过报警)

setRepeating()

如果规定的触发时间在过去,则会触发报警 立即,报警计数取决于过去的报警距离 触发时间与重复间隔有关

您可以执行以下操作来执行检查:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);

Calendar now = Calendar.getInstance();

if(calendar.before(now)) {
    // handle this as you wish

    // adding a day to calendar
    calendar.add(Calendar.DATE, 1);
}

问题在于今天。如果将小时设置为0:00,系统将在同一天鸣响。您必须在第二天0:00时添加一天以启用。它直接触发,因为如果超过设定时间,警报将触发。。。。。