当前位置:  开发笔记 > 编程语言 > 正文

检测以太网/ wifi网络变化

如何解决《检测以太网/wifi网络变化》经验,为你挑选了1个好方法。

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

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

PS - 之前有一些关于这个话题的问题,但是没有一个问题有好的答案,而且由于这些问题已经超过一年了,也许有人已经知道如何去做



1> legendecas..:

您可以通过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)

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有