通过监听手机的 statusbar 的状态还获取用户的网络状态
能够区分2G、3G、4G、LTE
注意:使用这种方法时statusbar不可以隐藏,若你的App隐藏了statusbar,则此方法是不可以获得网络状态的。
<pre name="code" class="objc">+ (NSString *)networkingStatesFromStatebar {
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") class]]) {
type = [[child valueForKeyPath:@"dataNetworkType"] intValue];
}
}
NSString *stateString = [NSString string];
switch (type) {
case 0:
stateString = @"notReachable";
break;
case 1:
stateString = @"2G";
break;
case 2:
stateString = @"3G";
break;
case 3:
stateString = @"4G";
break;
case 4:
stateString = @"LTE";
break;
case 5:
stateString = @"wifi";
break;
default:
break;
}
return stateString;
}