1

ユーザーのアラートスタイルがバナーに設定されている場合。クリアするように求められることなく、複数の通知を受け取ることができます。それから彼らは彼らの電話を使いに行きます、そして彼らは3つを保存したと言います。最新のものをクリックしてアプリを開く場合は、この1つの通知だけをクリアしたいので、移動する必要がありますbadgeCount--;

以下のコードでどのようにそれを達成できますか?(現時点では、不要なものをすべてクリアするように設定されています...)バッジ番号が更新されることもあることに気づきました。しかし、iOSのホーム画面に戻って通知メニューをプルダウンしても、まだそこにあります。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if([[userInfo valueForKey:@"aps"] valueForKey:@"alert"] != nil) {
        NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
        if(message != nil) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Usage Alert"
            message:message  delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
            [alertView show];
            [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
            [[UIApplication sharedApplication] cancelAllLocalNotifications];

        }
    }
}
4

3 に答える 3

5
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{


 UIApplication *app = [UIApplication sharedApplication];
 NSInteger badgeNumber = [app applicationIconBadgeNumber];// Take the current badge number
 badgeNumber--;    // decrement by one 
 [app setApplicationIconBadgeNumber:badgeNumber];  // set ne badge number
 [app cancelLocalNotification:notification];    // cancel the received notification. It will clear the notification from banner alos
}
于 2013-02-26T04:42:33.867 に答える
1

あなたは付け加えられます

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

アプリのデリゲートに。これが呼び出され、そこで使用できます

[[UIApplication sharedApplication] cancelLocalNotification:notification]; 

特定の通知を削除し、バッジ数を減らします。

于 2013-02-26T03:03:27.220 に答える
1

電話しないように注意したい

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:bg_NUM]

から

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

方法!

バッジ番号を含むスケジュールされたローカル通知の場合、バッジは-didReceiveLocalNotification に入力してから数ミリ秒後に非同期に設定されます

サンプル用:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    // ^^^ maybe not reset badge to 0!! ^^^
}

別のコード:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    sleep(1); //waiting for system is set our scheduled badge
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    // ^^^ most chances for reset badge to 0 ^^^
}

コードをテストし、スクリーン タッチでローカル通知をスケジュールし、システムが実際にバッジを設定するまでの遅延を計算します。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    UILocalNotification *localNotif = [[[UILocalNotification alloc] init] autorelease];
    localNotif.applicationIconBadgeNumber = rand()%100+1;
    localNotif.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
}
[...]
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
    while ([UIApplication sharedApplication].applicationIconBadgeNumber == 0) sleep(0);
        NSLog(@"badge set: %d   after %f sec.", [UIApplication sharedApplication].applicationIconBadgeNumber, CFAbsoluteTimeGetCurrent()-startTime);
}

出力:

badge set: 41   after 0.000839 sec.
badge set: 9   after 0.000754 sec.
badge set: 56   after 0.076026 sec.
badge set: 17   after 0.069889 sec.
badge set: 8   after 0.056245 sec.
badge set: 71   after 0.120729 sec.
badge set: 28   after 0.122720 sec.
badge set: 17   after 0.000758 sec.

このテストは、さまざまなデバイスの iOS 4.2/4.3/5.0/6.1 で行われました

-didReceiveLocalNotification メッセージでバッジ番号をリセットするときは注意してください。 (これは LocalNotification の場合にのみ当てはまり、/リモート プッシュではなく/、受信時にアプリケーションがアクティブな場合にのみ当てはまります)

于 2013-08-22T21:12:22.677 に答える