iphone判断当前网络连接类型
eachability只能区分出无网络、wifi和wwan(2G&2.5G&3G)类型的网络连接类型,只需重构networkStatusForFlags方法,即可详细区分出2G与3G网络 
 
 [代码] 
悦德财富:https://www.yuedecaifu.com
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | //Reachability.m 中 networkStatusForFlags 方法重构- (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags{    if((flags & kSCNetworkReachabilityFlagsReachable) == 0)    {        returnNotReachable;    }        BOOLretVal = 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;                }            }        }    }    returnretVal;}//检查当前网络连接是否正常-(BOOL)connectedToNetWork{    structsockaddr_in zeroAddress;    bzero(&zeroAddress, sizeof(zeroAddress));    zeroAddress.sin_len = sizeof(zeroAddress);    zeroAddress.sin_family = AF_INET;        SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (structsockaddr *)&zeroAddress);    SCNetworkReachabilityFlags flags;        BOOLdidRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);    CFRelease(defaultRouteReachability);        if(!didRetrieveFlags) {        printf("Error. Count not recover network reachability flags\n");        returnNO;    }        BOOLisReachable = flags & kSCNetworkFlagsReachable;    BOOLneedsConnection = 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]) {            caseNotReachable:                connectionKind = @"没有网络链接";                break;            caseReachableViaWiFi:                connectionKind = @"当前使用的网络类型是WIFI";                break;            caseReachableVia3G:                connectionKind = @"当前使用的网络链接类型是WWAN(3G)";                break;            caseReachableVia2G:                connectionKind = @"当前使用的网络链接类型是WWAN(2G)";                break;                default:                break;        }    }else{        connectionKind = @"没有网络链接";    }} | 
 
                    
                     
                    
                 
                    
                 
                
            
         
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号