我在午夜设置闹钟,有时我会使用相同的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);
答案 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
。