Как отменить определенный pendingIntent с определенным кодом запроса?

Я хочу сделать приложение, которое может ДОБАВЛЯТЬ, ПРОСМОТРЕТЬ И ОТМЕНЯТЬ будильник. Я разработал базу данных для этого. Просмотр и создание нового будильника работает отлично.

Но проблема в том, чтобы ОТМЕНИТЬ будильник. Все будильники устанавливаются одним и тем же pendingIntent с разными request_code. request_code берется из записей базы данных (т. е. поля ID). Если я использую метод cancel(pendingIntent), он отменит все тревоги. Но я просто хочу отменить определенный будильник с помощью определенного request_code. Вот мой код создания будильника:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, 0);
Intent intent = new Intent(this, d1_on.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, user_id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

Теперь, когда я нажимаю кнопку ОТМЕНА, он запрашивает user_id. Затем он удалит эту строку из базы данных. Все в порядке... но теперь я хочу остановить этот конкретный сигнал тревоги с помощью request_code, установленного на user_id.

Или, пожалуйста, объясните мне, как отменить pendingIntent, созданный в alarmActivity классе, через alarmReceiver класс.


person Akoder    schedule 12.03.2013    source источник


Ответы (1)


Воссоздайте pendingIntent так, как вы его изначально создали.

PendingIntent pendingIntent = PendingIntent.getActivity(this, user_id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

то вы можете отменить его с помощью

am.cancel(pendingIntent);
person codeMagic    schedule 12.03.2013
comment
не могли бы вы помочь мне решить эту stackoverflow.com/questions/51542099/ @codeMagic - person Zhu; 26.07.2018