一般有两种方式,都是第三方的框架,轮子嘛,能用就先用着,后面再优化。

一:Reachability

1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.frame。

2. 在AppDelegate.m中这样实现:

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
 2 //开启网络状况的监听
 3 //来订阅实时的网络状态变化通知。导入Reachability.h头文件,然后注册一个对象来订阅网络状态变化的信息,网络状态变化的信息名称为kReachabilityChanged-Notification
 4
 5 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
 6 //通过检查某个主机能否访问来判断当前网络是否可用:
 7 self.hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"] ;
 8
 9 //开始监听,会启动一个run loop
10 [self.hostReach startNotifier];
11
12 }
13
14 -(void)reachabilityChanged:(NSNotification *)note{
15 Reachability *currReach = [note object];
16
17 NSParameterAssert([currReach isKindOfClass:[Reachability class]]);
18
19 //对连接改变做出响应处理动作
20
21 NetworkStatus status = [currReach currentReachabilityStatus];
22
23 //如果没有连接到网络就弹出提醒实况
24
25 self.isReachable = YES;
26
27 if(status == NotReachable){
28
29 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
30 [alert show];
31 [alert release];
32 self.isReachable = NO;
33 return;
34
35 }
36
37 if (status==kReachableViaWiFi||status==kReachableViaWWAN) {
38
39 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接信息" message:@"网络连接正常" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
40
41 //        [alert show];
42
43 [alert release];
44 self.isReachable = YES;
45
46 }
47 }
48
49 然后在每个页面的viewWillAppear:加上:
50
51 -(void)viewWillAppear:(BOOL)animated{
52 [super viewWillAppear:YES];
53 AppDelegate *appDlg = (AppDelegate *)[[UIApplication sharedApplication] delegate];
54 if(appDlg.isReachable){
55 NSLog(@"网络已连接");//执行网络正常时的代码
56 }
57 else{
58 NSLog(@"网络连接异常");//执行网络异常时的代码
59 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
60 [alert show];
61 [alert release];
62 }
63 }

这样就可以检查到在运行程序时网络突然的中断和连接。Reachability类实际上是苹果公司对SCNetworkReachability API的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。

二:AFNetworking监测

1.导入框架,和头文件#import <AFNetworkReachabilityManager.h>

2.代码:

 1 -(void)afn{
 2     //1.创建网络状态监测管理者
 3     AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManager sharedManager];
 4  //开启监听,记得开启,不然不走block
 5     [manger startMonitoring];
 6     //2.监听改变
 7     [manger setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
 8         /*
 9          AFNetworkReachabilityStatusUnknown          = -1,
10          AFNetworkReachabilityStatusNotReachable     = 0,
11          AFNetworkReachabilityStatusReachableViaWWAN = 1,
12          AFNetworkReachabilityStatusReachableViaWiFi = 2,
13          */
14         switch (status) {
15             case AFNetworkReachabilityStatusUnknown:
16                 NSLog(@"未知");
17                 break;
18             case AFNetworkReachabilityStatusNotReachable:
19                 NSLog(@"没有网络");
20                 break;
21             case AFNetworkReachabilityStatusReachableViaWWAN:
22                 NSLog(@"3G|4G");
23                 break;
24             case AFNetworkReachabilityStatusReachableViaWiFi:
25                 NSLog(@"WiFi");
26                 break;
27             default:
28                 break;
29         }
30     }];
31 }

转载于:https://www.cnblogs.com/somethingWithiOS/p/5948606.html

iOS 检测网络状态相关推荐

  1. iOS开发网络篇—Reachability检测网络状态

    前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...

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

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

  3. Linux下检测网络状态是否正常

    // Linux下检测网络状态是否正常 #include <sys/types.h> #include <string.h> #include <stdlib.h> ...

  4. ubuntu 检测网络状态命令

    一.检测网络状态常用的基本命令 1)ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数 ifconfig 输出结果如下: drew@ubun:~$ ifconfig eth0 Li ...

  5. AFNetworkReachabilityManager检测网络状态

    // 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring[[AFNetworkReachabilityManager sharedManager] startMonito ...

  6. flutter检测网络状态

    flutter检测网络状态 原来使用的插件connectivity已经停止使用,现在使用的是新版的connectivity_plus 插件地址:https://pub.dev/packages/con ...

  7. 怎么用nodejs检测网络状态?

    nodejs可以使用检测因特网状态的库internet-available.is-online来检查网络状态,其原理是检测dns连接状态.这两个库提供了超时检测. 用nodejs检测网络状态: int ...

  8. Android移动开发检测网络状态并使用BroadcastReceiver(广播接收者)进行接收网络变化的后续处理

    在Android开发中,许多功能需要网络连接,所以在开发过程中需要进行手机网络的检测.而每做一个App,就要进行检测,那么我直接将检测网络状态的功能封装成一个类. 检测网络状态所需要的Api: Con ...

  9. iOS 获取网络状态

    在iOS开发者,获取网络状态比较常用 -(NSString *)getNetWorkStates{UIApplication *app = [UIApplication sharedApplicati ...

最新文章

  1. Matlab大气湍流退化模型
  2. 实时监控用户输入--中文输入解决方案
  3. 19-Realm Management Extension (RME)
  4. [VN2020 公开赛]CSRe
  5. 数据结构:四种排序的比较
  6. Cocos2d-x Win7环境编译apk
  7. 批量修改product description
  8. 『软件工程1』详解软件是什么
  9. 前端学习(1132):正则表达式学习目标
  10. hdu 3068 最长回文 (Manacher算法求最长回文串)
  11. Mac系统如何通过自带的工具进行磁盘修复
  12. iOS的QuickTime Plugin
  13. java callback_java——回调机制(callback)
  14. VB编程必备!_VB源码之友(内含-下载-破解-使用方法)
  15. c语言单片机矩阵键盘,51单片机矩阵键盘的C语言程序与分析
  16. 饥荒显示服务器建立时遇到问题,饥荒联机版建立服务器出现问题怎么回事 | 手游网游页游攻略大全...
  17. 常用邮箱SMTP、POP3域名及其端口号
  18. 13级计算机商务沟通与礼仪结课论文,商务沟通论文
  19. 拯救阿拉德大陆--竞码编程H-20‘
  20. 开放平台-web实现QQ第三方登录

热门文章

  1. RSA加密算法【手把手解释】
  2. Linux进程间同步和通信,linux进程间的同步方法
  3. java的serializable_Java里Serializable的那些事
  4. dajngo3设置静态文件访问
  5. pycharm关联python ide_Python+Selenium进阶版 (一)- Python IDE工具-PyCharm的安装和使用...
  6. 蓝桥杯2014年省赛C/C++ 本科B组
  7. 模型加速:WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks
  8. Tutorial of Codeforces Round 729 (Div.2)
  9. 编程实现 带符号加法溢出判断
  10. 序列(【CCF】NOI Online能力测试 提高组第一题)