2017-01-02 77 views
0

我遵循以下链接https://developer.android.com/training/scheduling/alarms.html通过传递calendar.getTimeInMillis()使用AlarmManager设置通知,立即触发通知不会在预期的时间

RTC例子第一个,为所有日子的特定时间设置闹钟。即使在遵循相同的代码之后,警报在假定被触发时也不会被触发。相反,notification会在设置时间选择器的帮助下完成时间后立即触发。以下是我的代码片段,

AlarmManager alarmMgr = (AlarmManager)  getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(this, NotificationReceiver.class); 
PendingIntent intentalarm = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.set(Calendar.HOUR_OF_DAY,4); 
    calendar.set(Calendar.MINUTE, 30); 

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentalarm); 

代替setRepeating我也试过setInexactRepeating但没有luck.I也想补充的是,当我改变了

calendar.getTimeInMillis()和使用SystemClock.elapsedRealtime() + 120 * 1000恰好触发报警后从设定时间开始2分钟。

但是,当使用calendar.getTimeInMillis()时,预期的工作不会发生,而是发生立即触发。

会确实是非常有益的,如果有人能帮助我找到一条solution.Only的注意,如果报警当前设备的时间之前设定的报警会立即触发,但在这里,是不是这样我可以学习。

NotificationReceiver.class工作正常,因为它生成并出现在标题上。但是它出现的时间是令人担忧的原因。

回答

0

您正在使用setTimeInMillis和hourofday和minute。

如果您希望在4:30触发您的闹钟,只需添加hourofday和minute。

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.HOUR_OF_DAY,4); 
calendar.set(Calendar.MINUTE, 30);` 
0

我可以确定我正面临的问题。我使用24小时格式的TimePicker。但我使用SimpleDateFormat“hh:mm”。 h表示“h->上午/下午(1-12)小时”。所以我在AM上设置的任何警报都会正确触发。当我在PM上设定时间后,我使用了1-12'h'格式,闹钟被设置为AM时间,并且与设备时间相比,闹钟/通知立即被触发,此时间已经过去了。正确的格式使用的是“HH:MM”,其中“H”代表“H->白天(0-23)”。这解决了我的问题。

检查在线时代转换时间转换器中的TimeinMillis帮助我识别此问题。再次感谢您的帮助。