ios如何实时监控网络改变

最近看到一些app上有做到网络切换的时候,有提示有提醒是否使用4G/3G,回到wifi又可以马上回归,下面MARK下监听网络状态的代码:



一、苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态

使用之前请从Apple网站下载示例:http://xiazai.jb51.net/201608/yuanma/Reachability(jb51.net).rar

然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。

Reachability 中定义了3种网络状态:

typedefenum: NSInteger {

NotReachable = 0,//无连接

ReachableViaWiFi,//使用WiFi网络

ReachableViaWWAN//使用3G/GPRS网络

} NetworkStatus;

我们可以在程序启动以后启动实时监测


// AppDelegate.m

@interface AppDelegate ()

@property (nonatomic, strong) Reachability *reachability;

@end

// 程序启动器,启动网络监视

- (void)applicationDidFinishLaunching:(UIApplication *)application {

// 设置网络检测的站点

NSString *remoteHostName = @"www.apple.com";

self.reachability = [Reachability reachabilityWithHostName:remoteHostName];

// 设置网络状态变化时的通知函数

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)

name:@"kNetworkReachabilityChangedNotification"object:nil];

[self updateStatus];

}

- (void)reachabilityStatusChange:(NSNotification *)notification

{

Reachability* curReach = [notification object];

NSParameterAssert([curReach isKindOfClass:[Reachabilityclass]]);

[self updateInterfaceWithReachability:curReach];

}

- (void)updateInterfaceWithReachability:(Reachability *)reachability

{

if(reachability == _reachability)

{

NetworkStatus netStatus = [reachability currentReachabilityStatus];

switch(netStatus)

{

caseNotReachable:   {

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

break;

}

caseReachableViaWWAN: {

NSLog(@"4G/3G");

break;

}

caseReachableViaWiFi: {

NSLog(@"WiFi");

break;

}

}

}

}

- (void)dealloc

{

[_reachability stopNotifier];

[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];

}

当然实际开发中用的三方网络请求的要多点  我们以AFNetworking作为示例:

//使用AFN框架来检测网络状态的改变

-(void)AFNReachability

{

//1.创建网络监听管理者

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

//2.监听网络状态的改变

/*

AFNetworkReachabilityStatusUnknown     = 未知

AFNetworkReachabilityStatusNotReachable   = 没有网络

AFNetworkReachabilityStatusReachableViaWWAN = 3G

AFNetworkReachabilityStatusReachableViaWiFi = WIFI

*/

[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

switch(status) {

caseAFNetworkReachabilityStatusUnknown:

NSLog(@"未知");

break;

caseAFNetworkReachabilityStatusNotReachable:

NSLog(@"没有网络");

break;

caseAFNetworkReachabilityStatusReachableViaWWAN:

NSLog(@"3G");

break;

caseAFNetworkReachabilityStatusReachableViaWiFi:

NSLog(@"WIFI");

break;

default:

break;

}

}];

//3.开始监听

[manager startMonitoring];

}


在这个里面我们就可以实现网络监听 在网络发生改变的时候 可以做出相应的操作~~~

你可能感兴趣的:(ios如何实时监控网络改变)