Какао: определить доступность сети при пробуждении
Я пишу приложение Cocoa OS X, которое должно выполнять различные действия в зависимости от наличия подключения к Интернету, когда система выходит из спящего режима. Я использую центр уведомлений NSWorkspace.sharedWorkspace()
получать уведомления о пробуждении следующим образом:
NSWorkspace.sharedWorkspace().notificationCenter.addObserver(self, selector: "onSystemWake:", name: NSWorkspaceDidWakeNotification, object: nil)
Моя проблема заключается в реализации onSystemWake:
, Я использую пример кода Reachability для запроса, есть ли подключение к Интернету, когда система просыпается:
@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 доступен.
Я предполагаю, что причиной этого является то, что сетевое соединение все еще находится в процессе установления, когда мое приложение получает уведомление о пробуждении системы.
Я мог бы отложить проверку доступности интернета через x секунд после получения уведомления о пробуждении системы, но это кажется очень плохим решением, поскольку некоторые комбинации ноутбуков и сетей могут иметь более длительное время соединения, чем другие.
Есть ли способ получить уведомление, когда сетевые адаптеры (как проводные, так и беспроводные) закончили попытки подключения?
1 ответ
Было бы лучше заявить, что это за сеть! потому что, возможно, вы подключены к сети, которая является сетью! но это не связано с Интернетом!
для доступности интернета я использую код ниже, и он отлично работает для меня на 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 означает Интернет! если я могу связаться с google.com, это означает, что я все равно подключен к какой-то сети! но если нет, то нет!
проблема в том, что вы используете сеть, которая похожа на сеть компании, а сеть не предоставляет вам подключение к интернету! приведенный выше код не удовлетворит ваши потребности! в этом случае и, конечно, зависит от вашей сети, вы должны запросить что-то еще! как роутер!