Swift實時監聽網路狀態(更新到Swift3)
阿新 • • 發佈:2018-11-27
最近做個專案,需要實時的監聽網路連線狀態,網路連線斷開時需要提醒使用者手動開啟網路,網路重新連線上之後需要做些操作。身為小白的我感到很有壓力,所以就不自覺的又上度娘那裡去取經了。(哈哈,初學者嘛,大家理解)自己整理下,加深下印象以後也方便用 :)
下面直入正題,如何實現實時監聽網路連線狀態:
第一步,需要引入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)
}
/********************************************** 網路狀態監聽部分(結束) **********************************************/
如果編譯無誤的話,執行程式後在電腦上輸出些內容,這是嘗試切換網路狀態試試,有沒有提示。我自己在真機上測試成功。
大家加油!