2016-04-01 3 views
2

Я планирую, чтобы локальное уведомление прекращалось через 6 минут, когда пользователь вводит определенную геолокацию, если они остаются в этом месте.Как я могу обновить/удалить уведомление из центра уведомлений?

Это планируется так:

UILocalNotification n = new UILocalNotification(); 
n.FireDate = NSDate.FromTimeIntervalSinceNow(360); 
n.AlertAction = "My notification"; 
n.AlertBody = "Notification body";  
UIApplication.SharedApplication.ScheduleLocalNotification(n); 

В некоторых случаях определенные geolocations накладываются друг на друга, и пользователь будет получать больше, чем одно уведомление. Когда это произойдет, я хотел бы иметь возможность обновлять уведомление в центре уведомлений, чтобы это отразить.

Мне сообщили, что прямое обновление в центр уведомлений невозможно в iOS9, поэтому для достижения того, что я хочу, мне нужно будет удалить уведомление и заменить его новым.

С нескольких часов работы в Интернете я нашел следующие методы, все из которых не работали.

UIApplication.SharedApplication.CancelAllLocalNotifications(); 

Эта функция, похоже, ничего не делает в текущей версии iOS.

UIApplication.SharedApplication.ApplicationIconBadgeNumber = 1; 
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 0; 

Некоторые упомянули, что номер значка должен быть сначала установлен, а затем сделан нуль для удаления уведомлений из центра уведомлений. Это также не имело никакого эффекта.

foreach(UILocalNotification n in UIApplication.SharedApplication.ScheduledLocalNotifications) 
{ 
    UIApplication.SharedApplication.CancelLocalNotification(n); 
} 

Для некоторых, которые обнаружили, что CancelAllNotifications не работали пробовали выше метод. Это также, казалось, не имело никакого эффекта. Если это помогает, я попробовал зарегистрировать счет ScheduledLocalNotifications, пока в центре уведомлений были уведомления, но массив вернулся пустым.

List<UILocalNotifications> notifications = new List<UILocalNotifications>(); 

... 

UIApplication.SharedApplication.ScheduleLocalNotification(n); 
notifications.Add(n); 

... 

foreach(UILocalNotification n in notifications) 
{ 
    UIApplication.SharedApplication.CancelLocalNotification(n); 
} 

Другой пользователь предложил ухватиться за оригинальные уведомления, а затем использовать их, чтобы отменить их, когда это необходимо для дальнейшего использования. Снова мне не повезло с этим.

Ответы в Objective-C или Swift также будут высоко оценены, я могу понять любой из этих языков.

+0

Хотите удалить конкретное уведомление или все другие уведомления о приложении из центра уведомлений – Chetan

+0

@Chetan Я хотел бы удалить все другие уведомления, которые пришли из моего приложения. – Kizari

+0

Вы пытаетесь удалить уведомления в фоновом режиме или переднем плане – Chetan

ответ

1

Ниже приведены методы для сохранения и удалите notificaiton
NoticationName ли просто любое имя, с тем чтобы признать уведомление удалить

#pragma mark - Remove Notification 

    - (void) removedStoredLocalNotificationAndCancelNotificationFromPanelOfType: (NSString*) notificationName 
    { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

     id storedObject = [defaults objectForKey: notificationName]; 

     if([storedObject isKindOfClass:[NSData class]]) 
     { 
      UILocalNotification* removeNotification = (UILocalNotification*)[NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)[defaults objectForKey:notificationType]]; 

      if(removeNotification) 
      { 
       [[UIApplication sharedApplication]cancelLocalNotification:removeNotification]; 
       [defaults removeObjectForKey: notificationName]; 
      } 
      removeNotification = nil; 
     } 
     else 
     { 
      [defaults removeObjectForKey: notificationName]; 
     } 


     defaults = nil; 

    } 

    #pragma mark -Save notification 
    - (void) saveNewLocalNotificationInUserDefaultsOfType: (NSString*) notificationName withLocalNotification: (UILocalNotification*)localNotification 
    { 

     //************* Check if previous Notification is Present. If YES remove it and show new notification with storing new data in userDefaults**************// 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     if(![defaults objectForKey:notificationName]) 
     { 
      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:localNotification]; 
      [defaults setObject:data forKey:notificationName]; 
      [defaults synchronize]; 
     } 
     else if ([defaults objectForKey:notificationName]) 
     { 

      // Remove previous notification 
      //Check if any observation notification is present.If YES remove it from user defaults if stored and cancel local notification 

      [self removedStoredLocalNotificationAndCancelNotificationFromPanelOfType:notificationName]; 

      //Store new notification 

      NSData *data = [NSKeyedArchiver archivedDataWithRootObject:localNotification]; 
      [defaults setObject:data forKey:notificationName]; 
      [defaults synchronize]; 
     } 

    } 
+0

Спасибо за это. К сожалению, это также не удаляло уведомления из центра уведомлений. Похоже, что уведомления не попадают в массив 'UIApplication.SharedApplication.ScheduledLocalNotifications', в первую очередь, поэтому, возможно, ни один из этих фрагментов не работает для их удаления. Я не понимаю, что могло бы произойти, но, поскольку я планирую уведомления через 'UIApplication.SharedApplication.ScheduleLocalNotification', которая является стандартной процедурой в iOS. – Kizari

+0

вы можете поделиться кодом, если это возможно. Если, я могу заглянуть в нее. – Chetan

Смежные вопросы