Android AlarmManager立即启动报警

Android AlarmManager立即启动报警,android,android-layout,alarmmanager,android-alarms,Android,Android Layout,Alarmmanager,Android Alarms,我创建了一个表单,用户可以在其中指定日期和时间并添加报警。我获取这些日期和时间,并使用AlarmManager创建报警 问题是,只要我单击createrements按钮,就会触发警报 我使用以下方法将日期、时间值传递给AlarmManager类 int year= Integer.parseInt(splitDate[0]); int month= Integer.parseInt(splitDate[1]); int day= Integer.parseInt(splitDate[2]);

我创建了一个表单,用户可以在其中指定日期和时间并添加报警。我获取这些日期和时间,并使用
AlarmManager
创建报警

问题是,只要我单击
createrements
按钮,就会触发警报

我使用以下方法将日期、时间值传递给
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);
使用以下命令:

 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
的日期早于今天。

通常,如果您一设置闹钟就触发,则表示计划时间晚于当前时间。。。所以,AlarmManager会立即启动它

我建议将调试消息添加到调试中。比如:

Log.d("DEBUG", "Time from device: " +  Calendar.getInstance().getTimeInMillis() + " Time passed to alarm: " + cal.getTimeInMillis());
然后,您可以查看网站,并检查这两个时间是否正确检查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);

而不是
系统时间
获取
报警管理器
时间。@Kirmani88。。我看到你接受了我的回答。。。请您评论我的回答,并告诉我们您是如何修复的?作为将来的参考…谢谢,当我在某个地方读到
firstMonth
是0时,所以我从我得到的月份中减去-1,这样可以吗,或者我需要将同一个月放在日历中。也许你没有从
splitDate
中获得正确的日期,但是你的闹钟代码看起来很好主要问题是在这个月,我从一个月里减去-1,这就是为什么它在加上它之后会启动警报,因为它已经有一个月了。