您的位置:首页 > 理论基础 > 计算机网络

iOS7+ 获取网络类型

2016-06-21 11:33 651 查看
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

#import "MXGetNetType.h"

@implementation MXGetNetType

+(NSString *)GetNetWorkType

{

    NSString *strNetworkType =
@"";

    

   
//创建零地址,0.0.0.0的地址表示查询本机的网络连接状态

    struct sockaddr_storage zeroAddress;

    

    bzero(&zeroAddress,
sizeof(zeroAddress));

    zeroAddress.ss_len =
sizeof(zeroAddress);

    zeroAddress.ss_family =
AF_INET;

    

    // Recover reachability flags

    SCNetworkReachabilityRef defaultRouteReachability =SCNetworkReachabilityCreateWithAddress(NULL, (structsockaddr
*)&zeroAddress);

    SCNetworkReachabilityFlags flags;

    

   
//获得连接的标志

    BOOL didRetrieveFlags =
SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);

    CFRelease(defaultRouteReachability);

    

   
//如果不能获取连接标志,则不能连接网络,直接返回

    if (!didRetrieveFlags)

    {

        return strNetworkType;

    }

    //没有网络

    if ((flags &
kSCNetworkReachabilityFlagsReachable) == 0)

    {

        return @"";

    }

    

    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

        strNetworkType = @"WIFI";

    }

    

    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

            strNetworkType = @"WIFI";

        }

    }

    

    if ((flags &kSCNetworkReachabilityFlagsIsWWAN) ==kSCNetworkReachabilityFlagsIsWWAN)

    {

        if ([[[UIDevicecurrentDevice]systemVersion]floatValue]
>=7.0)

        {

            CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfoalloc]init];

            NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;

            

            if (currentRadioAccessTechnology)

            {

                if ([currentRadioAccessTechnologyisEqualToString:CTRadioAccessTechnologyLTE])

                {

                    strNetworkType =  @"4G";

                }

                else
if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnologyisEqualToString:CTRadioAccessTechnologyGPRS])

                {

                    strNetworkType =  @"2G";

                }

                else

                {

                    strNetworkType =  @"3G";

                }

            }

        }

        else

        {

            if((flags &kSCNetworkReachabilityFlagsReachable) ==kSCNetworkReachabilityFlagsReachable)

            {

                if ((flags &kSCNetworkReachabilityFlagsTransientConnection) ==kSCNetworkReachabilityFlagsTransientConnection)

                {

                    if((flags &kSCNetworkReachabilityFlagsConnectionRequired) ==kSCNetworkReachabilityFlagsConnectionRequired)

                    {

                        strNetworkType = @"2G";

                    }

                    else

                    {

                        strNetworkType = @"3G";

                    }

                }

            }

        }

    }

    

    

    if ([strNetworkType
isEqualToString:@""]) {

        strNetworkType = @"WWAN";

    }

    

    NSLog(@"GetNetWorkType() strNetworkType :  %@", strNetworkType);

    

    return strNetworkType;

}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: