我想取消所有设置的闹钟。我已经搜索了很多,尝试了很多东西,但都没有工作。当我设置了一个闹钟说2分钟后,然后我取消它,它仍然会在2分钟后火。
用于创建报警的方法:
Intent intent = new Intent(c, AlarmReceiver.class);
intent.putExtra("task", task);
intent.putExtra("id", id);
PendingIntent pendingIntent = PendingIntent.getActivity(c, code, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
这是为了取消报警:
Intent intent = new Intent(c, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getActivity(c, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager)c.getSystemService(Context.ALARM_SERVICE);
am.cancel(pendingIntent);
任何帮助将不胜感激。
4条答案
按热度按时间wswtfjt71#
当您安排闹钟时,
getActivity()
的第二个参数是code
,当您尝试取消闹钟时,getActivity()
的第二个参数是0
。这将仅成功取消code
为0
的闹钟。如果你想“一致地”取消闹钟,你需要创建等价的
PendingIntents
,这意味着相同的Intent对象(具有相同的动作,组件,数据,标志和其他属性)和相同的代码。值得一提的是,你用来创建Intent
的Context
不需要相同,取消也会看到它是相同的。pgky5nke2#
您设置的报警请求码(
getActivity
的第二个参数)为code
,而取消报警时,第二个参数为0
。如果code
的值不是0
,则不会取消报警。为了触发和取消多个报警,您需要为
PendingIntent.getActivity
中的requestCode
(第二个参数)使用唯一值请参阅此代码,该代码将使用三个唯一的请求代码设置3个报警,
您可以使用用于设置报警的相同
requestCode
(和其他参数)取消报警。需要匹配的其他参数是,
Intent
中的“action”必须相同(或都为null)。否则它们不匹配。Intent
中的“data”必须相同(或都为null)。否则它们不匹配。Intent
中的(数据的)“type”必须相同(或都为null)。否则它们不匹配。Intent
中的“package”和/或“component”必须相同(或都为null)。否则它们不匹配。“package”和“component”字段是为“explicit”Intent
设置的。Intent
中的“categories”列表必须相同。否则它们不匹配。请参阅this answer了解更多详情。
wf82jlnq3#
要取消警报,您不需要重新创建相同的PendingIntent并传递相同的请求代码。
你可以在这里看到我的解决方案
vnzz0bqm4#
当您取消报警时,其意图必须与用于设置报警的意图相同。
因此只需添加以下两行
Intent.putExtra(“任务”,任务);
int n. getString(“nums”,nums);
所以你的最终代码是