gpt4 book ai didi

android - 如何取消所有未决警报

转载 作者:行者123 更新时间:2023-11-29 17:49:38 26 4
gpt4 key购买 nike

在我的应用中,我想让用户删除他们设置的闹钟。

我是这样设置闹钟的:

    ArrayList<Long> alarmDates = DateAndTimeAssistant.turnReminderTimesIntoActualDates(reminderHolder);
alarms = new ArrayList<Alarm>();
for (long alarmDate : alarmDates) {
Alarm alarm = new Alarm();
alarm.setTimeInMiliseconds(alarmDate);
alarm.setReminderHolderId(reminderHolder);
alarm.setTitle("title");
alarm.setDescription("description");
alarms .add(alarm);
}

然后我将它们插入到 DB 和 onSuccess 中,我这样做:

DateAndTimeAssistant.addAlarmsToPushNotificationService(alarms);

这是那里发生的事情:

for (Alarm alarm : alarms) {
Calendar alarmCalendar = Calendar.getInstance();
alarmCalendar.setTimeInMillis(alarm.getTimeInMiliseconds());

Intent intent = new Intent(context, PushNotificationReceiver.class);
intent.putExtra("notificationTitle", alarm.getTitle());
intent.putExtra("notificationText", alarm.getDescription());


PendingIntent pendingIntent = PendingIntent.getBroadcast(context, (int) alarmCalendar.getTimeInMillis(), intent, 0); // The second arg is unique id

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); // Service.ALARM_SERVICE
alarmManager.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pendingIntent);
}

现在,在与开始这一切的 Activity 完全不同的 Activity 中,我想删除闹钟。

我在一篇文章中找到了如下一段代码:

        for (long alarmTime : alarms) { // This is the unique ID of the pendingIntent I created earlier
PendingIntent pIntent = PendingIntent.getBroadcast(a, (int) alarmTime, intent, PendingIntent.FLAG_CANCEL_CURRENT);

但我不知道在这里传递什么作为“Intent ”?

编辑:根据我得到的第一个答案,我像这样更改了代码:

Intent intent = new Intent(context, PushNotificationReceiver.class);

for (long alarmTime : alarms) { // This is the unique ID of the pendingIntent I created earlier
PendingIntent pIntent = PendingIntent.getBroadcast(a, (int) alarmTime, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}

但是在假定的删除之后警报仍然继续响起。还有什么可能出错?我现在意识到我没有对我创建的这个 PendingIntent 做任何事情。我应该用它做什么?

编辑 2:
现在我添加了一个警报管理器,我将未决的 Intent 传递给它,然后取消它们,但它仍然不起作用

        AlarmManager alarmManager = (AlarmManager) a.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(a, PushNotificationReceiver.class);
for (long alarmTime : alarms) {
PendingIntent pIntent = PendingIntent.getBroadcast(a, (int) alarmTime, intent, PendingIntent.FLAG_CANCEL_CURRENT);
// Cancel alarms
try {
alarmManager.cancel(pIntent);
} catch (Exception e) {
// Cant do anything about it.
}
}

最佳答案

您需要创建与创建警报时使用的相同的 Intent。注意比较Intents的时候会忽略extra,所以只需要

Intent intent = new Intent(context, PushNotificationReceiver.class);

关于android - 如何取消所有未决警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23936804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com