Android 如何删除已定义的挂起意图

Android 如何删除已定义的挂起意图,android,Android,我对报警管理器有问题。 我在文件中读到 为了意图解析(过滤)的目的,确定两个意图是否相同。也就是说,如果它们的操作、数据、类型、类和类别相同。这不会比较意向中包含的任何额外数据。 参数 如果已经计划了此意图的报警(两个意图相等由FiltereEquals(意图)定义),则报警管理器的设置方法将删除或替换。 但是,当我使用相同的概念实现时,我的报警管理器将不会过滤相同的意图,并阻止向挂起的意图添加相同的数据 我的代码是 public void setalarm() { int[] IDs

我对报警管理器有问题。 我在文件中读到 为了意图解析(过滤)的目的,确定两个意图是否相同。也就是说,如果它们的操作、数据、类型、类和类别相同。这不会比较意向中包含的任何额外数据。 参数

如果已经计划了此意图的报警(两个意图相等由FiltereEquals(意图)定义),则报警管理器的设置方法将删除或替换。

但是,当我使用相同的概念实现时,我的报警管理器将不会过滤相同的意图,并阻止向挂起的意图添加相同的数据

我的代码是

public void setalarm() {
    int[] IDs = { 1, 2, 3 };
    int[] type = { 0, 1, 0 };
    String[] name = { "not", "yes", "not" };
    Date[] dt = { new Date(2012, 2, 28, 11, 51),
            new Date(2012, 2, 29, 10, 55), new Date(2012, 2, 28, 11, 51) };

    for (int i = 0; i < 3; i++) {
        AlarmManager am = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);
        Intent send = new Intent(context, service.class);
        send.setAction("com.app.main");
        send.setData(Uri.parse(type[i] + " " + name[i] + " " + dt[i]));
        PendingIntent pintent = PendingIntent.getService(context, IDs[i],
                send, PendingIntent.FLAG_CANCEL_CURRENT
                        | PendingIntent.FLAG_ONE_SHOT);
        try {
            am.cancel(pintent);
        } catch (Exception e) {
        }
        am.set(AlarmManager.RTC_WAKEUP, dt[i].getTime(), pintent);
    }
}
public void setalarm(){
int[]id={1,2,3};
int[]类型={0,1,0};
字符串[]名称={“不是”、“是”、“不是”};
日期[]dt={新日期(2012年2月28日11月51日),
新日期(2012,2,29,10,55),新日期(2012,2,28,11,51)};
对于(int i=0;i<3;i++){
AlarmManager am=(AlarmManager)上下文
.getSystemService(Context.ALARM\u服务);
意向发送=新意向(上下文,service.class);
send.setAction(“com.app.main”);
send.setData(Uri.parse(键入[i]+“”+name[i]+“”+dt[i]);
PendingEvent pintent=PendingEvent.getService(上下文,ID[i],
发送,PendingEvent.FLAG\u取消\u当前
|悬挂式帐篷(一杆旗帜);
试一试{
上午十点取消(平顶);
}捕获(例外e){
}
am.set(AlarmManager.RTC_WAKEUP,dt[i].getTime(),pintent);
}
}
当启动方法上的报警调用服务时,它将从id 1和id 3调用两次。 但是我在id=1和id=3中设置了相同的数据


但是用户只能为id=1设置报警,而不能为3设置报警,因为第一个和第三个是相同的

如果创建应用程序稍后重新检索相同类型的 悬挂内容(相同操作、相同意图动作、数据、类别、, 和组件,以及相同的标志),它将收到一个悬挂式帐篷 表示相同的令牌(如果该令牌仍然有效),因此可以调用 取消()以将其删除

例如:

am.cancel(pintent)

重写CancelAlarm()函数中的代码

使用
相同的意图发送和相同的Id[i]
然后像这样取消该
pintent

pintent.cancel();
pintent.cancel();