手机
当前位置:查字典教程网 >编程开发 >IOS开发 >使用Reachability类判断iOS设备的当前网络连接类型
使用Reachability类判断iOS设备的当前网络连接类型
摘要:(1).下载https://developer.apple.com/library/ios/samplecode/Reachability/...

(1). 下载 https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

(2). 拖reachability.h,reachability.m入工程 (库非ARC)

ARC:-fno-objc-arc

(3) .导入SystemConfiguration.framework

(4).用法

复制代码 代码如下:

-(NSString*)getNetType

{

NSString* result;

Reachability *r = [Reachability reachabilityWithHostName:@"www.baidu.com"];

NSLog(@" ====:%i",[r currentReachabilityStatus]);

switch ([r currentReachabilityStatus]) {

case NotReachable:// 没有网络连接

result=@"没有网络连接";

break;

case ReachableViaWWAN:// 使用3G网络

result=@"3g";

break;

case ReachableViaWiFi:// 使用WiFi网络

result=@"wifi";

break;

}

NSLog(@"caseReachableViaWWAN=%i",ReachableViaWWAN);

NSLog(@"caseReachableViaWiFi=%i",ReachableViaWiFi);

return result;

}

(5)如果无法区分出2G、2.5G、3G网络的区别,那么我们可以将Reachability.m中的networkStatusForFlags方法重构:

复制代码 代码如下:

- (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags

{

if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)

{

return NotReachable;

}

BOOL retVal = NotReachable;

if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)

{

// if target host is reachable and no connection is required

// then we'll assume (for now) that your on Wi-Fi

retVal = ReachableViaWiFi;

}

if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) ||

(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0))

{

// ... and the connection is on-demand (or on-traffic) if the

// calling application is using the CFSocketStream or higher APIs

if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0)

{

// ... and no [user] intervention is needed

retVal = ReachableViaWiFi;

}

}

if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)

{

if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) {

if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {

retVal = ReachableVia3G;

if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {

retVal = ReachableVia2G;

}

}

}

}

return retVal;

}

//检查当前网络连接是否正常

-(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) {

printf("Error. Count not recover network reachability flagsn");

return NO;

}

BOOL isReachable = flags & kSCNetworkFlagsReachable;

BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;

return (isReachable && !needsConnection) ? YES : NO;

}

//检查网络连接类型

-(void)checkNetworktype:(id)sender{

NSString *connectionKind;

if ([self connectedToNetWork]) {

hostReach = [Reachability reachabilityWithHostName:@"www.google.com"];

switch ([hostReach currentReachabilityStatus]) {

case NotReachable:

connectionKind = @"没有网络链接";

break;

case ReachableViaWiFi:

connectionKind = @"当前使用的网络类型是WIFI";

break;

case ReachableVia3G:

connectionKind = @"当前使用的网络链接类型是WWAN(3G)";

break;

case ReachableVia2G:

connectionKind = @"当前使用的网络链接类型是WWAN(2G)";

break;

default:

break;

}

}else {

connectionKind = @"没有网络链接";

}

}

【使用Reachability类判断iOS设备的当前网络连接类型】相关文章:

iOS 8应用构建细节挖掘之应用启动流程

iOS应用中UILabel文字显示效果的常用设置总结

iOS开发中对文件目录的访问及管理的基本方法小结

React Native搭建iOS开发环境

iOS开发中使用Quartz2D绘图及自定义UIImageView控件

iOS开发中一些手写控件及其相关属性的使用

iOS开发中最有用关键的代码整合

详解iOS App开发中session和coockie的用户数据存储处理

iOS开发中使用UILabel设置字体的相关技巧小结

iOS开发中使用Quartz2D绘制上下文栈和矩阵的方法

精品推荐
分类导航