You wrote in a comment:
If you have multiple alarms and you want to cancel a few of them, then I
think we can cancel only through its PendingIntent
. That is the
reason why I am saving PendingIntent
. Is my approach right for this?
No. This isn't the right approach to solve this problem.
Yes, you'll need to provide a PendingIntent
to AlarmManager.cancel()
. However, you don't need to save the PendingIntent
in a persistent store. What you need to do is to save enough information in the persistent store so that you can recreate the PendingIntent
.
To recreate the PendingIntent
you just do this:
Intent intent = new Intent(context, MyActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, intent, PendingIntent.NO_CREATE);
if (pendingIntent != null) {
alarmManager.cancel(pendingIntent); // cancel alarm
pendingIntent.cancel(); // delete the PendingIntent
}
I've used an Activity
in the example code, but you can also use a Service
or BroadcastReceiver
, whatever you are using in your code.
You do NOT need to add any extras to the Intent
if you just want to use it to cancel an existing alarm.
If you have multiple alarms, the Intent
s must be unique. You just need to save whatever you are using to make them unique (requestCode
, or Intent
ACTION, or whatever) and then use the same parameters to recreate the PendingIntent
when you want to cancel the alarms.