Android覆盖当前警报

时间:2016-04-21 14:23:17

标签: android alarmmanager android-alarms

我试图设置一次警报通知,每次用户登录,覆盖或取消之前的警报并设置一个新警报。主要基于this postthis 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));

}

但只设置第一个警报而不是下一个警报。

1 个答案:

答案 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将能够推出它   你的新演员,即使他们没有明确给予它。