一般都是用statusBar的UIStatusBarDataNetworkItemView来获取网络状态,但是会发现iphone X系列手机用这种方法不能获取。
NSArray *subViews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];
NSNumber *dateNetworkItemView = nil;
for(id subview in subViews) {
if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
dateNetworkItemView = subview;
break;
}
}
int ret = 0;
switch ([[dateNetworkItemView valueForKey:@"dataNetworkType"] integerValue]) {
case 0:
network = @"NONE";
break;
case 1:
network = @"2G";
break;
case 2:
network = @"3G";
break;
case 3:
network = @"4G";
break;
case 5:
network = @"WIFI";
break;
default:
break;
}
}
解决办法就是用开源类Reachability
+ (NSString *)getNetworkTypeByReachability
{
NSString *network = @"";
switch ([[Reachability reachabilityForInternetConnection]currentReachabilityStatus]) {
case NotReachable:
network = @"NONE";
break;
case ReachableViaWiFi:
network = @"WIFI";
break;
case ReachableViaWWAN:
network = @"WWAN";
break;
default:
break;
}
if ([network isEqualToString:@""]) {
network = @"NO DISPLAY";
}
return network;
}```
为什么呢,查看iphoneX下的statusBar可以得到原因。