Thy*_*raz 35 cocoa-touch objective-c ios ios9
直到今天,我使用CaptiveNetwork接口显示当前连接的Wifi的名称.iOS 9 Prerelease参考已经说过,CaptiveNetwork方法现在被删除了,但它们仍然在开始时工作.
有了最新版本,Apple似乎已经阻止了这个电话(可能是出于隐私问题?).
有没有其他方法来获得当前Wifi的名称?
这就是我今天获得SSID的方式,但你现在只获得nil:
#import <SystemConfiguration/CaptiveNetwork.h>
NSString *wifiName = nil;
NSArray *interFaceNames = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *name in interFaceNames) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)name);
if (info[@"SSID"]) {
wifiName = info[@"SSID"];
}
}
Run Code Online (Sandbox Code Playgroud)
Pab*_* A. 31
将您的应用注册为Hotspot助手.
#import <NetworkExtension/NetworkExtension.h>
NSArray * networkInterfaces = [NEHotspotHelper supportedNetworkInterfaces];
NSLog(@"Networks %@",networkInterfaces);
Run Code Online (Sandbox Code Playgroud)
更新(2015年9月11日)
以下强制网络API已在最新版本的iOS 9中重新启用.
更新(2015年9月16日)
如果你仍然喜欢使用NetworkExtensionApple并且允许你添加权利,那么你可以这样做来获取wifi信息:
for(NEHotspotNetwork *hotspotNetwork in [NEHotspotHelper supportedNetworkInterfaces]) {
NSString *ssid = hotspotNetwork.SSID;
NSString *bssid = hotspotNetwork.BSSID;
BOOL secure = hotspotNetwork.secure;
BOOL autoJoined = hotspotNetwork.autoJoined;
double signalStrength = hotspotNetwork.signalStrength;
}
Run Code Online (Sandbox Code Playgroud)
NetworkExtension为您提供安全,自动加入或信号强度等额外信息.它还允许您在用户扫描wifis时在后台模式下将凭据设置为wifis.
lew*_*uez 10
在iOS 9的GM中,似乎再次启用它.实际上,它甚至没有在在线文档中列为已弃用,但CaptiveNetwork头文件确实具有以下内容:
CNCopySupportedInterfaces (void) __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_8, __MAC_NA, __IPHONE_4_1, __IPHONE_9_0, CN_DEPRECATION_NOTICE);
Run Code Online (Sandbox Code Playgroud)
所以,它在iOS 9 GM中工作,但不确定多久:)
小智 9
即使对于Swift 4.1和4.2,abdullahselek的答案仍然是正确的.
一个小小的警告,现在在iOS的12,你必须去你的应用项目的功能部分并启用访问无线网络信息的功能.它将为您的项目添加权利条目,并允许函数调用CNCopyCurrentNetworkInfo正常工作.
如果你不这样做,那个函数只返回nil.运行时不会显示有关丢失权利的错误或警告.
有关详细信息,请参阅Apple文档下面的链接.
https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo
确认在2017年4月27日,Captive Network仍然在努力Swift 3.1,XCode 8.3
对于Swift> 3.0
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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于Objective-C
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"]);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40803 次 |
| 最近记录: |