descargar caracteristicas ios ios7

ios - caracteristicas - UILocalNotification no detiene el sonido cuando la aplicación se pone en primer plano al deslizar sobre la alerta



ios 8 (2)

Cuando mi aplicación recibe un mensaje de red en segundo plano, crea una UILocalNotification con sonido e invoca el presenteLocalNotificationNow.

UILocalNotification* localNotif = [[UILocalNotification alloc] init]; localNotif.alertBody = [NSString stringWithFormat:@"%@: /r%@ /r%@", NSLocalizedString(@"XXXXXXXXXXX", nil), XXXXX, XXXXXXXXXXX]; localNotif.alertAction = NSLocalizedString(@"View", nil); localNotif.soundName = [NSString stringWithFormat:@"%@.%@", XXXXTONE_LONGVERSION_FILENAME, XXXXTONE_FILENAME_EXT]; [[UIApplication sharedInstance] presentLocalNotificationNow:localNotif]; [localNotif release];

Esta alerta se muestra con sonido como se esperaba. Pero tengo problemas para detener el sonido en algunos casos.

1) Cuando hay bloqueo de pantalla y se muestra esta alerta de notificación local:

  • si el usuario desbloquea la pantalla deslizando la alerta, el sonido NO se detiene.
  • si el usuario desbloquea la pantalla deslizando "> deslizar para desbloquear", detiene el sonido.

2) Cuando la aplicación está en segundo plano sin bloqueo de pantalla, el sonido de alerta se detiene normalmente cuando la aplicación aparece en primer plano.

Cancelo las notificaciones locales programadas cuando la aplicación aparece en primer plano en didReceiveLocalNotification y applicationDidBecomeActive.

application.applicationIconBadgeNumber = 0; [application cancelAllLocalNotifications];


En su AppDelegate en didFinishLaunchingWithOptions , obtiene su Notificación así:

UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; if (localNotif) { // do something with it }

Verifique, si puede detener la alerta desde allí con cancelLocalNotification:


Es un error conocido de iOS7 que es tan molesto como el infierno.
Tendrá exactamente el mismo problema si usa notificaciones remotas.

La solución para esto es cambiar el número de la insignia de la aplicación dos veces, con al menos un paso al valor 0. Tengo este método en mi aplicación para eso:

- (void)fixRing{ if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { // iOS7 fix for notification sound not stopping. // see http://.com/questions/19124882/stopping-ios-7-remote-notification-sound [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1]; [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; } }

No se olvide de actualizar el recuento de la insignia al valor real a veces después.

EDITAR: en realidad, esto no funciona para notificaciones locales , sino solo para notificaciones remotas (push). [application cancelAllLocalNotifications]; no funciona, tampoco lo hace [application cancelLocalNotification:notif]; ...
Este es un error que le informé a Apple, y está en "proceso" al momento de escribirlo.
He intentado muchas soluciones (inserte un notif con un sonido pequeño para borrar el sonido largo, use un temporizador y reitere la notificación con un sonido más corto en lugar de dejarlo demorar 30 segundos, etc.) pero ninguno funcionó.

Tenga en cuenta que Google Hangout parece sufrir este problema también ... así que supongo que no hay una solución real.