有时候我们需要知道手机是否已经链接网络,,或者是链接的网络的类型。。。可以这么做:
(一) 是否链接网络:
需要导入SystemConfiguration.framework
#import <netdb.h>
#import <SystemConfiguration/SCNetworkReachability.h>
//定义internet的套接字地址 一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。 struct sockaddr_in zeroAddress; //将zeroAddress置零 bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; //主机字节序 //创建链接测试 第二个参数是链接的ip地址 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"); } // BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; NSString *result; if ((isReachable && !needsConnection) ? YES : NO) { result = @"Connection Successed!!!"; }else { result = @"Connection Faild!!!"; } UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"TestConnection" message:result delegate:self cancelButtonTitle:@"OK,I Know" otherButtonTitles:nil]; [alert show];
(二) 网络链接的类型:
NSString *connectionKind; // 测试连接可用性 Reachability *hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"]; // 判断连接类型 switch ([hostReach currentReachabilityStatus]) { case NotReachable: connectionKind = @"没有网络链接"; break; case ReachableViaWiFi: connectionKind = @"当前使用的网络类型是WIFI"; break; case ReachableViaWWAN: connectionKind = @"当前使用的网络链接类型是WWAN(3G)"; break; default: break; } UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络链接类型" message:connectionKind delegate:self cancelButtonTitle:@"知道了,谢谢" otherButtonTitles:nil]; [alert show];
基本的需要已经满足。。。。
有好的建议希望回复。。。。