Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clear app badge with local notifications

Tags:

I'm trying to clear my app's "unread" badge with a UILocalNotification. Logically you would think this would be done by setting applicationIconBadgeNumber of a UILocalNotification instance to 0. But it doesn't work, and the docs for applicationIconBadgeNumber say "The default value is 0, which means "no change.”"

So is there really no way to clear a badge with local notifications once it's been set?

Update: Some simple code:

-(void)applicationDidFinishLaunching {     // Set the appication icon badge to 1 in 10 minutes, using a local notification so it works in the background:     // This works fine.      UILocalNotification *episodeNotification = [[UILocalNotification alloc] init];     episodeNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:(60 * 10)];     episodeNotification.timeZone = [NSTimeZone defaultTimeZone];     episodeNotification.applicationIconBadgeNumber = 1;      [[UIApplication sharedApplication] scheduleLocalNotification:episodeNotification];     [episodeNotification release];       // Clear the application icon badge in 20 minutes, again using a local notifcation so it works in the background:     // This doesn't work.  According to the docs for local notification it's not supposed to     // because (applicationIconBadgeNumber = 0) means "Do not change the badge"     // I'm looking for an alternative if it exists.      UILocalNotification *clearEpisodeNotification = [[UILocalNotification alloc] init];     clearEpisodeNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:(60 * 20)];     clearEpisodeNotification.timeZone = [NSTimeZone defaultTimeZone];     clearEpisodeNotification.applicationIconBadgeNumber = 0;      [[UIApplication sharedApplication] scheduleLocalNotification:clearEpisodeNotification];     [clearEpisodeNotification release]; } 
like image 855
peterjb Avatar asked Mar 21 '11 08:03

peterjb


1 Answers

I had the same problem. When setting the badge from a local notification, setting it to 0 is the default for 'no change', while doing it straight from the application would clear it. Setting it to a negative number through a local notification solved the problem.

try:

clearEpisodeNotification.applicationIconBadgeNumber = -1; 
like image 99
Dave Avatar answered Sep 19 '22 13:09

Dave