如何获取当前网络位置名称?

3

在系统网络偏好设置中,有一些位置名称。如何获取当前或活动的网络位置名称和所有网络位置列表?
我猜想SystemConfiguration.framework支持此功能,但我不确定要使用哪个API。

感谢您提前回答。

敬礼
Devara Gudda

2个回答

7
您可以使用 SCPreferencesCreate 来获取首选项,然后使用 SCNetworkSetCopyAll 来获取仅网络位置。 使用SCNetworkSetGetName 将获取位置的名称。
SCPreferencesRef prefs = SCPreferencesCreate(NULL, @"SystemConfiguration", NULL);
NSArray *locations = (NSArray *)SCNetworkSetCopyAll(prefs);
for (id item in locations) {
    NSString *name = (NSString *)SCNetworkSetGetName((SCNetworkSetRef)item);
    ...
}
CFRelease(locations);
CFRelease(prefs);

阅读 "系统配置编程指南" 以获取更多信息。


谢谢,它正在工作。 我正在使用SCNetworkSetCopyCurrent来获取当前的网络位置。 - Raviprakash

1
这是一个Swift 5.1的实现,用于获取所有可用网络位置列表。
    func getAvailabeNetworkLocation() -> [String]
{
    var results = [String]()

    
    var prefs : SCPreferences
    prefs = SCPreferencesCreate (nil, "Softech" as CFString, nil)!
    var sets : CFArray
    sets = SCNetworkSetCopyAll (prefs)!
    
    let count = CFArrayGetCount(sets) as Int
    var newSet : SCNetworkSet? = nil
    var bFound : Bool = false
    
   

    
    for nIndex  in 0..<count {
     let mySet = CFArrayGetValueAtIndex (sets, nIndex)
     let key = Unmanaged<SCNetworkSet>.fromOpaque(mySet!)
        newSet = key.takeUnretainedValue()
        let name : String = SCNetworkSetGetName(newSet!)! as String
        print("Network location name: \(name)")
     results.append(name)
    }
    return results
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接