iOS網絡-06-監聽Iphone的網絡狀態

使用系統的方法來監聽網絡狀態


  • 系統的方法是通過通知機制來實現網絡狀態的監聽
  • 實現網絡狀態監聽的步驟
    • 定義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];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章