zoukankan      html  css  js  c++  java
  • AFNetwork监听网络失效

    监听网络状态大家都不陌生,尤其是使用AFNetwork监听,

    我的思路是对AFNetwork进行二次封装,然后直接以属性的形式输出结果

    #pragma mark - 属性
    /// 网络状态
    @property (nonatomic, assign, readonly) NetworkState state;
    @interface NetworkStateTool ()
    @property (nonatomic, assign, readwrite) NetworkState state;
    @end
    #pragma mark -- 开启网络监听
    - (void)startNetworkStateMonitoring {
        
        AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
        //开启网络监听
        [mgr startMonitoring];
        
        [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusUnknown: // 未知网络
                    NSLog(@"未知网络");
                    self.state = NetworkStateUnknown;
                    break;
                    
                case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
                    NSLog(@"没有网络");
                    self.state = NetworkStateNone;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
                    NSLog(@"手机自带网络");
                    self.state = NetworkStateWWAN;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
                    NSLog(@"WIFI");
                    self.state = NetworkStateWiFi;
                    break;
            }
        }];
        
    }

    按照官方的说法,我们只需要调用一次startNetworkStateMonitoring方法,

    即只需要调用startMonitoring方法一次,即可在setReachabilityStatusChangeBlock中收到实时结果

    实测:

    WIFI--->断网 可以实时监测

    但是

    断网--->WIFI 无法实时监测,即setReachabilityStatusChangeBlock中收不到结果

    只有重新调用setReachabilityStatusChangeBlock方法,才可以拿到实时结果

    故修改代码如下:直接通过方法获取

    + (NetworkState)networkState {
        NetworkState __block state;
        AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
        [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusUnknown: // 未知网络
                    NSLog(@"未知网络");
                    state = NetworkStateUnknown;
                    break;
                    
                case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
                    NSLog(@"没有网络");
                    state = NetworkStateNone;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
                    NSLog(@"手机自带网络");
                    state = NetworkStateWWAN;
                    break;
                    
                case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
                    NSLog(@"WIFI");
                    state = NetworkStateWiFi;
                    break;
            }
        }];
        
        //开启网络监听
        [mgr startMonitoring];
        
        return state;
    }
  • 相关阅读:
    人类登月不可或缺 大型机半个世纪发展史
    宽带上网知识(如何进行上网流程配置,路由器上网配置)
    团队项目第二阶段——第二天
    用户体验评价之QQ浏览器
    团队项目第二阶段——第一天
    第十四周学习进度总结
    《梦断代码》阅读笔记02
    第十三周学习进度总结
    第一阶段意见评论
    第十二周学习进度总结
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14705812.html
Copyright © 2011-2022 走看看