12

UILocalNotification通知トレイからプログラムで削除/非表示にする方法はありますか? から通知を削除する通知をキャンセルできます

[[UIApplication sharedApplication] scheduledLocalNotifications]

これが私がしなければならないことです

UILocalNotificationアクションが実行された後 (つまり、ユーザーが通知をタップした後) に NotificationTrayを閉じる必要があります。

編集: から通知を削除できNSNotificationCenterます。通知トレイから特定の通知を削除したい.ユーザーがクリアボタンを押して、特定のアプリケーションに属するすべての通知をクリアするように.

4

7 に答える 7

6

同様の問題があったと思います。アプリがフォアグラウンドに入ったとき、過去の通知をクリアして、通知トレイから古い通知を削除しようとしました。

古い通知を取得して削除するために、次のようなことを行いました。

NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
NSArray *pastNotifications = [activeNotifications filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"firDate < %@", [NSDate date]]];
for (UILocalNotification *notification in pastNotifications) {
    [[UIApplication sharedApplication] cancelLocalNotification:notification];
}

ただし、scheduledLocalNotifications通知センターに表示されていても、すでに発火日が過ぎている場所は含まれていないようです.

電話cancelAllLocalNotificationsをかけると、過去の通知も削除されるようです。したがって、現在のすべての通知を取得し、すべてをキャンセルしてから、まだ関心のある通知を追加し直すことができます。

// Grab all the current notifications
NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];

// Clear all notifications to remove old notifications
[[UIApplication sharedApplication] cancelAllLocalNotifications];

// Add back the still relevant notifications
for (UILocalNotification *notification in activeNotifications) {
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
}

さらに、不要になった通知を追加する前に、通知のフィルタリングを行うことができます。また、アプリがアクティブになったときにアクティブな通知を取得し、それらをインスタンス変数に格納して、アプリが背景

于 2014-01-13T16:00:15.053 に答える
2
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

いくつかのトリックも行います

ただし、applicationIconBadgeNumber を使用しなかった場合は機能しないため、最初に applicationIconBadgeNumber を設定します:)

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
于 2013-01-03T16:06:40.873 に答える
1
// deletes a pushnotification with userInfo[id] = id
-(void)deleteLocalPushNotificationWithId:(NSString*)id{
  for(UILocalNotification *notification in [[UIApplication sharedApplication] scheduledLocalNotifications]){
    if([[notification.userInfo objectForKey:@"id"] isEqualToString:id]){
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
    }
  }
}

// deletes all fired pushnotifications
-(void)clearLocalPushNotifications{
  NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];

  // Clear all notifications to remove old notifications
  [[UIApplication sharedApplication] cancelAllLocalNotifications];

  // Add back the still relevant notifications
  for (UILocalNotification *notification in activeNotifications) {
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
  }
}
于 2014-10-04T14:09:17.187 に答える
1

私はいくつかのコードをいじっていましたが、アプリケーションがフォアグラウンドにある場合、ローカル通知が通知センターに保存されるのはなぜだろうと思っていました. それはおそらく、Apple があなたが彼らに対して何をしているのかを知らず、正直なところ気にしていないからでしょう。だから彼らは仕事をします。

質問に関する限り、私は次のことを行います。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    if (application.applicationState == UIApplicationStateActive)
    {
        NSLog(@"active");

        // display some foreground notification;
        [application cancelLocalNotification:notification];
    }
    else
    {
        NSLog(@"inactive");
    }
}
于 2015-05-22T17:57:23.880 に答える
1

アプリケーションが実行されていない場合は、ローカル通知オブジェクトを受信します。

-applicationDidFinishLaunchingWithOptions:

お気に入り:

UILocalNotification *localNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey];

それ以外の場合は、それを取得できます

  • (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)通知

これで、通知センターから削除できます

[[UIApplication sharedApplication] cancelLocalNotification:notificationToCancel];

于 2013-01-03T16:28:15.740 に答える
0

したがって、ユーザーが通知ではなくアプリアイコンをクリックしてアプリを開いた場合、通知センターから既に発生したすべてのローカル通知を閉じる/削除する方法について、このスレッドを読みました。しかし、このすべての後、他のスケジュールされたローカル通知が将来発生するはずです。

アプリケーションがアクティブになったときにトリガーする必要がある、これに対する私の簡単な解決策は次のとおりです。

UIApplication* application = [UIApplication sharedApplication];
NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications];
application.scheduledLocalNotifications = scheduledNotifications;

[[UIApplication sharedApplication] cancelLocalNotification:notification]; を試しました。ただし、通知センター (アプリの外部) から既に発生したローカル通知はクリアされませんでした。

于 2018-04-27T14:30:59.337 に答える