·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> OC-18.监听iPhone的网络状态

OC-18.监听iPhone的网络状态

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

使用系统的方法来监听网络状态


  • 系统的方法是通过通知机制来实现网络状态的监听
  • 实现网络状态监听的步骤

    • 定义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];