我创建了一个表单,用户可以在其中指定日期和时间并添加警报。我使用这些日期和时间并使用AlarmManager
创建警报。
问题是,只要我点击CreateRemainder
按钮,就会触发警报
我使用以下方法将日期,时间值传递给AlarmManager
类。
int year= Integer.parseInt(splitDate[0]);
int month= Integer.parseInt(splitDate[1]);
int day= Integer.parseInt(splitDate[2]);
int hour= Integer.parseInt(splitTime[0]);
int minute= Integer.parseInt(splitTime[1]);
int second= 0;
Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault());
cal.set(Calendar.DATE,day); //1-31
cal.set(Calendar.MONTH,month-1); //first month is 0!!! January is zero!!!
cal.set(Calendar.YEAR,year);//year...
cal.set(Calendar.HOUR_OF_DAY, hour); //HOUR
cal.set(Calendar.MINUTE, minute); //MIN
cal.set(Calendar.SECOND, second);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
我调试它并获取正确的值,但它会立即启动警报。
如果我将AlarmManager
时间更改为硬编码的10秒时间,则会在10秒后开始剩余。
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (10 * 1000), pendingIntent);
但如果我向日历添加10秒,它在设置后仍会立即开始显示警报。
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()+10000, pendingIntent);
答案 0 :(得分:1)
使用此:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent);
}
如果您的闹钟被立即调用,我的猜测是cal
的日期是在今天之前。
答案 1 :(得分:1)
通常情况下,如果警报一旦设置就会被触发,则表示预定时间在当前时间之后......所以,AlarmManager会立即触发警报
我建议添加调试消息以进行调试。类似的东西:
Log.d("DEBUG", "Time from device: " + Calendar.getInstance().getTimeInMillis() + " Time passed to alarm: " + cal.getTimeInMillis());
然后,您可以查看Current Millis网站并检查两次是否正确.. 检查cal是否真的是未来日期
此外,如果您想为日历添加时间,请使用以下Calendar.add()
方法:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);