gpt4 book ai didi

swift - 检测以太网/wifi 网络变化

转载 作者:IT王子 更新时间:2023-10-29 05:35:55 24 4
gpt4 key购买 nike

我想检测网络何时从以太网变为 wifi(或 wifi 变为以太网)。我希望有一个观察者通知我这个变化。

可达性不够好 - 对于这两种情况,它总是返回 ReachableViaWiFi。

附言-之前有一些关于这个主题的问题,但没有一个有很好的答案,而且由于这些问题已有一年多了,也许有人已经找到了如何去做

最佳答案

您可以通过 SystemConfiguration 访问系统网络首选项模块,可帮助您接触系统首选项存储当前位于默认位置 /Library/Preferences/SystemConfiguration/preferences.plist .

从那时起,您可以收到来自 SCDynamicStore 的通知通过 SCDynamicStoreNotifyValue(_:_:)或通过 SCDynamicStoreCopyValue(_:_:) 检索值.

直接查询当前主网络服务示例:

var store = SCDynamicStoreCreate(nil, "Example" as CFString, nil, nil)
var global = SCDynamicStoreCopyValue(store, "State:/Network/Global/IPv4" as CFString)!

var pref = SCPreferencesCreate(nil, "Example" as CFString, nil)
var service = SCNetworkServiceCopy(pref!, global["PrimaryService"] as! CFString)
var interface = SCNetworkServiceGetInterface(service!)

SCNetworkInterfaceGetInterfaceType(interface!) /// Optional("IEEE80211") -> Wi-Fi

或者创建带有回调的动态存储并设置通知键以接收通知,因为每次主要网络服务更改时都会触发通知:

var callback: SCDynamicStoreCallBack = { (store, _, _) in
/* Do anything you want */
}
var store = SCDynamicStoreCreate(nil, "Example" as CFString, callback, nil)
SCDynamicStoreSetNotificationKeys(store!, ["State:/Network/Global/IPv4"] as CFArray, nil)

关于swift - 检测以太网/wifi 网络变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41590562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com