通知未在正确日期显示

时间:2015-11-12 07:37:41

标签: android alarmmanager

我正在尝试创建一个提醒应用,在稍后/特定日期为用户创建通知。我正在使用AlarmManagerPendingIntent来实现此目的。我一直遇到的问题是,当我尝试指定AlarmManager的触发日期时,它不会在预定日期触发。我尝试输入常规值,例如8000,并立即触发通知。但是,当我尝试将该值添加为日期时,BroadcaseReceiver不会收到Intent。以下是我的代码。

    public void setReminderNotification (Context context) {

    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);


    notificationReceiverIntent = new Intent(context, AlarmReceiver.class);
    notificationReceiverIntent.putExtra("Title", itemName);
    notificationReceiverIntent.putExtra("DueDate", dueDateString);


    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.clear();
    calendar.set(Calendar.MONTH, 6);
    calendar.set(Calendar.YEAR, 2013);
    calendar.set(Calendar.DAY_OF_MONTH, 13);

    calendar.set(Calendar.HOUR_OF_DAY, 20);
    calendar.set(Calendar.MINUTE, 48);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.AM_PM,Calendar.PM);



    notificationReceiverPendingIntent = PendingIntent.getBroadcast(context, var, notificationReceiverIntent, 0);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, notificationReceiverPendingIntent);

}

所以主要问题似乎是这一行。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, notificationReceiverPendingIntent);

我希望通知会在目标日期设置为过去后立即启动。但是,通知不会立即显示。当我用8000之类的内容替换calendar.getTimeinMillis()变量时,会立即显示通知。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

AlarmManager documentation注意:

  

从API 19(KITKAT)开始,警报传递不准确:操作系统   将移动警报以最小化唤醒和电池使用。那里   是支持需要严格交付的应用程序的新API   担保;请参阅setWindow(int,long,long,PendingIntent)和   setExact(int,long,PendingIntent)。应用程序   targetSdkVersion早于API 19将继续看到   以前的行为,其中所有警报都在何时传递   请求。

在您的情况下,您应该致电setExact()