使用系统的方法来监听网络状态
- 系统的方法是通过通知机制来实现网络状态的监听
-
实现网络状态监听的步骤
-
定义Reachability类型的成员变量来保存网络的状态
@property (nonatomic, strong) Reachability *reachability;
-
注册为通知中心的的观察者
// 在通知中心注册观察者 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil]; /** * getNetworkStatus:监听到通知的回调方法 * kReachabilityChangedNotification:通知的类型,即网络状态发生改变时,触发通知 * object:传递给getNetworkStatus回调方法的参数 */ // 获取并保存网络状态 self.reachability = [Reachability reachabilityForInternetConnection]; // 开始监听 [self.reachability startNotifier];
-
在监听到通知的触发方法中判断网络的状态
- (void)getNetworkStatus { if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) { NSLog(@"是WIFI"); } else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) { NSLog(@"是手机自带网络"); } else { NSLog(@"网络有问题"); } }
-
将观察者从通知中心移除,停止监听,清空网络监听对象
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [self.reachability stopNotifier]; self.reachability = nil; }
-
使用AFNetworking监听网络状态
- 通过AFN监听网络状态比较简单
-
实现网络状态监听的
-
获取AFNetworkReachabilityManager的实例
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
-
设置manager在网络发生变化的时回调的Block
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"----当前网络状态---%zd", status); }]; /** * status:表示当前网络的状态,是个枚举类型变量,具有以下取值 * AFNetworkReachabilityStatusUnknown = -1 * AFNetworkReachabilityStatusNotReachable = 0 * AFNetworkReachabilityStatusReachableViaWWAN = 1 * AFNetworkReachabilityStatusReachableViaWiFi = 2 */
-
开始监听
[manager startMonitoring];
-