我试图设置一次警报通知,每次用户登录,覆盖或取消之前的警报并设置一个新警报。主要基于this post和this post,尝试了以下代码:
private void cancelPreviousAlarm(){
Intent alarmIntent = new Intent(context, AlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
REQUEST_CODE, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(pendingIntent);
pendingIntent.cancel();
}
public void setAlarmBirthday (String message, String fechaNacimiento, boolean notified, boolean isLogin){
Long time2 = calculateNextBirthday(fechaNacimiento, notified, isLogin);
Long alertTime2 = new GregorianCalendar().getTimeInMillis()+time2;
AlarmManager alarmManager3 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent alertIntentBirthday = new Intent(context, AlertReceiver.class);
cancelPreviousAlarm();
alertIntentBirthday.putExtra(EXTRA_BIRTHDAY_MESSAGE, message);
alertIntentBirthday.putExtra(EXTRA_ALARM_LOCAL_NOTI, true);
alarmManager3.set(AlarmManager.RTC_WAKEUP, alertTime2, PendingIntent.getBroadcast(context, REQUEST_CODE,
alertIntentBirthday, PendingIntent.FLAG_ONE_SHOT));
}
但只设置第一个警报而不是下一个警报。
答案 0 :(得分:0)
将PendingIntent.FLAG_ONE_SHOT
替换为PendingIntent.FLAG_UPDATE_CURRENT
。
<强> FLAG_ONE_SHOT:强>
表示此PendingIntent只能使用一次的标志。 用于{@link #getActivity},{@ link #getBroadcast}和 {@link #getService}。
如果设置,之后 {@link #send()}被调用,它将自动进行 已取消,未来任何通过它发送的尝试都将失败。
<强> FLAG_UPDATE_CURRENT 强>:
表示如果描述的PendingIntent已存在的标志, 然后保留它,但用这个新的内容替换它的额外数据 意图。用于{@link #getActivity},{@ link #getBroadcast}和 {@link #getService}。
如果要创建意图,可以使用此选项 只有额外的东西改变,并不关心任何实体 收到你以前的PendingIntent将能够推出它 你的新演员,即使他们没有明确给予它。