Notificación de iPhone cuando cambia la networking Wi-Fi

Esto es para un ajuste , por lo que el objective es dispositivos con jailbreak y no la tienda de aplicaciones. He intentado conectar diferentes methods en el SBWiFiManager pero son llamados cuando la intensidad de Wi-Fi cambia (tan continuamente) o después de bastante time después de que la networking ha cambiado.

¿Hay alguna otra forma de get una notificación (u otro método para enganchar) los cambios en la networking wifi?

Sé que puedes get el SSID actual con API públicas ahora, pero necesito que me lo digan cuando cambie.

Una forma de hacerlo es escuchar el evento com.apple.system.config.network_change del centro de notifications de Core Foundation Darwin.

Regístrese para el evento:

 CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center NULL, // observer onNotifyCallback, // callback CFSTR("com.apple.system.config.network_change"), // event name NULL, // object CFNotificationSuspensionBehaviorDeliverImmediately); 

Aquí hay una muestra de callback:

 static void onNotifyCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { NSString* notifyName = (NSString*)name; // this check should really only be necessary if you reuse this one callback method // for multiple Darwin notification events if ([notifyName isEqualToString:@"com.apple.system.config.network_change"]) { // use the Captive Network API to get more information at this point // https://stackoverflow.com/a/4714842/119114 } else { NSLog(@"intercepted %@", notifyName); } } 

Consulte mi enlace a otra respuesta sobre cómo utilizar la API de networking cautiva para get el SSID actual, por ejemplo.

Tenga en count que, aunque el teléfono en el que probé esta información es jailbroken (iOS 6.1), no creo que esto requiera que jailbreaking funcione correctamente. Ciertamente, no requiere que la aplicación se instale fuera del área de zona de testing normal ( /var/mobile/Applications/* ).

PD: No lo he probado exhaustivamente para saber si este evento proporciona falsos positivos (según su definición de cambio de networking). Sin embargo, es bastante simple simplemente para almacenar una variable de estado, igual al SSID de la última networking, y compararla con la actual, cada vez que entra este evento.