当用户连接到iOS应用中的特定WiFi网络时,是否有任何方法可以捕获事件。即使可以使用任何不需要超级用户权限(越狱)的私有库来实现这一点也很好。我只想捕获连接的SSID的变化事件。
答案 0 :(得分:6)
我建议只使用Larme发布的内容,并设置NSTimer来检查每一秒左右,当前网络的SSID是什么,如果您检测到更改,只需执行您需要做的任何事情。请记住,改变WiFi网络不是即时发生的事情,因此具有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前面,但它不应该太差异
答案 1 :(得分:2)
您可以从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>
答案 2 :(得分:1)
您需要SystemConfiguration,它具有查看各种网络更改通知的功能。