3

如何获取SSID(服务集标识符),我已经搜索了一段时间,但没有任何用处。有人可以帮忙吗?

但是,我在 ios7 中尝试了这段代码

-(NSString *)getWifiName{
    NSString *wifiName = @"Not Found";
    CFArrayRef myArray = CNCopySupportedInterfaces();
    if (myArray != nil) {
        CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
        if (myDict != nil) {
            NSDictionary *dict = (NSDictionary*)CFBridgingRelease(myDict);

            wifiName = [dict valueForKey:@"SSID"];
        }
    }
    NSLog(@"wifiName:%@", wifiName);
    return wifiName;
}

但它无法获取 SSID。

4

3 回答 3

3

(在 Xcode 8 和 Swift 3 上测试)首先你需要添加

@import SystemConfiguration.CaptiveNetwork;
#include <SystemConfiguration/SystemConfiguration.h>

那么objective-c代码是

- (NSString *) getSSID {
NSString *wifiName = nil;
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
    NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
    if (info[@"SSID"]) {
        wifiName = info[@"SSID"];
    }
}
return wifiName;}

如果要使用 swift,则需要在 bridging-header 中添加以下代码

#include <ifaddrs.h>

swift (swift 3) 的代码是

func fetchSSIDInfo() ->  String {
    var currentSSID = ""
    if let interfaces:CFArray = CNCopySupportedInterfaces() {
        for i in 0..<CFArrayGetCount(interfaces){
            let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces, i)
            let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
            let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString)
            if unsafeInterfaceData != nil {

                let interfaceData = unsafeInterfaceData! as Dictionary!
                currentSSID = ((interfaceData as? [String : AnyObject])?["SSID"])! as! String

            }
        }
    }
    return currentSSID
}
于 2017-04-09T17:59:55.610 回答
1

试试这个:(已编辑

- (NSString *)wifiName
{
    NSString *wifiName = @"Not Found";
    CFArrayRef interfaces = CNCopySupportedInterfaces();
    if (interfaces)
    {
        CFDictionaryRef networkDetails = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(interfaces, 0));
        if (networkDetails)
        {
            wifiName = (NSString *)CFDictionaryGetValue(networkDetails, kCNNetworkInfoKeySSID);
            CFRelease(networkDetails);
        }
    }

    return wifiName;
}
于 2014-08-12T08:38:54.583 回答
0
+ (NSString*)SSID
{
    NSArray* ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
    id info = nil;
    for (NSString* ifnam in ifs)
    {
        info = (__bridge id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
        if (info && [info count])
            break;
    }
    return info[@"SSID"];
}
于 2014-08-12T08:41:24.990 回答