有时候我们需要知道手机是否已经链接网络,,或者是链接的网络的类型。。。可以这么做:
(一) 是否链接网络:
需要导入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];
基本的需要已经满足。。。。
有好的建议希望回复。。。。



所有评论(0)