利用Reachability框架进行网络连接状态监测
来源:互联网 发布:手机散热软件 编辑:程序博客网 时间:2024/06/04 17:53
网络连接状态监测几乎任何地方都离不了。进行联网状态监测,最简单的方法是使用第三方框架Reachability。其实就两个文件Reachability.h和Reachability.m文件,然后导入头文件就可以使用了。
打开Reachability.h文件。最常使用的是
+ (instancetype)reachabilityWithHostName:(NSString *)hostName; // 创建一个Reachability对象
hostName:是要连接的网址。
- (NetworkStatus)currentReachabilityStatus; 返回枚举值(连接状态)即Reachability.h开头的枚举值
typedefenum : NSInteger {
NotReachable =0,//没有连接
ReachableViaWiFi,// wifi
ReachableViaWWAN // 2G/3G/4G
} NetworkStatus;
最常用的是封装一个方法,整个工程都可以使用。也可以单独使用在开始的时候添加一个通知 并开启监听。具体代码如下:
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">//// ViewController.m// 联网状态监测//// Created by apple on 15/10/25.// Copyright (c) 2015年 LiuXun. All rights reserved.//#import "ViewController.h"#import "Reachability.h"@interface ViewController ()@property(nonatomic, strong) Reachability *reach;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 判断是否能连接到一个主机(是否有网) self.reach = [Reachability reachabilityWithHostName:@"https://www.baidu.com/"]; // 添加一个通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kReachability) name:kReachabilityChangedNotification object:nil]; // 开始监听 [self.reach startNotifier];}-(void)kReachability{ // 判断状态 switch (self.reach.currentReachabilityStatus) { case NotReachable: NSLog(@"没有连接"); break; case ReachableViaWiFi : NSLog(@"连接的是WIFI"); break; case ReachableViaWWAN: NSLog(@"流量连接"); break; }}-(void)dealloc{ // 停止监听 [self.reach stopNotifier]; // 移除监听 移除控制器内的所有监听 [[NSNotificationCenter defaultCenter] removeObserver:self];}@end</span></span></span>运行结果如下:
断网后
也可以自己封装一个公共类或公共函数,由于时间问题,只封装了一个简单方法如下所示:
<span style="font-size:18px;"><span style="font-size:18px;">+(BOOL)isConnectionAvailable{ BOOL isExistenceNetwork = YES; Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"]; switch ([reach currentReachabilityStatus]) { case NotReachable: isExistenceNetwork = NO; break; case ReachableViaWiFi: isExistenceNetwork = YES; break; case ReachableViaWWAN: isExistenceNetwork = YES; break; } return isExistenceNetwork;}</span></span>吃饭回来,再继续封装一个更简单的函数,连类名都省了。
我发现把常用的东西封装在类中没有封装在函数简单,需要注意的是封装函数时要在.h中加c函数声明。我封装一个更简单的专门用于检测网络连接的函数(必须事先导入Reachability框架)。
GeneralFunction.h如下:
<span style="font-size:18px;">//// GeneralFunction.h// 联网状态监测//// Created by apple on 15/10/25.// Copyright (c) 2015年 LiuXun. All rights reserved.//#import <UIKit/UIKit.h>#ifdef cplusplusextern "c"{#endif BOOL isNetWorkConnect(NSString **status);#ifdef cplusplus}#endif</span>GeneralFunction.m
<span style="font-size:18px;">//// GeneralFunction.m// 联网状态监测//// Created by apple on 15/10/25.// Copyright (c) 2015年 LiuXun. All rights reserved.//#import "GeneralFunction.h"#import "Reachability.h"BOOL isNetWorkConnect(NSString **status){ BOOL isConnect = NO; NSString *connectStr = nil; Reachability *reach = [Reachability reachabilityWithHostName:@"https://www.baidu.com/"]; switch (reach.currentReachabilityStatus) { case NotReachable: isConnect = NO; connectStr = @"没有连接网络"; break; case ReachableViaWiFi : isConnect = YES; connectStr = @"WIFI连接"; break; case ReachableViaWWAN : isConnect = YES; connectStr = @"流量连接"; break; } if (status) { *status = [connectStr copy]; } return isConnect;}</span>调用方法如下:
<span style="font-size:18px;"> NSString *status = nil; BOOL isconnect = isNetWorkConnect(&status); NSLog(@"%d—— %@", isconnect, status);</span>
做一下回顾:在函数内需要创建类的对象且需要使用类的一些变量或方法时,也就是联系比较深的时候。为了防止类的对象被提前释放造成程序崩溃,需要将函数内创建的类的对象声明为static类型,加判断或用GCD中的一次性代码防止重复创建即可。
0 0
- 利用Reachability框架进行网络连接状态监测
- Reachability 监测网络状态(第三方框架)
- iOS之 网络连接监测框架 Reachability
- 网络状态监测Reachability
- IOS SCNetworkReachability和Reachability监测网络连接状态
- iOS 监测网络状态(Reachability)
- iOS 网络状态监测。Reachability 使用
- 网络状态监测之 Reachability的使用
- 网络状态监测Reachability的使用
- iOS开发实时监测网络状态Reachability
- iOS网络开发:监测当前网络状态,Reachability
- Reachability监测网络环境
- 使用Reachability网络监测
- iOS网络状态监测之Reachability的使用
- IOS 判断网络连接状态 Reachability
- Reachability 和AFNetWorking 第三方框架对网络的监测
- 监测当前网络连接状态
- IOS 监测网络连接状态
- leetcode 203 Remove Linked list Elements
- 5个强大的Java分布式缓存框架
- [sicily]1325. Digit Generator
- LevelDB整体架构分析
- hdu acm 5410 CRB and His Birthday
- 利用Reachability框架进行网络连接状态监测
- Appium总结(三):Rspec使用初步用法
- Codeforces Round #312 (Div. 2) C. Amr and Chemistry(数论)
- POJ 1027:The Same Game 较(chao)为(ji)复(ma)杂(fan)的模拟
- GCD之线程组
- idea 显示行号
- 16 Power digit sum - Project Euler
- Android:View绘制流程
- boost asio client