iOS开发之网络监听
2015-12-15 15:35
246 查看
当应用程序访问网络时,它首先应该检查设备的网络状态,确认设备的网络环境以及连接情况,并针对这些情况提醒用户做出相应的处理。最好能监听设备的网络状态的改变,当设备连接、断开网络时,提醒用户做出相应处理。
本文主要介绍使用一个第三方类库来做检测网络状态:Reachability。
下面来简单的使用。
新建项目,将Reachability.h和Reachability.m文件拖到项目中,再添加SystemConfiguration.framework库。在使用它的类中包含头文件#import <Reachability.h>
向项目中Main.Storyboard中拖几个控件,如下:
因为Reachability不支持ARC,需要手动设置ARC,如图:
由于是使用模拟器运行程序,只能模拟两种网络状态。
“检测”按钮:测试访问指定站点时设备的网络状态
打印结果:(连接wifi时)
断开wifi时
下面针对设备连接wifi和3G/4G情况分别进行检测
测试设备wifi连接情况
连接wifi时
断开wifi时
测试设备3G/4G连接情况(模拟器无法模拟该情况)
除了上面直接检测网络连接状态之外,有时候程序还需要监听网络状态的改变。当网络连接或断开时,提醒用户,以做出相应的处理。
监听网络状态的改变是通过通知实现的。程序获取Reachability对象后,调用Reachability对象的startNotifier方法即可开启该对象的监听状态。当Reachability的网络状态改变时,该对象会发出一个KReachabilityChangeNotification通过给默认的通知中心,然后注册该通知的对象就能监听该通知,并做出相应处理。
当应用启动后,我们可以在appDelegate的didFinishLaunchingWithOptions方法中监听网络状态的改变。
代码如下:
当前连接wifi时:
当前断开wifi时:
对Reachability检测网络状态和监听网络状态的讲解结束了,这只是简单的使用。
本文主要介绍使用一个第三方类库来做检测网络状态:Reachability。
下面来简单的使用。
新建项目,将Reachability.h和Reachability.m文件拖到项目中,再添加SystemConfiguration.framework库。在使用它的类中包含头文件#import <Reachability.h>
向项目中Main.Storyboard中拖几个控件,如下:
因为Reachability不支持ARC,需要手动设置ARC,如图:
由于是使用模拟器运行程序,只能模拟两种网络状态。
“检测”按钮:测试访问指定站点时设备的网络状态
/** * 测试指定站点的网络情况 */ - (IBAction)testNetStatus { // 创建访问指定站点的Reachability Reachability *reach = [Reachability reachabilityWithHostName:self.addressTextField.text]; // 判断该设备的网络状态 switch (reach.currentReachabilityStatus) { case ReachableViaWiFi: NSLog(@"使用wifi访问%@", self.addressTextField.text); break; case ReachableViaWWAN: NSLog(@"使用3G/4G访问%@", self.addressTextField.text); case NotReachable: NSLog(@"不能访问%@", self.addressTextField.text); default: break; } }
打印结果:(连接wifi时)
断开wifi时
下面针对设备连接wifi和3G/4G情况分别进行检测
测试设备wifi连接情况
/** * 测试设备的WIFI连接情况 */ - (IBAction)testWIFI { if ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable) { NSLog(@"wifi网络已连接"); }else { NSLog(@"Wifi网络不可用"); } }
连接wifi时
断开wifi时
测试设备3G/4G连接情况(模拟器无法模拟该情况)
/** * 测试设备3G/4G连接情况 */ - (IBAction)testInternet { if ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus] != NotReachable) { NSLog(@"3G/4G网络已连接"); }else { NSLog(@"3G/4G网络不可用"); } }
除了上面直接检测网络连接状态之外,有时候程序还需要监听网络状态的改变。当网络连接或断开时,提醒用户,以做出相应的处理。
监听网络状态的改变是通过通知实现的。程序获取Reachability对象后,调用Reachability对象的startNotifier方法即可开启该对象的监听状态。当Reachability的网络状态改变时,该对象会发出一个KReachabilityChangeNotification通过给默认的通知中心,然后注册该通知的对象就能监听该通知,并做出相应处理。
当应用启动后,我们可以在appDelegate的didFinishLaunchingWithOptions方法中监听网络状态的改变。
代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 向通知中心注册KReachabilityChangeNotification通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChange:) name:kReachabilityChangedNotification object:nil]; // 获取指定站点的Reachability对象 Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu.com"]; // 开始监听状态 [reach startNotifier]; return YES; } /** * 监听到网络状态改变时的回调方法 */ - (void)reachabilityChange:(NSNotification *)noti { // 通过通知对象获取被监听的Reachability对象 Reachability *reach = [noti object]; //获取Reachability对象当前的网络状态 NetworkStatus status = [reach currentReachabilityStatus]; switch (status) { case ReachableViaWiFi: NSLog(@"当前已经连接了wifi"); break; case ReachableViaWWAN: NSLog(@"当前已经连接了3G/4G"); case NotReachable: NSLog(@"当前无网络连接"); default: break; } }
当前连接wifi时:
当前断开wifi时:
对Reachability检测网络状态和监听网络状态的讲解结束了,这只是简单的使用。
相关文章推荐
- http实现发送post请求,获取结果集
- tcl实现http请求
- 【java】HttpClient实现HTTP文件通用下载工具类
- LTE学习之路(6)——RRC - 自我修炼http://www.tuicool.com/articles/IRZbA33
- 摩申网络:浅析网络棋牌游戏用户群体
- SOAPUI 测试Http 协议
- HTTP中POST和GET的区别
- okHttp的简单运用以及cookie操作,302重定向死循环
- 打印Http相应头字段的方法
- charles中如何对https抓包
- AngularJS(03)---Http对象
- tcpdump
- 使用了okhttp,利用servlet作为本地服务器,okhttp得到中文乱码
- 详解为新版Apache服务器开启HTTP/2支持的方法
- networkActivityIndicatorVisible系统风火轮是否隐藏
- Android 一个改善的okHttp封装库
- winform把网络共享目录映射为本地驱动器&局域网内copy文件&设置文件夹共享
- php tcp框架
- Xcode 7遇到 App Transport Security has blocked a cleartext HTTP 错误
- 原网址链接:http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/