Swift實時監聽網絡狀態(更新到Swift4)

最近項目裏有個新需求,需要實時的監聽網絡連接狀態,網絡連接斷開時需要提醒用戶手動打開網絡,網絡重新連接上之後需要做些操作。

如何實現實時監聽網絡連接狀態?

第一步,需要引入Reachability.swift文件

下載鏈接:https://github.com/ashleymills/Reachability.swift

使用方法:
Just drop the Reachability.swift file into your project. That’s it! (直接找到Reachability.swift文件拖到你的項目中就可以啦。)
這裏寫圖片描述

第二步,進入到ViewController文件

     /********************************************** 網絡狀態監聽部分(開始) **********************************************/
    // Reachability必須一直存在,所以需要設置爲全局變量
    let reachability = Reachability()!
    
    func NetworkStatusListener() {
        // 1、設置網絡狀態消息監聽 2、獲得網絡Reachability對象
        NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged),name: ReachabilityChangedNotification,object: reachability)
        do{
            // 3、開啓網絡狀態消息監聽
            try reachability.startNotifier()
        }catch{
            print("could not start reachability notifier")
        }
    }
    
    // 移除消息通知
    deinit {
        // 關閉網絡狀態消息監聽
        reachability.stopNotifier()
        // 移除網絡狀態消息通知
        NotificationCenter.default.removeObserver(self, name: ReachabilityChangedNotification, object: reachability)
    }
    
    // 主動檢測網絡狀態
    func reachabilityChanged(note: NSNotification) {
        
        let reachability = note.object as! Reachability // 準備獲取網絡連接信息
        
        if reachability.isReachable { // 判斷網絡連接狀態
            print("網絡連接:可用")
            if reachability.isReachableViaWiFi { // 判斷網絡連接類型
                print("連接類型:WiFi")
                // strServerInternetAddrss = getHostAddress_WLAN() // 獲取主機IP地址 192.168.31.2 小米路由器
                // processClientSocket(strServerInternetAddrss)    // 初始化Socket並連接,還得恢復按鈕可用
            } else {
                print("連接類型:移動網絡")
                // getHostAddrss_GPRS()  // 通過外網獲取主機IP地址,並且初始化Socket並建立連接
            }
        } else {
            print("網絡連接:不可用")
            DispatchQueue.main.async { // 不加這句導致界面還沒初始化完成就打開警告框,這樣不行
                self.alert_noNetwrok() // 警告框,提示沒有網絡
            }
        }
    }
    
    // 警告框,提示沒有連接網絡 *********************
    func alert_noNetwrok() -> Void {
        let alert = UIAlertController(title: "系統提示", message: "請打開網絡連接", preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "確定", style: .default, handler: nil)
        alert.addAction(cancelAction)
        self.present(alert, animated: true, completion: nil)
    }
    /********************************************** 網絡狀態監聽部分(結束) **********************************************/

已在真機上測試成功,切換網絡狀態時控制檯能輸出對應的Log。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章