今天到公司,由自己的项目还没有空白状态的显示,想到要做一个手机所连接网络的判定,并达到实时监测的目的。了解到如果用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>