Android 当时间设置为0:00时即时调用报警
我正在制作一个警报,该警报与用户选择的任何其他警报一样在小时和分钟内激活。我发现一个问题,当时间设置为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
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时添加一天以启用。它直接触发,因为如果超过设定时间,警报将触发。。。。。