iOS7+ 获取网络类型

来源:互联网 发布:同步带轮生成软件 编辑:程序博客网 时间:2024/05/20 20:01

#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

0 0
原创粉丝点击