我正在尝试创建一个提醒应用,在稍后/特定日期为用户创建通知。我正在使用AlarmManager
和PendingIntent
来实现此目的。我一直遇到的问题是,当我尝试指定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()
变量时,会立即显示通知。有什么想法吗?
答案 0 :(得分:1)
从API 19(KITKAT)开始,警报传递不准确:操作系统 将移动警报以最小化唤醒和电池使用。那里 是支持需要严格交付的应用程序的新API 担保;请参阅setWindow(int,long,long,PendingIntent)和 setExact(int,long,PendingIntent)。应用程序 targetSdkVersion早于API 19将继续看到 以前的行为,其中所有警报都在何时传递 请求。
在您的情况下,您应该致电setExact()
。