取消AlarmManager的问题 - PendingIntent

Pre*_*hi 10 android android-pendingintent

我有一个应用程序,提醒人们完成他们的任务.所以有一个PendingIntent,现在用户可以在他想要的时候删除警报.在这段代码中,只有一个PendingIntent用于多个用户警报,因此我对取消意图附加功能的特定警报感到困惑"pill".其余警报不应取消.我对这个问题一无所知.希望我很清楚.谢谢

Intent intent = new Intent(this, AlarmNotifyReceiver.class);
intent.putExtra("Name_pill", "pill");
sender = PendingIntent.getBroadcast(this,
DatabaseConstants.NOTIFICATION_ID + 1, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), sender);
updateTheFlag(pillName[(pillName.length-1)]);
Run Code Online (Sandbox Code Playgroud)

nol*_*man 13

按照Android文档,以阻止报警时,您应该创建一个Intent具有相同的数据,但并不一定是相同的演员:

public void cancel(PendingIntent操作)

删除具有匹配Intent的所有警报.任何类型的警报,其Intent匹配此> 1(由filterEquals(Intent)定义)将被取消.

filterEquals(Intent)

public boolean filterEquals(Intent other)

为了意图解析(过滤)的目的,确定两个意图是否相同.>也就是说,如果他们的行为,数据,类型,类别和类别相同.这不会比较意图中包含的任何额外数据.


Mat*_*t D 5

正如我在评论中所说,似乎您只需要重新创建完全相同的PendingIntent对象,并将相同的Extras放入其中.然后,你打电话

am.cancel(sender);
Run Code Online (Sandbox Code Playgroud)

并且应取消您的特定警报.我个人无法找到更好的方法.我发现这些信息是为了证实我在其他地方的期望.

它写道:

必须取消重复警报以阻止它们.AlarmManager提供了一个cancel()方法,该方法需要与创建intent相同的intent类.这是您可以取消闹钟的方法.

alarmManager.cancel(的PendingIntent);

请注意,pendingIntent对象不需要是同一个对象.创建警报时,操作,类,类别等意图字段应相同.意图用于识别取消它的警报.

它是在重复警报的情况下,但如果我没有弄错的话,应该以相同的方式取消一次性警报.我无法自己更彻底地测试它,因为我在工作,但这应该有效.

  • 根据Android文档,为了停止警报,你应该用相同的数据创建一个"Intent",但不一定是相同的额外内容:public void cancel(PendingIntent operation)删除任何带有匹配Intent的警报.任何类型的警报,其Intent与此匹配的警报(由filterEquals(Intent)定义)将被取消. (2认同)