直接贴代码吧,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

IOS判断用户的网络类型(2/3/4G、wifi)相关推荐

  1. Reachability的用法 判断用户的网络状态

    1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 // 监听网络状态发生改变的通知 6 [[NSNotificationCenter defau ...

  2. iOS - 判断用户是否允许推送通知(iOS7/iOS8)

    (iOS8中用户开启的推送通知类型对应的是UIUserNotificationType(下边代码中UIUserNotificationSettings的types属性的类型),iOS7对应的是UIRe ...

  3. 在用户原有网络基础上,用wifi广告软件为用户搭建wifi营销平台方法

    传统技术思维是WiFi广告路由器必须带机上网,因而他们支持的用户数很小,并且后续售后人工成本非常高:wifi广告软件无线天的目标,只需要在网络中加入无线天一套软件支持就可以实现wifi营销平台,特别适 ...

  4. c语言蜂窝编程问题,【iOS开发】判断蜂窝网络类型及系统bug

    判断蜂窝网络类型 最近项目需求要判断当前蜂窝网络类型,查了一些资料,进行一个总结. 首先导入框架 #import 主要使用currentRadioAccessTechnology属性进行判断 CTTe ...

  5. iOS APP网络分析之rvictl(可以捕捉除了Wifi以外的网络类型)

    iOS应用(包括移动应用)的网络分析,一般采用将移动设备上的流量导入到PC机上,利用PC上成熟的数据包分析工具例如wireshark等来进行分析的方法. 总的来说,有以下三种方法: 一.在PC上设置网 ...

  6. 获取iPhone/iPad设备网络类型(2G,3G,4G,5G,WIFI)

    目前我们获取手机网络类型主要还是用的 AFNetwork 但是AFNetwork有个问题就是类型不够充分,只能四种类型 typedef NS_ENUM(NSInteger, AFNetworkReac ...

  7. 【iOS开发】---- Reachability 网络监测

    在开发的过程中,我们需要检测网络状态,比如当前网络状态(连接,断开),网络环境(2G/3G,WIFI)等.苹果提供了一个在iOS环境下检测网络用的库:Reachability.它能方便的监测网络状态, ...

  8. 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

    文章目录 一.获取 WIFI 状态 二.主动获取 WIFI 状态 三.被动获取 WIFI 状态 参考 Google 官方文档 : 优化电池续航时间 一.获取 WIFI 状态 在应用中执行某些操作 , ...

  9. Win11重置网络后找不到wifi的解决办法

    电脑网络无法连接已经是见怪不怪的问题了,可以试试网络重置的方法来恢复连接.但是有用户重置网络后找不到wifi了,这可怎么办?下面就来看看解决的办法,并不对所有电脑有效. Win11网络重置后没有wif ...

最新文章

  1. python 中sys.stdout.write 和 print sys.stdout的区别(转)
  2. 第1章 1.9计算机网络概述--OSI参考模型和网络安全
  3. linux智能电压表设计与实现,毕业论文 智能数字电压表设计.doc
  4. Vue第二部分(4): 嵌套路由和路由传参
  5. 视觉SLAM笔记(56) 位姿图优化
  6. java对象的我可变属性,不可变对象的所有属性都必须是最终的吗?
  7. AlexNet原理及tensorflow实现
  8. 作为餐饮店长最需要什么能力?
  9. html表单文本框作用,HTML表单的用法
  10. 《linux设备驱动开发详解》笔记——14 linux网络设备驱动
  11. noip2011——普及组——瑞士轮
  12. Astar算法基本概念及其实现
  13. 【2014.01】普林斯顿数学指南(第一卷) [英]Timothy Gowers编 齐民友译
  14. 同构 JavaScript 应用开发
  15. ae合成设置快捷键_AE脚本使用快捷键控制关键帧操作 Keyboard v1.2.2【资源分享1449】...
  16. EZEMC测试软件_EMI 和 EMC 仿真、测量和预兼容性测试
  17. 基于Qt的笛卡尔心形表白程序
  18. python爬虫:抓取道指成分股数据
  19. 如何科学有效地根治肾虚——下篇(如何有效治疗肾虚?)
  20. 从0到100全流程构建「数据指标体系」

热门文章

  1. fabric-smaple部署
  2. Python 回溯算法
  3. 解决Apache配置虚拟主机时出现403错误的问题
  4. 读书笔记 - 《重新定义公司:谷歌是如何运营的》
  5. Windows任务计划创建计划,定时执行PowerShell命令
  6. 模板资源管理器的使用
  7. 探讨增强现实(AR)基于模型的追踪技术
  8. linux minicom usb串口
  9. MongoDB的设计模式策略
  10. Django (auth模块、User对象、用户认证、线上-用户认证)