我正在使用此代码设置警报
//in onCreate()
mAlarmManager = (AlarmManager) getApplicationContext()
.getSystemService(ALARM_SERVICE);
//called for each timer I schedule
Intent intent = new Intent (Intents.MY_INTENT_ACTION);
PendingIntent pendIntent = PendingIntent.getBroadcast(
getApplicationContext(), alert.getID(),
intent, PendingIntent.FLAG_ONE_SHOT);
long delay = 1000 * alert.getDuration();
Calendar cal = Calendar.getInstance();
mAlarmManager.set(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis() + delay, pendIntent);
但是我看到的行为与我在文档1中看到的不匹配,
public void set(int type, long triggerAtTime, PendingIntent operation)
如果已经为同一个 IntentSender 安排了一个警报,它将首先被取消...如果已经为这个 Intent 安排了一个警报(两个 Intent 的相等性由 filterEquals(Intent) 定义),那么它将是删除并替换为这个...
这表明为已经发出警报的意图调用 set(int type, long triggetAtTime, PendingIntent 操作) 应该替换该意图的旧警报。我没有看到任何警报被丢弃。相反,我设置的每个警报都会触发,尽管待处理的 Intent 触发的 Intent 都应该匹配(通过 filterEquals(intent)),因为我在每个 Intent 上设置的所有内容都是相同的操作。
我做错了什么,还是 API 的行为不像记录的那样?
注意:将 PendingIntent 实例化更改为
PendingIntent pendIntent = PendingIntent.getBroadcast(
getApplicationContext(), CONSTANT_ID,
intent, PendingIntent.FLAG_ONE_SHOT);
行为符合预期,丢弃任何已设置的警报,并用新警报替换它。