使用系統的方法來監聽網絡狀態
- 系統的方法是通過通知機制來實現網絡狀態的監聽
- 實現網絡狀態監聽的步驟
-
定義Reachability類型的成員變量來保存網絡的狀態
@property (nonatomic, strong) Reachability *reachability;
-
註冊爲通知中心的的觀察者
// 在通知中心註冊觀察者 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil]; /** * getNetworkStatus:監聽到通知的回調方法 * kReachabilityChangedNotification:通知的類型,即網絡狀態發生改變時,觸發通知 * object:傳遞給getNetworkStatus回調方法的參數 */ // 獲取並保存網絡狀態 self.reachability = [Reachability reachabilityForInternetConnection]; // 開始監聽 [self.reachability startNotifier];
-
在監聽到通知的觸發方法中判斷網絡的狀態
- (void)getNetworkStatus { if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) { NSLog(@"是WIFI"); } else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) { NSLog(@"是手機自帶網絡"); } else { NSLog(@"網絡有問題"); } }
-
將觀察者從通知中心移除,停止監聽,清空網絡監聽對象
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [self.reachability stopNotifier]; self.reachability = nil; }
-
使用AFNetworking監聽網絡狀態
- 通過AFN監聽網絡狀態比較簡單
- 實現網絡狀態監聽的
-
獲取AFNetworkReachabilityManager的實例
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
-
設置manager在網絡發生變化的時回調的Block
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"----當前網絡狀態---%zd", status); }]; /** * status:表示當前網絡的狀態,是個枚舉類型變量,具有以下取值 * AFNetworkReachabilityStatusUnknown = -1 * AFNetworkReachabilityStatusNotReachable = 0 * AFNetworkReachabilityStatusReachableViaWWAN = 1 * AFNetworkReachabilityStatusReachableViaWiFi = 2 */
-
開始監聽
[manager startMonitoring];
-