Java Can';t取消Android Alarm Manager的警报

Java Can';t取消Android Alarm Manager的警报,java,android,broadcastreceiver,alarmmanager,Java,Android,Broadcastreceiver,Alarmmanager,我正在尝试用我的应用程序设置几个警报,并根据请求取消它们 我已经读了很多关于这方面的主题,并浏览了文档,但似乎它不起作用 文档说明cancel将尝试查找与我提供的“filterEquals”相匹配的意图(“确定出于意图解析(筛选)的目的,两个意图是否相同”)。也就是说,如果它们的操作、数据、类型、类和类别相同。这不会比较意图中包含的任何额外数据。“) 我提供相同的操作、数据、类型、类和类别,为什么它不起作用 创建报警: AlarmManager manager = (AlarmManag

我正在尝试用我的应用程序设置几个警报,并根据请求取消它们

我已经读了很多关于这方面的主题,并浏览了文档,但似乎它不起作用

文档说明cancel将尝试查找与我提供的“filterEquals”相匹配的意图(“确定出于意图解析(筛选)的目的,两个意图是否相同”)。也就是说,如果它们的操作、数据、类型、类和类别相同。这不会比较意图中包含的任何额外数据。“)

我提供相同的操作、数据、类型、类和类别,为什么它不起作用

创建报警:

    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    int interval = 30000;

    Intent intent = new Intent(getApplicationContext(), Broadcast.class);        
    intent.putExtra("alarmTime",alarmTime);
    intent.putExtra("reminder1",reminder1);
    intent.putExtra("reminder2",reminder2);
    intent.putExtra("title",title);
    intent.putExtra("message",message);
    intent.putExtra("vibrate",vibrate);
    intent.putExtra("sound",sound);
    intent.putExtra("name",name);

    //Create _id from data input. is unique
    int _id = 0;
    for (char i: name.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:title.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:message.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    _id += (int) alarmTime.getTime();
    _id += (int) reminder1.getTime();
    _id += (int) reminder2.getTime();
    Log.e("ALARMS", "Creating alarm with id: "+_id);
    intent.setData(Uri.parse("custom://" + _id));
    intent.setAction(String.valueOf(_id));
    PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);

    manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + interval, pendingUpdateIntent);
取消警报

AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(getApplicationContext(), Broadcast.class);
    intent.putExtra("alarmTime",alarmTime);
    intent.putExtra("reminder1",reminder1);
    intent.putExtra("reminder2",reminder2);
    intent.putExtra("title",title);
    intent.putExtra("message",message);
    intent.putExtra("vibrate",vibrate);
    intent.putExtra("sound",sound);
    intent.putExtra("name",name);

    int _id = 0;
    for (char i:name.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:title.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    for (char i:message.toCharArray()){
        _id += Character.getNumericValue(i);
    }
    _id += (int) alarmTime.getTime();
    _id += (int) reminder1.getTime();
    _id += (int) reminder2.getTime();
    intent.setData(Uri.parse("custom://" + _id));
    intent.setAction(String.valueOf(_id));
    PendingIntent pendingUpdateIntent = PendingIntent.getBroadcast(getApplicationContext(), _id, intent, 0);
    Log.e("ALARMS", "Cancelling alarm with id: "+_id);
    // Cancel alarms
    try {
        manager.cancel(pendingUpdateIntent);
    } catch (Exception e) {
        Log.e("ALARMS", "AlarmManager update was not canceled. " + e.toString());
    }
所以我用不同的参数调用了3次create alarm,所以我的_id每次都不同

然后我调用3次cancel报警,并在创建和取消时为每个报警生成匹配的ID

所以取消运行,但我的警报仍然被触发

我的警报触发广播接收器,该接收器将为每个警报输出通知


我忘了提到,我尝试了使用不同的标志作为挂起内容,但没有任何效果(标志取消当前,标志更新当前)

似乎我给警报输入了不同的日期,并且id有几个数字不同(开始和结束相同),这导致对不同且不起作用的_id值调用取消

更改了生成_id的方式,以排除日期(我使用new Date()生成的日期),但不起作用


糟糕的是,我没有看到它。

似乎我给警报输入了不同的日期,并且_id的值有几个数字不同(开始和结束是相同的),这导致对不同且不起作用的_id值调用取消

更改了生成_id的方式,以排除日期(我使用new Date()生成的日期),但不起作用

糟糕的是,我没有看到