监测网络状态

  • 说明:可以使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变,也可以利用苹果提供的Reachability来监听。建议在开发中直接使用AFN框架处理。

  • 使用AFN框架来检测网络状态的改变

    //使用AFN框架来检测网络状态的改变
    -(void)AFNReachability
    {
        //1.创建网络监听管理者
        AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    
        //2.监听网络状态的改变
        /*
         AFNetworkReachabilityStatusUnknown          = 未知
         AFNetworkReachabilityStatusNotReachable     = 没有网络
         AFNetworkReachabilityStatusReachableViaWWAN = 3G
         AFNetworkReachabilityStatusReachableViaWiFi = WIFI
         */
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusUnknown:
                    NSLog(@"未知");
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                    NSLog(@"没有网络");
                    break;
                case AFNetworkReachabilityStatusReachableViaWWAN:
                    NSLog(@"3G");
                    break;
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    NSLog(@"WIFI");
                    break;
    
                default:
                    break;
            }
        }];
    
        //3.开始监听
        [manager startMonitoring];
    }
    
  • 使用苹果提供的Reachability来检测网络状态

    //使用苹果提供的Reachability来检测网络状态,如果要持续监听网络状态的概念,需要结合通知一起使用。
    //提供下载地址:https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        //1.注册一个通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChange) name:kReachabilityChangedNotification object:nil];
    
        //2.拿到一个对象,然后调用开始监听方法
        Reachability *r = [Reachability reachabilityForInternetConnection];
        [r startNotifier];
    
        //持有该对象,不要让该对象释放掉
        self.r = r;
    }
    
    //当控制器释放的时候,移除通知的监听
    -(void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    -(void)networkChange
    {
        //获取当前网络的状态
       if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus == ReachableViaWWAN)
        {
            NSLog(@"当前网络状态为3G");
            return;
        }
    
        if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == ReachableViaWiFi)
        {
            NSLog(@"当前网络状态为wifi");
            return;
        }
    
        NSLog(@"当前没有网络");
    }
    


results matching ""

    No results matching ""