Я опубликую пример с тем, как я это сделал в одном из приложений, которые я создал.
При вызове будильника необходимо отправить дополнительный идентификатор, подобный следующему: Tmp - это объект, имеющий уникальный идентификатор.
Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class);
intent.setData(Uri.parse("timer:"+tmp.getId()));
PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
и затем вы получаете идентификатор с этой строкой:
Long.parseLong(intent.getData().getSchemeSpecificPart())
При отмене просто создайте то же самое ожидающее намерение с идентификатором и вызовите alarmmanager.cancel ()
Редактировать:
Чтобы отменить конкретную тревогу для элемента, по которому щелкнул пользователь (здесь пригодится tmp.getId) Я только что использовал этот код, я думаю, вам нужно создать такой же pendingIntent, чтобывозможность отменить конкретную тревогу.
Intent intent = new Intent(DisplayActivity.this,AlarmReciever.class);
intent.setData(Uri.parse("timer:"+tmp.getId()));
PendingIntent pendingIntent = PendingIntent.getBroadcast(DisplayActivity.this,1, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(pendingIntent);
AlarmReciever - это мой BroadcastReceiver.DisplayActivity - это сама деятельность.
Это в AlarmReciever У меня есть следующий код:
Long.parseLong(intent.getData().getSchemeSpecificPart())