2013-07-10 179 views

回答

13

如果您要取消先前的警报,那么在PendingIntent中,您的标志应该是PendingIntent.FLAG_CANCEL_CURRENT。如果它已经创建,它将阻止生成新的PendingIntent。并确保在设置警报之前取消相同的PendingIntent,然后设置闹钟。你应该这样尝试:

AlarmManager 2AlarmsInWeekAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
PendingIntent pendingIntent = PendingIntent.getService/getActivity(context, int, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

2AlarmsInWeekAlarmManager.cancel(pendingIntent); 

然后你可以使用set或setRepeating方法。 你的情况应该是

2AlarmsInWeekAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, "timeInMillis", "repetitionTimeInMillis", pendingintent); 

这保证了设置的警报之前将取消所有先前使用相同的PendingIntent报警。

希望你懂了!

+0

我需要澄清。取消()文档说“删除任何与匹配的意图警报。”这是否意味着请求代码im getBroadcast(Context context,int requestCode,Intent intent,int flags)也需要相同?请澄清。 – user2731584

+1

你好,文档对'requestCode'没有太多的描述。但是如果你在[PendingIntent](http://developer.android.com/reference/android/app/PendingIntent.html)中看到'getBroadcast',它会检索一个'PendingIntent'。所以根据我的知识**,如果你把不同的'requestCode's,那么你会得到2个不同的'PendingIntent's,因此取消它将是另一个'PendingIntent'而不是所需的!也看看[这个链接](http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT)。 – thegiga

+0

谢谢你回到我身边。让我再次阅读文档。我也没有看到请求班级安排的警报列表。任何想法? – user2731584

相关问题