前言:

  在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验.

但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也分为2G/3G/4G等不同制式.而不同的网络制式又对用户体验产生

较为明显的影响(对于依赖网络的项目而言).因此很有必要对不同的网络制式作相应的优化.

  而在iOS当中,无论是苹果官方提供的Reachability类还是较为常用的第三方网络类AFNetworking,它们提供的网络环境判断也仅限

于WIFI/数据,因此我们需要其他方式去获得客户端更详细的网络环境.

  CoreTelephony.framework中提供了CTTelephonyNetworkInfo这个类.这个类是iOS7以后才出现的,在使用这个类之前我们需要

导入CoreTelephony.framework

然后在工程中导入相应地.h文件

#import <CoreTelephony/CTTelephonyNetworkInfo.h>  //为判断网络制式的主要文件
#import <CoreTelephony/CTCarrier.h> //添加获取客户端运营商 支持

实现代码如下:

 CTTelephonyNetworkInfo *networkStatus = [[CTTelephonyNetworkInfo alloc]init];  //创建一个CTTelephonyNetworkInfo对象
NSString *currentStatus = networkStatus.currentRadioAccessTechnology; //获取当前网络描述

通过该类的.h文件可以看到.有以下的描述信息:

/*
* Radio Access Technology values
*/
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyGPRS __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyEdge __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyWCDMA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyHSDPA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyHSUPA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMA1x __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORev0 __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORevA __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyCDMAEVDORevB __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyeHRPD __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyLTE __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);

其实这些都是我们比较熟悉的网络制式类型了.取到这些描述信息后,我们就可以用他们来做判断了..

    if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyGPRS"]){
//GPRS网络
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyEdge"]){
//2.75G的EDGE网络
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyWCDMA"]){
//3G WCDMA网络
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSDPA"]){
//3.5G网络
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSUPA"]){
//3.5G网络
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMA1x"]){
//CDMA2G网络
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORev0"]){
//CDMA的EVDORev0(应该算3G吧?)
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevA"]){
//CDMA的EVDORevA(应该也算3G吧?)
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevB"]){
//CDMA的EVDORev0(应该还是算3G吧?)
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyeHRPD"]){
//HRPD网络
return;
}
if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyLTE"]){
//LTE4G网络
return;
}

别看代码多..其实都一个样,只是状态比较多而已.

而我们取2G/3G/4G的话..就不停的判断吧

运营商名字:

//用回上面的对象
currentStatus.subscriberCellularProvider.carrierName

这里也做了个DEMO,基于AFNetworking的判断,可以判断 有无网络,WIFI网络,移动数据网络 (主要描述写在NetworkStatusMonitor.h)

调用方法:

    [NetworkStatusMonitor StartWithBlock:^(NSInteger NetworkStatus) {
//NetworkStatus为枚举值
}];

http://download.csdn.net/detail/nicky2k8/8605057  DEMO在这里下..

利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G)的更多相关文章

  1. iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G)

    前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也 ...

  2. iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G) by徐文棋

    前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也 ...

  3. android 获取网络类型名称2G 3G 4G wifi

    首先工程Manifest文件要引用: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ...

  4. Android 判断用户2G/3G/4G移动数据网络

    Android 判断用户2G/3G/4G移动数据网络 在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以 ...

  5. 转:Android 判断用户2G/3G/4G移动数据网络

    Android 判断用户2G/3G/4G移动数据网络 在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以 ...

  6. (转)Android 判断用户2G/3G/4G移动数据网络

    在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需(要根据用户当前网络情况来做一些调整的,也可以在 App 的设置模块里,让用户自己选择,在 2G ...

  7. iOS 中如何判断当前是2G/3G/4G/5G/WiFi

    5G 什么的,还得等苹果API更新啊,不过将来还是这个处理过程就是了. 关于判断当前的网络环境是2G/3G/4G,这个问题以前经常看到,最近在一工程里看到了如果判断的API.而在撸WebRTC音视频通 ...

  8. iOS完美的网络状态判断工具

    大多数App都严重依赖于网络,一款用户体验良好的的app是必须要考虑网络状态变化的.iOSSinger下一般使用Reachability这个类来检测网络的变化. Reachability 这个是苹果开 ...

  9. ios如何获取手机的网络状态和运营商名称

    本文转载至 http://blog.csdn.net/justinjing0612/article/details/38313747 以前获取手机的网络状态和运营商名称都是似有API, 现在我们可以大 ...

随机推荐

  1. uva 10561 sg定理

    Problem C Treblecross Input: Standard Input Output: Standard Output Time Limit: 4 Seconds Treblecros ...

  2. 关于a标签的onclick和href谁先执行的问题

    今天上午遇到一个问题,我想在a标签跳转的时候增加一些程序上的判断,但又不会影响a标签的正常跳转,于是就有了这篇文章. 我的具体代码是这样的: <a href="http://www.m ...

  3. Aspose.Words使用代码插入表格

    Aspose.Words是一款功能强大的word文档处理控件,在不需要安装word的条件下,可进行word的创建,修改,转换等操作. Aspose.Words可以简单使用该产品提供的DocumentB ...

  4. Scrapy学习-8-ItemLoader

    ItemLoader使用 作用 方便管理维护重用xpath或css规则   实例 itemloader+图片处理 # items.py import scrapy from scrapy.loader ...

  5. Servlet 2.4 规范之第二篇:Servlet接口

    Servlet接口是Servlet API的最核心抽象类.所有的servlets都直接实现了这个接口,或者以更通用的方式继承了这个接口的实现类.Servlet API自带了两个实现了Servlet接口 ...

  6. 属性font-family:Font property font-family does not have generic default

    以前定义字体都是用的常用的字体,也没注意过会有这个提示,昨天在写界面的时候重新定义了一个本地没有的字体,发现会有提示. W3C的文档: font-family:<family-name>, ...

  7. 洛谷——P1290 欧几里德的游戏

    P1290 欧几里德的游戏 题目描述 欧几里德的两个后代Stan和Ollie正在玩一种数字游戏,这个游戏是他们的祖先欧几里德发明的.给定两个正整数M和N,从Stan开始,从其中较大的一个数,减去较小的 ...

  8. python的websocket实现Tornado

    1.使用flask的扩展: pip install flask-socketio 2.Tornado提供较好的ws(websocket)支持 参考:1.http://www.jianshu.com/p ...

  9. BUPT复试专题—最近公共祖先(2014软院)

    题目描述 给出一棵有N个节点的有根树TREE(根的编号为1),对于每组查询,请输出树上节点u和v的最近公共祖先. 最近公共祖先:对于有向树TREE的两个结点u,v.最近公共祖先LCA(TREE u,v ...

  10. BUPT复试专题—找K小数(2011)

    https://www.nowcoder.com/practice/204dfa6fcbc8478f993d23f693189ffd?tpId=67&tqId=29637&rp=0&a ...