在iOS中捕获Wi-Fi网络更改事件

Sha*_*aka 11 objective-c ios ios5 ios6

当用户连接到iOS应用程序中的特定WiFi网络时,是否有任何方法可以捕获事件.即使可以使用任何不需要超级用户权限(越狱)的私有库来实现这一点也很好.我只想捕获连接的SSID的变化事件.

MZi*_*an6 6

我建议只使用Larme发布的内容,并设置NSTimer来检查每一秒左右,当前网络的SSID是什么,如果您检测到更改,只需执行您需要做的任何事情.请记住,改变WiFi网络不是即时发生的事情,所以拥有1秒的分辨率也不错

applicationDidFinishLoading

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

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

这样的事情.我不能检查代码是否没有拼写错误,因为我不在mac前面,但它不应该太差异

  • @Andy我不确定NetworkReachability是否可以判断是否遇到了另一个网络SSID。另外,我发布的方法是我当时知道的方法。另外,一秒钟的分辨率仍然相当准确 (2认同)