• iphone判断当前网络连接类型


    ​Reachability只能区分出无网络、wifi和wwan(2G&2.5G&3G)类型的网络连接类型,只需重构networkStatusForFlags方法,即可详细区分出2G与3G网络 ​

    1. [代码][C/C++]代码     
    //Reachability.m 中 networkStatusForFlags 方法重构
    - (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags
    {
    if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
    {
    return NotReachable;
    }
        
    BOOL retVal = NotReachable;

    if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
    {http://www.huiyi8.com/jiaoben/​
    // 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)
            {jquery特效
                // ... 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 ");
    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 = @"没有网络链接";
    }
    }

  • 相关阅读:
    【Java集合】试读LinkedList源码
    【Java集合】试读ArrayList源码
    类加载器ClassLoader的理解
    Spring中Bean的不同配置方式
    Spring中Bean的生命周期
    关于反射的一点理解
    Vector与ArrayList 的理解
    java多态的实现原理(JVM调用过程)(综合多篇文章,参考见文末)
    并发编程的模型分类(转载于https://link.zhihu.com/?target=http%3A//www.54tianzhisheng.cn/2018/02/28/Java-Memory-Model/)强烈推荐!
    Thread线程类
  • 原文地址:https://www.cnblogs.com/xkzy/p/3810817.html
Copyright © 2020-2023  润新知