iOS使用AFNetWorking第三库检测网络连接状态

时间:2021-05-31 15:19:51

今天到公司,由自己的项目还没有空白状态的显示,想到要做一个手机所连接网络的判定,并达到实时监测的目的。了解到如果用iOS自带的Reachability类来实现的话不太方便,因为要保证它处于实时监听的状态,而且在得到当前的网络状态之后就要发送全局通知,出于这样的考虑,决定使用AFNetWorking框架中的AFNetworkActivityIndicatorManager单例类来进行网络状态的实时监听。

以下是具体实现方法:

首先,要引入 AFNetWorking.h 文件,在 AppDelegate 的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中调用以下函数:

-(void)isNetWorking{

//开启网络指示器,开始监听
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

// 检测网络连接的单例,网络变化时的回调方法
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {


}];
}

再就是在需要监测网络状态控制器中,在 - ( void )viewDidLoad方法中注册通知的观察者:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notifi:) name:AFNetworkingReachabilityDidChangeNotification object:nil]
</pre><pre name="code" class="objc" style="font-size:14px;">最后,实现notifi:的方法:
- (void)notifi:(NSNotification *)noti{        NSDictionary *dic = noti.userInfo;    //获取网络状态    NSInteger status = [[dic objectForKey:@"AFNetworkingReachabilityNotificationStatusItem"] integerValue];        switch (status) {        case AFNetworkReachabilityStatusNotReachable:{                        NSLog(@"无网络连接");        }            break;        case AFNetworkReachabilityStatusReachableViaWWAN:{                        NSLog(@"移动蜂窝网络");        }            break;        case AFNetworkReachabilityStatusReachableViaWiFi:{                        NSLog(@"wifi网络");        }            break;        case AFNetworkReachabilityStatusUnknown:{                        NSLog(@"无法获取网络状态");        }            break;        default:            break;    }}
</pre><pre name="code" class="objc">还有需要注意一点,不要忘记注销观察者,代码如下:
-(void)dealloc{        [[NSNotificationCenter defaultCenter] removeObserver:self];}
</pre><span style="font-size:18px">这样就可以实现实时监控网络连接状态的目的了.</span><span style="font-size:14px"></span><pre>