wifi网络改变时的iPhone通知

Jon*_*an. 8 iphone jailbreak wifi ios

这是一个调整,所以目标是越狱设备,而不是应用程序商店.我尝试过挂钩不同的方法,SBWiFiManager但是当wifi强度发生变化(如此连续)或者在网络发生变化后相当延迟之后,它们会被调用.

有没有其他方法来获取通知(或其他方法挂钩)去了wifi网络改变?

我知道你现在可以使用公共API获取当前的SSID,但我需要告知它何时发生变化.

Nat*_*ate 16

一种方法是com.apple.system.config.network_change从Core Foundation Darwin通知中心收听事件.

注册活动:

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

这是一个示例回调:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,请参阅关于如何使用Captive Network API获取当前SSID的另一个答案的链接.

请注意,虽然我测试过的手机是越狱(iOS 6.1),但我认为这不需要越狱才能正常工作.它当然不需要将应用程序安装在正常的沙箱区域(/var/mobile/Applications/*)之外.

PS我没有详尽地测试这个事件,以了解此事件是否给出任何误报(基于您对网络更改的定义).但是,只要存储一些状态变量(等于最后一个网络的SSID),并且只要此事件发生,就将其与当前变量进行比较,这很简单.

  • @Jonathan,你能问一个新的问题吗,询问用于确定使用哪些通知的一般技术?我问,不仅仅是因为我想要争取更多的重复点,而是因为(a)我无法在评论中找到答案,而且(b)如果对于其他人,它将更有用(和可搜索).问题适当地标题,标记和描述.评论不仅仅是简短的回复.您当然可以*将*链接到这个问题,作为具体这些技术的一个例子. (3认同)