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中,就可以实现实时监测网络状态了。
相关文章推荐
- 2使用XMLHttpRequest对象
- TCP和UDP?
- linux关闭tcp连接工具--killcx
- HTTP和HTTPS的区别?
- Java网络编程之(二): TCP的多线程连接
- 笔记----httpd得basic认证基于用户
- 内置Jetty HTTPS启动
- IO复用中epoll、poll和select的用法及区别
- php知识点3-HTTP 头部-Accept与Content-Type的区别
- php知识点3-HTTP 头部-Connection
- http协议
- 微信支付 org.apache.http包相关类过时解决
- 网络流-最小费用最大流
- TCP option 3, Window Scale
- Linux(CentOS)网络流量实时监控(iftop)
- 笔记----httpd安装启动流程
- Apache httpd配置虚拟主机的三种方法
- Android webview 加载https网页显示空白
- Python网络编程中urllib2模块的用法总结
- Session的生命周期