最近項目裏有個新需求,需要實時的監聽網絡連接狀態,網絡連接斷開時需要提醒用戶手動打開網絡,網絡重新連接上之後需要做些操作。
如何實現實時監聽網絡連接狀態?
第一步,需要引入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)
}
/********************************************** 網絡狀態監聽部分(結束) **********************************************/