在iOS中捕获Wi-Finetworking更改事件

当用户连接到iOS应用程序中的特定WiFinetworking时,是否有任何方法来捕获事件? 即使可以使用任何不需要超级用户权限(监狱rest)的私人图书馆也可以。 我只想捕捉连接的SSID的变化事件。

我build议简单地使用Larme发布的内容,并设置一个NSTimer来检查每一秒左右,当前networking的SSID是什么,如果你发现了一个变化,只要做你需要做的事情。 请记住,改变WiFinetworking并不是瞬间发生的事情,所以拥有1秒的分辨率并不差

applicationDidFinishLoading

 NSTimer *ssidTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(fetchSSIDInfo) userInfo:nil repeats:YES]; 

在AppDelegate中

 - (id)fetchSSIDInfo { NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces(); NSLog(@"Supported interfaces: %@", ifs); id info = nil; NSString *ifnam = @""; for (ifnam in ifs) { info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam); NSLog(@"%@ => %@", ifnam, info); if (info && [info count]) { break; } } if ([info count] >= 1 && [ifnam caseInsensitiveCompare:prevSSID] != NSOrderedSame) { // Trigger some event prevSSID = ifnam; } return info; } 

就是这样 我不能检查代码是否是免费的,因为我不是在Mac的前面,但它不应该是太不同

你可以从你的wifi连接获取详细信息:

 - (NSDictionary *)getConnectionDetails { NSDictionary *connectionDetails = [NSDictionary dictionary]; CFArrayRef myArray = CNCopySupportedInterfaces(); if (myArray) { CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0)); connectionDetails = (__bridge_transfer NSDictionary*)myDict; } return connectionDetails; } 

然后,如果检查[connectionDetails valueForKey:@"BSSID"]您将获得BSSID。

另请注意,您必须导入#import <SystemConfiguration/CaptiveNetwork.h>

你需要SystemConfiguration,它具有查看各种networking变化通知的function。