您的位置:首页 > 理论基础 > 计算机网络

2.Reachability检测网络状态

2016-08-09 12:44 417 查看
首先去

https://developer.apple.com/library/ios/samplecode/Reachability/Listings/Reachability_Reachability_m.html 下载Reachability类。

然后将Reachability.h和Reachability.m拖进你的工程,然后添加SystemConfiguration.framework框架。

注:Reachability 2.x版本是不支持ARC的,如果你用的是2.x的版本,请手动禁用该类的ARC。TARGETS->Build Phases->Compile Sources双击Reachability.m,输入框添加“-fno-objc-arc”。

然后判断网络状态方法如下:

NSString *site = @"www.MyWeb.com";
Reachability *reach = [Reachability reachabilityWithHostName:site];

switch ([reach currentReachabilityStatus]) {
case NotReachable:
NSLog(@"不能访问%@", site);
break;
case ReachableViaWiFi:
NSLog(@"使用wifi访问%@", site);
break;
case ReachableViaWWAN:
NSLog(@"使用3G/4G访问%@", site);
break;
default:
break;
}


判断有无网络连接:

if ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable) {
[self showAlert:@"网络可用"];
} else {
[self showAlert:@"网络不可用"];
}


监听网络状态的方法,写在AppDelegate类的application: didFinishLaunchingWithOptions:里面:

注册通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
Reachability *reachability = [Reachability reachabilityWithHostName:@"www.baidu.com"];
[reachability startNotifier];


网络状态变化实现

/**
*此函数通过判断联网方式,通知给用户
*/
- (void)reachabilityChanged:(NSNotification *)notification {
Reachability *curReachability = [notification object];
NSParameterAssert([curReachability isKindOfClass:[Reachability class]]);
NetworkStatus curStatus = [curReachability currentReachabilityStatus];
switch (curStatus) {
case NotReachable:
NSLog(@"无网络");
break;
case ReachableViaWiFi:
NSLog(@"使用wifi网络");
break;
case ReachableViaWWAN:
NSLog(@"使用3G/4G网络");
break;

default:
break;
}
}


最后新版本中reachabilityForLocalWiFi方法被移除了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 监测网络状态