在我的情况下,我不能使用Reachability
类,因为我在无法访问互联网的wifi网络中使用iPhone。它只是一个内联网 wifi。
这意味着,Reachability
课程将返回Not Reachable
。
答案 0 :(得分:4)
-(void)newtworkType {
NSArray *subviews = [[[[UIApplication sharedApplication] valueForKey:@"statusBar"] valueForKey:@"foregroundView"]subviews];
NSNumber *dataNetworkItemView = nil;
for (id subview in subviews) {
if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
dataNetworkItemView = subview;
break;
}
}
switch ([[dataNetworkItemView valueForKey:@"dataNetworkType"]integerValue]) {
case 0:
NSLog(@"No wifi or cellular");
break;
case 1:
NSLog(@"2G");
break;
case 2:
NSLog(@"3G");
break;
case 3:
NSLog(@"4G");
break;
case 4:
NSLog(@"LTE");
break;
case 5:
NSLog(@"Wifi");
break;
default:
break;
}
}
答案 1 :(得分:0)
对于intranet wifi
,我认为您也可以使用Reachability
您只需要将主机名更改为Intranet主机。
如:
struct sockaddr_in ip4addr;
int s;
ip4addr.sin_family = AF_INET;
ip4addr.sin_port = htons(80);
inet_pton(AF_INET, "192.168.0.1", &ip4addr.sin_addr);
s = socket(PF_INET, SOCK_STREAM, 0);
bind(s, (struct sockaddr*)&ip4addr, sizeof ip4addr);
Reachability * reach = [Reachability reachabilityWithAddress:&ip4addr];
上面的代码由faildrop编写,https://github.com/tonymillion/Reachability/issues/6
我不测试,但我认为它可以解决您的问题