直接贴代码吧,ios7之后是获取的较为准确,7以下我拿iphone5测试的是无法区分3g/2g。连iphone4都能升到7.1.4,而且目前主流的设备7以下的系统已经很少了,这个方案尽管不太完美,但影响不会太大

 

#import <CoreTelephony/CTTelephonyNetworkInfo.h>
 
string GetNetWorkType()
{
    string 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, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;
   
    //获得连接的标志
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);
   
    //如果不能获取连接标志,则不能连接网络,直接返回
    if (!didRetrieveFlags)
    {
        return strNetworkType;
    }
   
   
    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 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
        {
            CTTelephonyNetworkInfo * info = [[CTTelephonyNetworkInfo alloc] init];
            NSString *currentRadioAccessTechnology = info.currentRadioAccessTechnology;
           
            if (currentRadioAccessTechnology)
            {
                if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE])
                {
                    strNetworkType =  "4G";
                }
                else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnology isEqualToString: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 == "") {
        strNetworkType = "WWAN";
    }
   
    NSLog( @"GetNetWorkType() strNetworkType :  %s", strNetworkType.c_str());
   
    return strNetworkType;
}

 

参考链接:

http://blog.csdn.net/justinjing0612/article/details/8741261

http://www.jianshu.com/p/efcfa3c87306

http://www.cnblogs.com/xiaohuzi1990/p/4341655.html

最新文章

  1. The communication of Linux Server and Localtion
  2. Theano入门神经网络(二) 实现一个XOR门
  3. Spring 通过maven pom文件配置初始化
  4. Sqoop2入门之导入关系型数据库数据到HDFS上(sqoop2-1.99.4版本)
  5. 【推荐】oc解析HTML数据的类库(爬取网页数据)
  6. 网站后台的lnmp启动与重启
  7. laravel, Composer和autoloading
  8. [原] GLES在iOS和Android上的不同
  9. 查找类class所在的jar包
  10. Investigation of Different Nets and Layers
  11. android_handler(三)
  12. DevExpress ASP.NET 使用经验谈(2)-XPO对象的使用(使用默认数据连接)
  13. poj 3399 Product(数学)
  14. 使用IGP和BGP的配合达到降低路由容量目的的实验与总结
  15. choose the max from numbers, use scanf and if else (v1:21.9.2017,v2:23.9.2017)
  16. sql server导出数据结构
  17. 前端入门3-CSS基础
  18. java8 新特性 Optional容器类
  19. workflow的简介
  20. saltstack在jianja模板中,执行salt函数来获取某些变量的值,并且将配置写入到配置文件中?

热门文章

  1. 关于获取Windows下性能参数的总结
  2. has the wrong structure
  3. H5中标签Canvas实现图像动画
  4. php 会话控制(禁用cookie后session为什么会失效?)
  5. 【Vue实战之路】一、Vue-cli入门及Vue工程目录全解。
  6. [mysql] update……from……
  7. 信号量Semaphore的使用
  8. BZOJ2924 : [Poi1998]Flat broken lines
  9. vs 2010 :类型化数据集DataSet应用
  10. 没用过的函数 GetHomePath - 获取用户程序数据目录