AlarmManager设置警报两次而不是更新当前警报

时间:2014-08-16 15:25:55

标签: java android

我在午夜设置闹钟,有时我会使用相同的ID再次设置闹钟,为什么闹钟管理器会创建另一个闹钟而不是更新当前闹钟。我结束了2个警报而不是1.我怎么能改变它,所以如果这个代码在当前警报出现时执行,它将更新它而不是创建一个重复的

    Intent intent = new Intent(con,MyReceiver.class);
    intent.setAction("ACTIVATE_MIDNIGHT_SERVICE");
    PendingIntent pendingIntent =  PendingIntent.getBroadcast(
            con, -1, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    Date d = new Date();
    d.setDate(d.getDate()+1);
    d.setHours(0);
    d.setMinutes(0);
    d.setSeconds(0);  
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, d.getTime(),AlarmManager.INTERVAL_DAY, pendingIntent);

2 个答案:

答案 0 :(得分:1)

本周我不得不处理同样的问题。基本上,AlarmManager执行两项操作:1。在系统内存中设置唤醒提醒,因此设备将唤醒并执行任务,并且2.调用您的应用程序(通过意图)在特定时间执行任务。

话虽如此,当您设置Alarm时,您需要指定两个部分,当您希望警报消失(通过setRepeating),以及做什么(通过{{ 1}})

请注意,如果此调用已存在,则setRepeating调用中没有任何指示让警报管理器知道该怎么做,这是因为您可以根据需要创建任意数量的警报。 Intent仅告知系统在前一个Intent仍处于活动状态时该怎么做。相反,您需要取消现有的警报并设置一个新的警报。您可以通过将请求代码设置为不同的(即正整数),然后在设置新警报时取消

PendingIntent.FLAG_CANCEL_CURRENT

答案 1 :(得分:0)

创建PendingIntent.FLAG_CANCEL_CURRENT时,将PendingIntent.FLAG_UPDATE_CURRENT替换为PendingIntent