1. 程式人生 > >檢測網絡連接狀態

檢測網絡連接狀態

status init chan frame cto wan val line perf

#import "AFNetworkReachabilityManager.h"


- (BOOL)isNetWorkReachable{

__block CGRect rect = _nonNetworkLabel.frame; //這裏的聲明前面加__block。作用是在塊裏能夠改動rect的值;

AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager
];
[afNetworkReachabilityManager
startMonitoring]; //開啟網絡監視器;

[afNetworkReachabilityManager
setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

switch (status) {
case AFNetworkReachabilityStatusNotReachable:{
NSLog
(@"網絡不通:%f", rect.origin.y );
_nonNetworkLabel.hidden = NO;
_nonNetworkLabel.text = @"網絡不通..";
[
self performSelector:@selector(hidden) withObject:nil afterDelay:3];
break;
}
case AFNetworkReachabilityStatusReachableViaWiFi
:{
NSLog(@"網絡通過WIFI連接:%f", rect.origin.y );
_nonNetworkLabel.hidden = NO;
_nonNetworkLabel.text = @"網絡通過WIFI連接..";
[
self performSelector:@selector(hidden) withObject:nil afterDelay:3];
break;
}

case AFNetworkReachabilityStatusReachableViaWWAN:{
NSLog(@"網絡通過流量連接:%f", rect.origin.y );
_nonNetworkLabel.hidden = NO;
_nonNetworkLabel.text = @"網絡通過流量連接..";
[
self performSelector:@selector(hidden) withObject:nil afterDelay:3];
break;
}
default:
break;
}

}];


return [AFNetworkReachabilityManager sharedManager].isReachable;
}

- (
void)hidden
{
_nonNetworkLabel.hidden = YES;
}



- (
void)viewDidLoad
{
[
super viewDidLoad];

if ([[[UIDevice currentDevice]systemVersion]floatValue]>=7.0) {
self.tabBar.translucent = NO;
}
else if ([[[UIDevice currentDevice]systemVersion]floatValue] < 7.0){


}
//self.view.backgroundColor = [UIColor redColor];

//默認選擇第幾個
self.selectedIndex = 0;


self.nonNetworkLabel = [[UILabel alloc]initWithFrame:CGRectMake(80, self.view.frame.size.height - 70, 160, 20)];
_nonNetworkLabel.backgroundColor = [UIColor blackColor];
_nonNetworkLabel.alpha = 0.6;
_nonNetworkLabel.textColor = [UIColor whiteColor];
_nonNetworkLabel.textAlignment = NSTextAlignmentCenter;
_nonNetworkLabel.font = [UIFont systemFontOfSize:12];
_nonNetworkLabel.hidden = YES;
[
self.view addSubview:_nonNetworkLabel];
[
self isNetWorkReachable];

}


//// 以下說一下原生的,地址

https://developer.apple.com/library/content/samplecode/Reachability/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007324-Intro-DontLinkElementID_2

非常久後:

- (NetworkStatus)statusForNet

{

Reachability *reachability = [Reachability reachabilityWithHostName:@"www.apple.com"];

NetworkStatus netStatus = [reachability currentReachabilityStatus];

return netStatus;

}

- (BOOL)isHaveNetWork

{

if([self statusForNet] == ReachableViaWiFi || [self statusForNet] == ReachableViaWWAN){

return YES;

}else{

return NO;

}

}

- (void)replyAction:(UIButton *)sender

{

if ([self isHaveNetWork]){

//

}else{

[self showTextPrompt:nil

prompt:@"當前沒有網絡"];

sender.userInteractionEnabled = NO;

}

sender.userInteractionEnabled = YES;

}

說說為什麽這個時候貼出這些代碼, 關於項目的嚴謹性,斷網的時候須要做一些預判的,我們常規的返回結果都是請求後給的,達不到想要的效果,比方沒網時關閉用戶交互並提示



檢測網絡連接狀態