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

IOS--网络监测

2015-08-25 20:01 656 查看
大部分的应用都与网络有关 如果你没有网络监测 来监测是否连接网络 很容易让背锅

用法也特别的简单 按照我下面的 二部曲 包你轻松过

1.第一部曲—导入

Reachability类:

这个类用于检测当前网络状态,它不是SDK的一部分,可以在iOS Developer Library里找到这份代码。

从苹果网站上下载Reachability.zip文件,解压之。 (1)把Reachability.h和Reachability.m文件拖到项目中。



(2)添加框架:SystemConfiguration.framework。



( 3 ) 运行环境非 ARC 需要修改 “-fno-objc-arc” (复制就行)

2.第二部曲 –使用方法

1>静态

网络环境现在分三种

①WIFI

②2G/3G/4G

③无网络

所以 Reachability 监测也是分三种

①WIFI reachabilityForLocalWiFi

②2G/3G/4G reachabilityForInternetConnection

③无网络 NotReachable

- (void)checkNetworkState
{
// 1.检测wifi状态
Reachability *wifi = [Reachability reachabilityForLocalWiFi];

// 2.检测手机是否能上网络(WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];

// 3.判断网络状态
if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi
NSLog(@"有wifi");

} else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网
NSLog(@"使用手机自带网络进行上网");

} else { // 没有网络

NSLog(@"没有网络");
}
}


2>实时

实时的监控几行代码就可以了

原理就是用通知 调用它自身一个网络状态变化的信息方法

- (void)viewDidLoad
{
[super viewDidLoad];
//监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];

//发布通知 这个地方的对象必须是全局的对象
self.conn = [Reachability reachabilityForInternetConnection];

//开启通知
[self.conn startNotifier];
}

- (void)dealloc
{
[self.conn stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)networkStateChange
{
[self checkNetworkState];
}
- (void)checkNetworkState { // 1.检测wifi状态 Reachability *wifi = [Reachability reachabilityForLocalWiFi]; // 2.检测手机是否能上网络(WIFI\3G\2.5G) Reachability *conn = [Reachability reachabilityForInternetConnection]; // 3.判断网络状态 if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi NSLog(@"有wifi"); } else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网 NSLog(@"使用手机自带网络进行上网"); } else { // 没有网络 NSLog(@"没有网络"); } }


就上面这两部就够了

静态和实时 我肯定是推荐实时的

你可以写在 APPDelegate 里面 也可以写在任何地方 但是注意 如果写在 app 里面 dealloc 似乎是不需要写的 请自行测试
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: