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

在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的:
 (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];

}

时间: 2024-10-11 04:18:03

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

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

在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI网络:自动下载高清图片 4G/3G网络:只下载缩略图 没有网络:只显示离线的缓存数据 常用的有以下两种方法: (1).使用苹果观法提供的检测iOS设备网络环境用的库 Reachablity (2).使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的

用c#监控网络状态

1.查询当前网络状态: using Microsoft.VisualBasic.Devices; //判断当前网络连接状态 Network nw=new Network(); if(nw.IsAvailable) lbmsg.Text="网络已连接"; else lbmsg.Text="网络已断开"; 2.实时监控网络状态 using System.Net.NetworkInformation; // Constructor public MainPage() {

iOS核心笔记——网络编程-监控网络状态

1.AFN监控网络状态: 1.- (void)afnMonitoring2.{3. // 开始网络监控4. AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];5.6. [mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {7. NSLog(@"-----当前的网络状态---%zd&quo

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

Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android中判断网络连接是否可用及监控网络状态,感兴趣的朋友可以参考下 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

Android 监控网络状态

Html代码 public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity == null) { Log.i("NetWorkState", "Unavailabe

Android判断网络类型以及监控网络状态

一.判断网络类型是wifi,还是3G,还是2G网络 ConnectivityManager connectMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connectMgr.getActiveNetworkInfo(); 一.判断网络是否是wifi,在判断之前一定要进行的非空判断,如果没有任何网络 连接info ==null info.getT

top命令详解 动态的监控网络状态

1.top命令:可以动态的监控cpu 参数说明:当前时间 系统启动多久了 当前登录的人数 当前系统的负载情况(三个数和/3>0.6就危险了) 目前有多少进程数 :休眠的进程数,运行的进程数,僵死进程数(已没有用了,但是还是占据内存),静止状态下的进程数 cpu的状态(idle cpu的资源空间大小) Mem内容使用情况:内存总数,正在被使用,空闲的, Swap(虚拟内存):真实内存 使用内存 以下是top命令: top -d 10 :设置动态监控时间10s top -u user :设置要监控的

iOS 判断当前网络状态

1.如果只判断当前是否是无网的状态: if([Reachability reachabilityForLocalWiFi].currentReachabilityStatus==NotReachable&&[[Reachability reachabilityForInternetConnection] currentReachabilityStatus]==NotReachable) { //没网的操作 }else { //有网的操作 } 2.监听网络状态的改变 导入头文件 #impor

脚本监控网络状态,输出日志并归档

脚本监控网络状态&日志归档整理 最近为检测VPN环境网络状态是否稳定,没有使用监控zabbix等监控工具,为方便快捷,使用脚本实现网络监控,并输出日志归档整理,方便后续排查. 在次记录一下,以备后用: #!/bin/bash #mail:[email protected] IP=baidu.com                #IP&域名 dir="/tools/netdir/" if [ -d ${dir} ];then     mkdir -p ${dir} fi