- 第一种方法:
- +(BOOL)connectedToNetwork{
- 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)
- {
- NSLog(@"Error. Could not recover network reachability flags");
- return NO;
- }
- BOOL isReachable = flags & kSCNetworkFlagsReachable;
- BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
- return (isReachable && !needsConnection) ? YES : NO;
- }
- 第二种方法
- typedef enum
- {
- NoConnection = 0,
- WiFiConnected,
- WWANConnected
- } NetworkStatus;
- NetworkStatus getNetworkStatus ( )
- {
- struct sockaddr_in nullAddress;
- bzero(&nullAddress, sizeof(nullAddress));
- nullAddress.sin_len = sizeof(nullAddress);
- nullAddress.sin_family = AF_INET;
- SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*) &nullAddress);
- SCNetworkReachabilityFlags flags;
- SCNetworkReachabilityGetFlags(ref, &flags);
- if (!(flags & kSCNetworkReachabilityFlagsReachable))
- return NoConnection;
- if (!(flags & kSCNetworkReachabilityFlagsConnectionRequired))
- return WiFiConnected;
- if (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ||
- (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic)) &&
- !(flags & kSCNetworkReachabilityFlagsInterventionRequired))
- return WiFiConnected;
- if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
- return WWANConnected;
- return NoConnection;
- }