在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的:
 (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
 (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 
  WIFI网络:自动下载高清图片 
  4G/3G网络:只下载缩略图 
  没有网络:只显示离线的缓存数据

 常用的有以下两种方法: 
  (1)、使用苹果观法提供的检测iOS设备网络环境用的库 Reachablity 
  (2)、使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变

一、苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态 
使用之前请从Apple网站下载示例:http://xiazai.jb51.net/201608/yuanma/Reachability(jb51.net).rar

然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。
Reachability 中定义了3种网络状态:

1
2
3
4
5
6
7
typedef enum : NSInteger {
 
  NotReachable = 0, //无连接
  ReachableViaWiFi, //使用3G/GPRS网络
  ReachableViaWWAN //使用WiFi网络
 
} NetworkStatus;

我们可以在程序启动以后启动实时监测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// AppDelegate.m
 
 
@interface AppDelegate ()
 
@property (nonatomic, strong) Reachability *reachability;
 
@end
 
// 程序启动器,启动网络监视
- (void)applicationDidFinishLaunching:(UIApplication *)application {
 
  // 设置网络检测的站点
    NSString *remoteHostName = @"www.apple.com";
  self.reachability = [Reachability reachabilityWithHostName:remoteHostName];
  // 设置网络状态变化时的通知函数
  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)
                       name:@"kNetworkReachabilityChangedNotification" object:nil];
  [self updateStatus];
}
 
 
- (void)reachabilityStatusChange:(NSNotification *)notification
{
  Reachability* curReach = [notification object];
  NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
  [self updateInterfaceWithReachability:curReach];
}
 
- (void)updateInterfaceWithReachability:(Reachability *)reachability
{
  if (reachability == _reachability)
  {
    NetworkStatus netStatus = [reachability currentReachabilityStatus];
    switch (netStatus)
    {
      case NotReachable:   {
        NSLog(@"没有网络!");
        break;
      }
      case ReachableViaWWAN: {
        NSLog(@"4G/3G");
        break;
      }
      case ReachableViaWiFi: {
        NSLog(@"WiFi");
        break;
      }
    }
  }
}
 
 
- (void)dealloc
{
   [_reachability stopNotifier];
  [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
}

二、使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//使用AFN框架来检测网络状态的改变
-(void)AFNReachability
{
  //1.创建网络监听管理者
  AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
 
  //2.监听网络状态的改变
  /*
   AFNetworkReachabilityStatusUnknown     = 未知
   AFNetworkReachabilityStatusNotReachable   = 没有网络
   AFNetworkReachabilityStatusReachableViaWWAN = 3G
   AFNetworkReachabilityStatusReachableViaWiFi = WIFI
   */
  [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
      case AFNetworkReachabilityStatusUnknown:
        NSLog(@"未知");
        break;
      case AFNetworkReachabilityStatusNotReachable:
        NSLog(@"没有网络");
        break;
      case AFNetworkReachabilityStatusReachableViaWWAN:
        NSLog(@"3G");
        break;
      case AFNetworkReachabilityStatusReachableViaWiFi:
        NSLog(@"WIFI");
        break;
 
      default:
        break;
    }
  }];
 
  //3.开始监听
  [manager startMonitoring];
}

iOS--实时监控网络状态的改变的更多相关文章

  1. iOS实时监控网络状态的改变

    在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体 ...

  2. 用c#监控网络状态

    1.查询当前网络状态: using Microsoft.VisualBasic.Devices; //判断当前网络连接状态 Network nw=new Network(); if(nw.IsAvai ...

  3. Android中判断网络连接是否可用及监控网络状态

    Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...

  4. iOS开发系列-网络状态监控

    概述 在网络应用中,需要对用户设别的网络状态进行实时监控,可以让用户了解自己的网络状态出现网络问题提示用户. 一般在网络状态不好的场景下需要做一些处理比如: WIFT/3G/4G网络:自动下载高清图. ...

  5. iOS开发 - 检测网络状态(WIFI、2G/3G/4G)

    本文转载至 http://blog.csdn.net/wangzi11322/article/details/45580917 检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 ...

  6. iOS 判断当前网络状态的三种方法

    http://www.cocoachina.com/ios/20171103/21039.html 在项目中,为了好的用户体验,有些场景必须线判断网络状态,然后才能决定改干嘛.比如视频播放,需要线判断 ...

  7. C# 利用性能计数器监控网络状态

    本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...

  8. iOS模拟各种网络状态

    在iOS开发中我们有在各种不同网络状态下测试app运行状态的需求.苹果给我们提供了在模拟器和真机状态下,模拟各种网络状态的软件. 在模拟器中 苹果提供的模拟网络状态的工具官网地址下载该工具需要登录Ap ...

  9. 一款监控网络状态的好工具- Smokeping

    最近工作中需要监测某个分公司到IDC机房的网络情况,到网络上找了不少软件,发现一款叫smokeping的开源软件还不错,它是rrdtool的作者制作的,在图形显示方面很漂亮,可以用来很好的检测网络状态 ...

随机推荐

  1. linux学习-CentOS 7 环境下大量建置账号的方法

    一些账号相关的检查工具 pwck pwck 这个指令在检查 /etc/passwd 这个账号配置文件内的信息,与实际的家目录是否存在等信息, 还可以比对 /etc/passwd /etc/shadow ...

  2. dict 字典的常用操作

    #dict 字典的常用操作: id_db.get() #获取 id_db.update() #更新(覆盖)字典 id_db.values() #打印字典里所有的values id_db.keys() ...

  3. BZOJ 4368: [IOI2015]boxes纪念品盒

    三种路径,左边出去左边回来,右边出去右边回来,绕一圈 绕一圈的路径最多出现一次 那么绕一圈的路径覆盖的点一定是左边半圈的右边和右边半圈的左边 枚举绕一圈的路径的起始点(一定要枚举,这一步不能贪心),更 ...

  4. LA 7049 Galaxy 枚举

    题意: \(x\)轴上有\(n\)个质量为\(1\)的点,他们的坐标分别为\(x_i\). 质心的坐标为\(\frac{\sum{x_i}} {n}\) 转动惯量为\(\sum{d_i^2}\),其中 ...

  5. 1px的实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. java append方法

    JAVA 中 Stringbuffer 有append()方法  Stringbuffer其实是动态字符串数组  append()是往动态字符串数组添加,跟“xxxx”+“yyyy”相当那个‘+’号  ...

  7. 28、editText只输入英文字母和'-',用于授权码输入

    InputFilter filter = new InputFilter() { @Override public CharSequence filter(CharSequence source, i ...

  8. Jmeter生成8位不重复的随机数

    jmeter的time函数${__time(,)}  :  默认该公式精确到毫秒级别, 13位数 ${__time(/1000,)}  : 该公式精确到秒级别, 10位数 ${__time(yyyy- ...

  9. selenium非常好的资料收集

    非常全的中文资料:http://qi-ling2006.iteye.com/ http://blog.csdn.net/qq744746842/article/details/49926917

  10. 面试问题整理Andorid版本 date: 2017-1-12 21:14:36 categories: 技术

    Acitivty的四中启动模式与特点. standard:默认的启动模式 singleTop:适合那种接受通知启动的页面,比如新闻客户端之类的,可能会给你推送好几次 ,但是每次都是打开同一张页面调用o ...