iOS开发——网络编程OC篇&(五)网络监控

随着移动网络升级: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 }
复制代码

随着移动网络升级: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 }
复制代码
原文地址:https://www.cnblogs.com/stronger-ios-lcx/p/5653805.html