在检查 iPAD 3 WiFi+Cellular 的可达性(网络可用性)时,我遇到了在下面提到的场景中发生的一个奇怪问题。
- 为了检查网络可用性,我使用了 Apple 示例代码来实现可达性。
- 以下代码用于检查 WiFi 或 WWAN 的可用性。
`
- (BOOL)networkCheck
{
Reachability *wifiReach = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [wifiReach currentReachabilityStatus];
switch (netStatus)
{
case NotReachable:
{
NSLog(@"%@",@"NETWORKCHECK: Not Connected");
return false;
break;
}
case ReachableViaWiFi:
{
NSLog(@"%@",@"NETWORKCHECK: Connected Via WiFi");
return true;
break;
}
case ReachableViaWWAN:
{
NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN");
return true;
break;
}
}
return false;
}
`
- 在 iPAD 中没有 SIM 并且也没有 WiFi 连接的情况下,上述方法执行 ReachableViaWWAN 案例,这似乎完全不正确,因为没有 SIM 或任何其他 WWAN 网络可用。
为了克服这个问题,建议并实施如下解决方法(或者我应该说是 hack):向可靠的主机发送请求并检查其响应。
case ReachableViaWWAN:
{
NSLog(@"%@",@"NETWORKCHECK: Connected Via WWAN");
NSData *responseData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"www.google.com"]] returningResponse:nil error:nil];
if (responseData != nil)
{
return true;
break;
}
else
{
return false;
break;
}
}
我有几个疑问:
- 这可能听起来很另类,但是即使设备中没有 SIM 卡,它是 ReachableViaWWAN 的硬件或 iOS 是否有问题?
- 该问题是否有更好的解决方案(比上述解决方法)?