• 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 }
    复制代码
  • 相关阅读:
    JS调试时返回结果有内容却显示数组长度为0或对象内容为空
    python模块学习之six模块
    python学习之ansible api
    python模块学习之collections
    python模块学习之json
    Tomcat闲聊第二话
    HTTP解读
    实用的工具
    mysql数据库记录
    python模块学习之__future__
  • 原文地址:https://www.cnblogs.com/stronger-ios-lcx/p/5653805.html
Copyright © 2020-2023  润新知