我正在寻找一种方法来获取iOS5的objective-c中当前连接的wlan网络的信息(至少名称)。
我需要这个,因为我们正在开发一个在特定网络中不起作用的应用程序。在这个网络(在我们大学),我们需要连接到服务器的端口关闭。但是还有另一个网络可用,我们想告诉用户如果他连接到上述网络,他必须切换网络。
我甚至不知道从哪里开始。有没有人有想法或任何提示?
谢谢和问候
答案 0 :(得分:15)
从iOS> = 4.1,可以获取设备当前连接的无线网络的SSID。
为此,您将使用函数CNCopyCurrentNetworkInfo
有关实施的详细信息,请参阅SO:iPhone get SSID without private library
答案 1 :(得分:6)
可以从强制网络获取当前的wifi信息。在过去,苹果实际上已经禁用了一段时间,但由于强烈要求,他们似乎重新启用了它。他们也有可能在将来决定关闭它。
我们可以获得的信息是BSSID
,SSID
,SSIDDATA
。 BSSID
是wifi的唯一地址,SSID
是当前的wifi名称,SSIDDATA
是SSID
的十六进制表示。
func printCurrentWifiInfo() {
if let interface = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interface) {
let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interface, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
if let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString), let interfaceData = unsafeInterfaceData as? [String : AnyObject] {
// connected wifi
print("BSSID: \(interfaceData["BSSID"]), SSID: \(interfaceData["SSID"]), SSIDDATA: \(interfaceData["SSIDDATA"])")
} else {
// not connected wifi
}
}
}
}
NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *name in interFaceNames) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name);
NSLog[@"wifi info: bssid: %@, ssid:%@, ssidData: %@", info[@"BSSID"], info[@"SSID"], info[@"SSIDDATA"]];
}
答案 2 :(得分:6)
从iOS 12开始,您需要允许该功能中的Wifi信息访问权限。
来自Apple:
要在iOS 12及更高版本中使用此功能,请在Xcode中为您的应用启用访问WiFi信息功能。启用此功能后,Xcode会自动将Access WiFi Information授权添加到您的授权文件和App ID中。