Какао: определить доступность сети при пробуждении

Я пишу приложение 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, это означает, что я все равно подключен к какой-то сети! но если нет, то нет!

проблема в том, что вы используете сеть, которая похожа на сеть компании, а сеть не предоставляет вам подключение к интернету! приведенный выше код не удовлетворит ваши потребности! в этом случае и, конечно, зависит от вашей сети, вы должны запросить что-то еще! как роутер!

Другие вопросы по тегам