我正在编写一个Cocoa应用程序,它需要执行不同的操作,这取决于当系统从睡眠中醒来时是否存在互联网连接。我使用NSWorkspace.sharedWorkspace()的通知中心接收如下所示的唤醒通知:
NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "onSystemWake:", name: NSWorkspaceDidWakeNotification, object: nil)我的问题是onSystemWake:的实现。当系统唤醒时,我使用可达性示例代码来查询是否存在internet连接:
@objc func onSystemWake(notif: NSNotification) {
let status = internetReachability.currentReachabilityStatus()
if status.value == NotReachable.value {
// Internet not reachable, do some stuff.
} else {
// Internet reachable, do some other stuff.
}
}当我在家的时候,把我的笔记本电脑放在睡梦中,然后再一次唤醒它,这似乎是很好的。然而,如果笔记本电脑在睡眠期间切换到另一个已知的WiFi (例如,当我到达我的大学时),上面的代码会检测到,当笔记本在新的位置从睡眠中醒来时,就没有互联网可达性--尽管实际上有一个已知的WiFi可用。
我假设造成这种情况的原因是,当我的应用程序接收到系统唤醒通知时,网络连接仍在建立过程中。
在收到系统唤醒通知后,我可以将internet可达性检查延迟x秒钟,但这似乎是一个非常糟糕的解决方案,因为一些膝上型计算机和网络组合的连接时间可能比其他的要长。
当网络适配器(有线和无线)完成连接尝试后,是否有一种通知方式?
发布于 2015-08-05 13:35:04
最好是宣称它是什么网络!因为也许你是连接到一个网络,这是一个网络!但它并没有连接到互联网!
对于互联网可达性,我使用下面的代码,它对我在iOS上工作很好!
let domain: NSURL = NSURL(string : "http://google.com/")!
let req : NSMutableURLRequest = NSMutableURLRequest(URL: domain)
req.HTTPMethod = "POST"
let data = "\0"
req.HTTPBody = data.dataUsingEncoding(NSUTF8StringEncoding)
NSURLConnection.sendAsynchronousRequest(req, queue: NSOperationQueue.mainQueue())
{
(respons,data,error) in
print(respons)
if respons == nil
{
\\ Internet is not Active!!
}
else
{
\\ Internet is Active!!
}
}上面的代码是说谷歌意味着互联网!如果我能到达google.com,那就意味着我已经连接到某个网络了!但如果不是我就不会了!
问题是,如果你使用的是一个网络,这就像一个公司的网络,而网络并没有为你提供一个互联网连接!以上代码不能满足您的需要!在这种情况下,当然取决于您的网络,您必须要求其他的东西!就像路由器!
https://stackoverflow.com/questions/31832254
复制相似问题