AlarmManager启动即时报警


-1

我已经创建了一个表单,用户指定日期和时间并添加报警。我采取这些日期和时间,并使用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

而不是'系统时间'得到'报警管理器'的时间。 25 7月. 162016-07-25 13:00:14

  0

@ Kirmani88 ..我看到你接受了我的回答......你能评论我的回答,并告诉我们你如何解决?以备将来参考... 25 7月. 162016-07-25 14:10:37

1

通常情况下,如果报警被只要你设置它发射,这意味着,预定的时间是当前时间之后......所以,AlarmManager触发它imediatelly

我建议调试信息添加到调试。喜欢的东西:

Log.d("DEBUG", "Time from device: " + Calendar.getInstance().getTimeInMillis() + " Time passed to alarm: " + cal.getTimeInMillis()); 

然后,您可以检查Current Millis网站,检查是否两次都是正确的.. 检查卡确实是一个将来的日期

另外,如果你想添加一个时间日历,使用方法如下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); 
  0

主要问题是在本月,我从月份减去-1,这就是为什么它刚刚添加它后才开始闹钟,因为它已经一个月了。 25 7月. 162016-07-25 14:17:55


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的日期是今天之前。

  0

谢谢,因为我读了'firstMonth'为0的地方,所以我从我得到的任何月份减去-1,是好还是我需要在日历中放入同一月份。 25 7月. 162016-07-25 13:06:01

  0

也许你没有直接从'splitDate'获得你的日期,但你的闹钟代码看起来很好 25 7月. 162016-07-25 13:07:21