Search code examples
androidandroid-alarms

Cancelled alarm is shown to be up


I have read questions on stackoverflow on how to check if an alarm exists for a pending intent.

I check if my alarm exists this way:

boolean alarmUp = (PendingIntent.getBroadcast(context, 0, 
    new Intent("com.my.package.MY_UNIQUE_ACTION"), 
    PendingIntent.FLAG_NO_CREATE) != null);

I set an alarm and check is it exist and then cancel the alarm. The alarm is actually cancelled but if run the above statement again, it still returns true.

I have registered the broadcast receiver statically in manifest.

My methods to set and cancel alarms are like this:

    public static void cancelRecurringAlarm(Context context, String intentAction) {
    Logger.mlog(DEBUG_TAG, "cancelRecurringAlarm called with intent " + intentAction);
    Intent reminder = new Intent();
    reminder.setClass(context, <receiverClassName>);
    reminder.setAction(intentAction);
    PendingIntent recurringReminder = PendingIntent.getBroadcast(context, 0, reminder, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarms.cancel(recurringReminder);
}

public static void setRecurringAlarm(String intentAction, Context context, long timeInMs) {
    Logger.mlog(DEBUG_TAG, "setRecurringAlarm called with intent " + intentAction);

    Intent reminder = new Intent();
    reminder.setClass(context,  <receiverClassName>);
    reminder.setAction(intentAction);
    PendingIntent recurringReminder = PendingIntent.getBroadcast(context, 0, reminder, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.RTC, timeInMs, AlarmManager.INTERVAL_DAY, recurringReminder);
}

Solution

  • You are getting the Boolean value always as true because you are cancelling the alarm not the pending intent.So cancel your pending intent recurringReminder.cancel() in cancelRecurringAlarm(). Then you will get the Boolean value as false after cancelling alarm