zoukankan      html  css  js  c++  java
  • 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)
        {
            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 ");
            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 = @"没有网络链接";
        }
    }
  • 相关阅读:
    POJ-2096-Collecting Bugs(概率DP)
    2019ICPC南京网络赛总结
    LOJ-6285-数列分块入门9
    LOJ-6284-数列分块入门8
    LOJ-6283-数列分块7
    bzoj2049: [Sdoi2008]Cave 洞穴勘测
    bzoj1010: [HNOI2008]玩具装箱toy
    bzoj1597: [Usaco2008 Mar]土地购买
    bzoj1233: [Usaco2009Open]干草堆tower 单调队列优化dp
    bzoj2442&&codevs4654 单调队列优化dp
  • 原文地址:https://www.cnblogs.com/oceansea/p/5949319.html
Copyright © 2011-2022 走看看