获取iOS网络状态,目前有两个办法。

1.通过监听手机状态栏的信息。

2.通过使用官方提供的类Reachability。

一、通过手机监听手机状态栏的信息

好处:

1.可以通过苹果的审核上架AppStore。

2.代码量少,简单易懂。

3.可以区分网络类型,精确到2G,3G,4G。

缺点:必须保证在使用该方法的过程中,手机状态栏statusBar没有隐藏。

代码如下:

- (NSString *)networkingStatesFromStatusBar {
UIApplication *app = [UIApplication sharedApplication];
NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
int type = ;
for (id child in children) {
if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
}
}
NSString *networkStateString = @"wifi";
switch (type) {
case :
networkStateString = @"notReachable";
break;
case :
networkStateString = @"2G";
break;
case :
networkStateString = @"3G";
break;
case :
networkStateString = @"4G";
break;
case :
stateString = @"LTE";
break;
case :
networkStateString = @"wifi";
break;
default:
break;
}
return networkStateString;
}

二、通过通过使用官方提供的类Reachability

好处:官方提供的权威方法。无需依赖状态栏。

缺点:只有三种网络状态

typedef NS_ENUM(NSInteger, NetworkStatus) {
// Apple NetworkStatus Compatible Names.
NotReachable = ,
ReachableViaWiFi = ,
ReachableViaWWAN =
};

使用:

1.下载并导入Reachability,链接:https://github.com/tonymillion/Reachability

2.导入SystemConfiguration.framework框架

3.代码实现:

Reachability提供了两种实现方法:

1.使用Block回调,代码如下

    /** 网络状态对象*/
Reachability *reach= [Reachability reachabilityWithHostName:@"www.apple.com"];
//使用block回调实现
reach.reachableBlock = ^(Reachability *reach) {
dispatch_async(dispatch_get_main_queue(), ^{
NetworkStatus netStatus = [reach currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"未检测到网络");
break;
case ReachableViaWiFi:
NSLog(@"wifi");
break;
case ReachableViaWWAN:
NSLog(@"蜂窝网络");
break;
default:
break;
}
});
};
reach.unreachableBlock = ^(Reachability *reach) {
NSLog(@"UNREACHBLE!");
};
[reach startNotifier];

2.使用通知,代码如下

    /** 网络状态对象*/
Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
[reach startNotifier];

监听方法的实现

-(void)reachabilityChanged:(NSNotification *)notification {
Reachability *curReach = [notification object];
NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
NetworkStatus netStatus = [curReach currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"未检测到网络");
break;
case ReachableViaWiFi:
NSLog(@"wifi");
break;
case ReachableViaWWAN:
NSLog(@"蜂窝网络");
break;
default:
break;
}
}

最后不要忘记移除通知。

- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
}

最新文章

  1. [.net 面向对象编程基础] (21) 委托
  2. list的一些使用
  3. 爱拼图游戏android源码完整版
  4. gvim编辑文件到github乱码
  5. android上下文
  6. 第三方登录,一般都是遵循OAuth2.0协议。
  7. poj1417菜鸡的详细题解(希望能帮助到和我一样陷于本题的新手)
  8. 201621123060《JAVA程序设计》第十四周学习总结
  9. grid - 网格项目对齐方式(Box Alignment)
  10. App架构师实践指南三之基础组件
  11. java集合的实现细节--ArrayList和LinkedList
  12. impdp导入表不创建segments
  13. 将react升级到15之后的坑
  14. 数据结构:链表 >> 链表按结点中第j个数据属性排序(冒泡排序法)
  15. UIKit框架类层次图
  16. Qt学习之路1---软件下载安装及工程简介
  17. Bootstrap-CL:页面标题
  18. Web | 一小时看懂前端基本语法
  19. HttpServletRequest继承字ServletRequest的常用方法
  20. Win7 + vs2012 + cocos2d-x2.2 配置开发环境

热门文章

  1. solaris11.2下编译QT-配置命令
  2. Python urllib和urllib2模块学习(三)
  3. Criteria 和 DetachedCriteria的区别与使用(转)
  4. zip命令
  5. Javascript基本算法演练 Seek and Destroy
  6. 深入理解java String 对象的不可变性
  7. python 生成器理解
  8. cocos2d-x3.0 SpriteFrameCache
  9. OAuthBase.cs
  10. 一台服务器同时搭建IIS和WAMP,利用WAMP 80端口转发