// 是否wifi
+ (BOOL) IsEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
} // 是否3G
+ (BOOL) IsEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
} 这样判断设备网络是3G环境和WIFI环境,那么在没有WIFI也没有3G的情况怎么检测?(!IsEnableWIFI && !IsEnable3G)? 我想检测是否已不能连接上网络,一定要调用Reachability reachabilityWithHostName:@“URL”这个么? 我现在的难题是,不知道如何检测连接已断开。
+ (BOOL) IsEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
} // 是否3G
+ (BOOL) IsEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
} 这样判断设备网络是3G环境和WIFI环境,那么在没有WIFI也没有3G的情况怎么检测?(!IsEnableWIFI && !IsEnable3G)? 我想检测是否已不能连接上网络,一定要调用Reachability reachabilityWithHostName:@“URL”这个么? 我现在的难题是,不知道如何检测连接已断开。
NotReachable = 0, //无网络
ReachableViaWiFi, //wifi 网络
ReachableViaWWAN // 3g网络
} NetworkStatus;reachability有三个状态,分别对应注释里面的,(wifi 和3g都是有网络状态)。你的判断是不对的。
if ([wStatus currentReachabilityStatus] == NotReachable) {//这是没有网络 的情况
}else {
} 管他3G wif 2G
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (!didRetrieveFlags) {
printf("Error. Count not recover network reachability flags\n");
return NO;
}
BOOL isReachable = flags & kSCNetworkFlagsReachable;
BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
return (isReachable && !needsConnection) ? YES : NO;
}使用这个方法先检查是否有网络连接,在进行网络类型的判断,另外2G和3G的网络是可以通过Reachability区分出来的