Android AlarmManager无法正确取消警报

问题描述 投票:0回答:1

我正在开发一个应用程序,它将允许用户设置多个通知,并取消他们选择的任何通知。

我的问题是,当我使用AlarmManager取消挂起的意图时,它正在取消所有警报。我每个待处理的意图都有其自己的唯一请求代码。

例如,我将其称为创建警报然后删除:

setAlarm(5062, 1453269670) // Set alarm 1
setAlarm(5063, 1453774418) // Set alarm 2

cancelAlarm(5062) // Cancel alarm 1
cancelAlarm(5063) // Cancel alarm 2

设置多级警报始终有效,我可以设置任意数量的警报,它们都会产生通知。但是,如果我要取消警报1,它也会同时取消警报2。

我知道在设置和取消时,挂起的意图必须相同,并且每个挂起的意图都有其自己的唯一请求代码,因此我不知道为什么它不起作用。我花了很多时间在谷歌上搜索,但是没有一个建议的答案对我有帮助。

void setAlarm(int request_code, long alarm_time) {
    Intent intent = new Intent(context, NotificationReceiver.class);
    intent.putExtra("request_code", request_code);
    PendingIntent pendingIntent = PendingIntent.getService(context, request_code, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarm_time, pendingIntent);
}

void cancelAlarm(int request_code) {
    Intent intent = new Intent(context, NotificationReceiver.class);
    intent.putExtra("request_code", request_code);
    PendingIntent pendingIntent = PendingIntent.getService(context, request_code, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    pendingIntent.cancel();
    alarmManager.cancel(pendingIntent);
}
java android alarmmanager
1个回答
0
投票

答案很简单

Intent firstIntent = new Intent(this, Receiver.class);
intent.setAction("action 1");
intent.putExtra("extra", "extra1");
firstPendingIntent = PendingIntent.getBroadcast(this, 0, firstIntent, 0);

Intent secondIntent = new Intent(this, Receiver.class);
intent.setAction("action 2");
intent.putExtra("extra", "extra2");
secondPendingIntent = PendingIntent.getBroadcast(this, 0, secondIntent, 0);

如果比较上面代码中创建的两个PendingIntent,则它们不相等

但是在下面的代码中:

Intent firstIntent = new Intent(this, Receiver.class);
intent.setAction("action 1");
intent.putExtra("extra", "extra1");
firstPendingIntent = PendingIntent.getBroadcast(this, 0, firstIntent, 0);
Intent secondIntent = new Intent(this, Receiver.class);
intent.setAction("action 1");
intent.putExtra("extra", "extra2");
secondPendingIntent = PendingIntent.getBroadcast(this, 0, secondIntent, 0);

如果比较两个PendingIntent,它们将相等,所以在putExtra方法中传递的内容无关紧要

© www.soinside.com 2019 - 2024. All rights reserved.