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;
    }
  • 相关阅读:
    Android应用查看本地数据库
    C#导出和导入Excel模板功能
    数据库事务的四种隔离模式
    .NET进阶篇-丑话先说,Flag先立--致青春
    博客的第一天:回顾半年前的基础:SQL--基础查询+年月日格式+拼接
    【MySQL】你以为设置了并行复制就降低延迟了?这个你绝对想不到!
    中秋的月亮
    细看国产数据库,从根上知道如何学习?
    开篇2019
    Mysql学习笔记整理之数据库优化
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14705812.html
Copyright © 2011-2022 走看看