源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

使用Reachability类判断iOS设备的当前网络连接类型

  • 时间:2020-12-26 11:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:使用Reachability类判断iOS设备的当前网络连接类型
(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).用法
[u]复制代码[/u] 代码如下:
-(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方法重构:
[u]复制代码[/u] 代码如下:
- (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 flags\n");         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 = @"没有网络链接";     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部