网络监控
随着移动网络升级:2G->3G->4G甚至相传正在研发的5G,网络速度是越来越快,但这流量也像流水一般哗哗的溜走。
网上不是流传一个段子: 睡觉忘记关流量,第二天房子就归移动了!
这固然是一种夸张的说法,但是作为一个优秀的App开发人员,我们需要在App中给出最恰当的提示。
在需要花费大量流量的时候(例如:视频,下载等)给出一些提示。
在用户视频期间用户切换网络的时候给出是否继续观看的提示!
下面笔者就给出一种可以实时监控网络状态改变的方法!
笔者使用的是网络流传最广的网络监控类:Reachability
点击此处下载本文Demo:点击下载
将上部所下载的文件解压,将NetworkReachability文件夹加入你需要添加的工程之中。
示例说明:此示例用于演示关于如何使用SystemConfiguratio Reachalility程序接口来判定相关的网络连接状态及状态 变 化,所以在使用此示例中的Reachability.(h/m)文件于自有的项目中的前提是必须引入 SystemConfiguration.framework。
一:Reachability的使用方法
|
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 // 监听网络状态发生改变的通知 6 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil]; 7 8 // 获得Reachability对象 9 self.reachability = [Reachability reachabilityForInternetConnection]; 10 // 开始监控网络 11 [self.reachability startNotifier]; 12 13 // // 1.获得Reachability对象 14 // Reachability *wifi = [Reachability reachabilityForLocalWiFi]; 15 // 16 // // 2.获得Reachability对象的当前网络状态 17 // NetworkStatus wifiStatus = wifi.currentReachabilityStatus; 18 // if (wifiStatus != NotReachable) { 19 // NSLog(@"是WIFI"); 20 // } 21 } 22 23 - (void)dealloc 24 { 25 [self.reachability stopNotifier]; 26 [[NSNotificationCenter defaultCenter] removeObserver:self]; 27 } 28 29 - (void)networkStateChange 30 { 31 NSLog(@"网络状态改变了"); 32 [self checkNetworkState]; 33 } 34 35 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 36 { 37 [self checkNetworkState]; 38 } 39 40 /** 41 * 监测网络状态 42 */ 43 - (void)checkNetworkState 44 { 45 if ([iCocosNetworkTool isEnableWIFI]) { 46 NSLog(@"WIFI环境"); 47 } else if ([iCocosNetworkTool isEnable3G]) { 48 NSLog(@"手机自带网络"); 49 } else { 50 NSLog(@"没有网络"); 51 } 52 }
判断
1 // 是否WIFI 2 + (BOOL)isEnableWIFI { 3 return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable); 4 } 5 6 // 是否3G 7 + (BOOL)isEnable3G { 8 return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable); 9 }
二:AFN的使用方法:(AFN实际上也是使用了系统自到的Reachability来实现的)
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 // Do any additional setup after loading the view, typically from a nib. 6 7 AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager]; 8 [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 9 // 当网络状态发生改变的时候调用这个block 10 switch (status) { 11 case AFNetworkReachabilityStatusReachableViaWiFi: 12 NSLog(@"WIFI"); 13 break; 14 15 case AFNetworkReachabilityStatusReachableViaWWAN: 16 NSLog(@"自带网络"); 17 break; 18 19 case AFNetworkReachabilityStatusNotReachable: 20 NSLog(@"没有网络"); 21 break; 22 23 case AFNetworkReachabilityStatusUnknown: 24 NSLog(@"未知网络"); 25 break; 26 default: 27 break; 28 } 29 }]; 30 // 开始监控 31 [mgr startMonitoring]; 32 33 // [[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] = !NotReachable 34 // [[Reachability reachabilityForInternetConnection] currentReachabilityStatus] = !NotReachable; 35 36 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reacgabilityChange:) name:kReachabilityChangedNotification object:nil]; 37 38 } 39 40 - (void)dealloc 41 { 42 [[AFNetworkReachabilityManager sharedManager] stopMonitoring]; 43 }