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

iOS获取当前网络状态

2014-09-20 22:21 204 查看
首先,我们需要拿到状态栏,然后通过runtime去探讨状态栏内部的组成结构

需要#import <objc/message.h>(xcode6下不导入也没影响)

这里为了方便定义枚举

typedef  enum {
NO_G_WORK = 0,
TWO_G_WORK,
THREE_G_WORK,
FOUR_G_WORK,
WIFI = 5,
}NET_STATUS;


#pragma mark - getNetworkStatus
- (void)getNetworkStatus
{
// 状态栏是由当前app控制的,首先获取当前app
UIApplication *app = [UIApplication sharedApplication];

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

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

switch (type) {
case NO_G_WORK:
NSLog(@"NO_G_WORK");
break;
case TWO_G_WORK:
NSLog(@"TWO_G_WORK");
break;
case THREE_G_WORK:
NSLog(@"THREE_G_WORK");
break;
case FOUR_G_WORK:
NSLog(@"FOUR_G_WORK");
break;
case WIFI:
NSLog(@"WIFI");
break;

default:
break;
}

}


调用上面的方法

- (void)viewWillAppear:(BOOL)animated
{
[self getNetworkStatus];
}


打印出的type数字对应的网络状态依次是:0 - 无网络; 1 - 2G; 2 - 3G; 3 - 4G; 5 - WIFI
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: