当用户连接到 iOS 应用程序中的特定 WiFi 网络时,是否有任何方法可以捕获发生的事件。即使这可以使用任何不需要超级用户权限(越狱)的私有库来实现,也可以。我只想捕捉连接的 SSID 的变化事件。
问问题
6129 次
3 回答
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 前,但应该不会有太大不同
于 2013-07-16T12:06:15.323 回答
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>
于 2015-04-10T18:49:22.890 回答
1
您需要SystemConfiguration,它具有查看各种网络更改通知的功能。特别是,您需要使用SCDynamicStoreSetNotificationKeys来侦听设备的更改,并使用SCNetworkConfiguration来获取有关可用接口的信息。
于 2013-12-11T01:46:01.933 回答