iOS 检测网络状态
一般有两种方式,都是第三方的框架,轮子嘛,能用就先用着,后面再优化。
一: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 检测网络状态相关推荐
- iOS开发网络篇—Reachability检测网络状态
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...
- iOS开发 - 检测网络状态(WIFI、2G/3G/4G)
检测网络状态 在网络应用中,需要对用户设备的网络状态进行实时监控,目的是 让用户了解自己的网络状态,防止一些误会(比如怪应用无能) 根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI ...
- Linux下检测网络状态是否正常
// Linux下检测网络状态是否正常 #include <sys/types.h> #include <string.h> #include <stdlib.h> ...
- ubuntu 检测网络状态命令
一.检测网络状态常用的基本命令 1)ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数 ifconfig 输出结果如下: drew@ubun:~$ ifconfig eth0 Li ...
- AFNetworkReachabilityManager检测网络状态
// 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring[[AFNetworkReachabilityManager sharedManager] startMonito ...
- flutter检测网络状态
flutter检测网络状态 原来使用的插件connectivity已经停止使用,现在使用的是新版的connectivity_plus 插件地址:https://pub.dev/packages/con ...
- 怎么用nodejs检测网络状态?
nodejs可以使用检测因特网状态的库internet-available.is-online来检查网络状态,其原理是检测dns连接状态.这两个库提供了超时检测. 用nodejs检测网络状态: int ...
- Android移动开发检测网络状态并使用BroadcastReceiver(广播接收者)进行接收网络变化的后续处理
在Android开发中,许多功能需要网络连接,所以在开发过程中需要进行手机网络的检测.而每做一个App,就要进行检测,那么我直接将检测网络状态的功能封装成一个类. 检测网络状态所需要的Api: Con ...
- iOS 获取网络状态
在iOS开发者,获取网络状态比较常用 -(NSString *)getNetWorkStates{UIApplication *app = [UIApplication sharedApplicati ...
最新文章
- Matlab大气湍流退化模型
- 实时监控用户输入--中文输入解决方案
- 19-Realm Management Extension (RME)
- [VN2020 公开赛]CSRe
- 数据结构:四种排序的比较
- Cocos2d-x Win7环境编译apk
- 批量修改product description
- 『软件工程1』详解软件是什么
- 前端学习(1132):正则表达式学习目标
- hdu 3068 最长回文 (Manacher算法求最长回文串)
- Mac系统如何通过自带的工具进行磁盘修复
- iOS的QuickTime Plugin
- java callback_java——回调机制(callback)
- VB编程必备!_VB源码之友(内含-下载-破解-使用方法)
- c语言单片机矩阵键盘,51单片机矩阵键盘的C语言程序与分析
- 饥荒显示服务器建立时遇到问题,饥荒联机版建立服务器出现问题怎么回事 | 手游网游页游攻略大全...
- 常用邮箱SMTP、POP3域名及其端口号
- 13级计算机商务沟通与礼仪结课论文,商务沟通论文
- 拯救阿拉德大陆--竞码编程H-20‘
- 开放平台-web实现QQ第三方登录
热门文章
- RSA加密算法【手把手解释】
- Linux进程间同步和通信,linux进程间的同步方法
- java的serializable_Java里Serializable的那些事
- dajngo3设置静态文件访问
- pycharm关联python ide_Python+Selenium进阶版 (一)- Python IDE工具-PyCharm的安装和使用...
- 蓝桥杯2014年省赛C/C++ 本科B组
- 模型加速:WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks
- Tutorial of Codeforces Round 729 (Div.2)
- 编程实现 带符号加法溢出判断
- 序列(【CCF】NOI Online能力测试 提高组第一题)