利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G)
2016-02-01 10:51
573 查看
前言:
在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验.
但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也分为2G/3G/4G等不同制式.而不同的网络制式又对用户体验产生
较为明显的影响(对于依赖网络的项目而言).因此很有必要对不同的网络制式作相应的优化.
而在iOS当中,无论是苹果官方提供的Reachability类还是较为常用的第三方网络类AFNetworking,它们提供的网络环境判断也仅限
于WIFI/数据,因此我们需要其他方式去获得客户端更详细的网络环境.
CoreTelephony.framework中提供了CTTelephonyNetworkInfo这个类.这个类是iOS7以后才出现的,在使用这个类之前我们需要
导入CoreTelephony.framework
然后在工程中导入相应地.h文件
实现代码如下:
通过该类的.h文件可以看到.有以下的描述信息:
其实这些都是我们比较熟悉的网络制式类型了.取到这些描述信息后,我们就可以用他们来做判断了..
别看代码多..其实都一个样,只是状态比较多而已.
而我们取2G/3G/4G的话..就不停的判断吧
取运营商名字:
这里也做了个DEMO,基于AFNetworking的判断,可以判断 有无网络,WIFI网络,移动数据网络 (主要描述写在NetworkStatusMonitor.h)
调用方法:
http://download.csdn.net/detail/nicky2k8/8605057 DEMO在这里下..
在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验.
但通常我们只会判断用户是在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在这里下..
相关文章推荐
- openstack(liberty):部署实验平台(一,基础网络环境搭建)
- java 网络编程(三)---TCP的基础级示例
- HTTPS 原理解析(转)
- TCP初始化序列号ISN
- java 网络编程(二)----UDP基础级的示例
- 网络模拟器WANem使用配置图文教程
- 两种请求方式URLHttpconnection 和Httpclient提交表单 网络篇(二)
- 原生 NSURL 网络请求 GET POST
- 深入分析JavaWeb 4 -- Http协议
- 想成为网络安全技术爱好者(可能是黑客)的话,需要看什么书?
- Linux极客命令(网络篇)
- HTTPS 原理解析
- SYN标志
- A20网络机顶盒移植4.5内核+U-Boot+rootfs
- 通读AFN③--HTTPS访问控制(AFSecurityPolicy),Reachability(AFNetworkReachabilityManager)
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- ntpdate——linux firefox 访问163邮箱 失败 https proload
- (OK-HALF) To Find a Rogue DHCP Server—tcpdump/dhclient—nmap
- acl 3.1.2版本发布,网络通信与服务器编程框架
- Linux环境下网络编程杂谈