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

iOS中4种判断网络请求的方式(系统状态栏、AFNetworking、Reachability、自定义)

2016-07-12 16:21 459 查看

iOS 实时判断网络状态

方法一:利用系统状态栏判断网络状态

// 状态栏是由当前app控制的,首先获取当前app
UIApplication *app = [UIApplication sharedApplication];

NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];

int type = 0;
for (id child in children) {
if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
}
}
switch (type) {
case 1:

return @"2G";

break;

case 2:

return @"3G";
case 3:

return @"4G";
case 5:

return @"WIFI";

default:

return @“NO-WIFI";//代表未知网络

break;
}

当然,此方法存在一定的局限性,比如当状态栏被隐藏的时候,无法使用此方法。
参考

方法二:使用第三方库AFNetWorking判断(使用前记得导入 #import "AFNetworking.h")

[[AFNetworkReachabilityManager sharedManager] startMonitoring];
[[AFNetworkReachabilityManager sharedManager ] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case -1:
NSLog(@"未知网络");
break;
case 0:
NSLog(@"网络不可达");
break;
case 1:
NSLog(@"GPRS网络");
break;
case 2:
NSLog(@"wifi网络");
break;
default:
break;
}
if(status ==AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi)
{
NSLog(@"有网");
}else
{
NSLog(@"没有网");
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"网络失去连接" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
alert.delegate = self;
[alert show];
}
}];

将此代码写在AppDelegate.m中,就可以实现实时监测网络状态了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: