IOS判断用户的网络类型(2/3/4G、wifi)
直接贴代码吧,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)相关推荐
- Reachability的用法 判断用户的网络状态
1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 5 // 监听网络状态发生改变的通知 6 [[NSNotificationCenter defau ...
- iOS - 判断用户是否允许推送通知(iOS7/iOS8)
(iOS8中用户开启的推送通知类型对应的是UIUserNotificationType(下边代码中UIUserNotificationSettings的types属性的类型),iOS7对应的是UIRe ...
- 在用户原有网络基础上,用wifi广告软件为用户搭建wifi营销平台方法
传统技术思维是WiFi广告路由器必须带机上网,因而他们支持的用户数很小,并且后续售后人工成本非常高:wifi广告软件无线天的目标,只需要在网络中加入无线天一套软件支持就可以实现wifi营销平台,特别适 ...
- c语言蜂窝编程问题,【iOS开发】判断蜂窝网络类型及系统bug
判断蜂窝网络类型 最近项目需求要判断当前蜂窝网络类型,查了一些资料,进行一个总结. 首先导入框架 #import 主要使用currentRadioAccessTechnology属性进行判断 CTTe ...
- iOS APP网络分析之rvictl(可以捕捉除了Wifi以外的网络类型)
iOS应用(包括移动应用)的网络分析,一般采用将移动设备上的流量导入到PC机上,利用PC上成熟的数据包分析工具例如wireshark等来进行分析的方法. 总的来说,有以下三种方法: 一.在PC上设置网 ...
- 获取iPhone/iPad设备网络类型(2G,3G,4G,5G,WIFI)
目前我们获取手机网络类型主要还是用的 AFNetwork 但是AFNetwork有个问题就是类型不够充分,只能四种类型 typedef NS_ENUM(NSInteger, AFNetworkReac ...
- 【iOS开发】---- Reachability 网络监测
在开发的过程中,我们需要检测网络状态,比如当前网络状态(连接,断开),网络环境(2G/3G,WIFI)等.苹果提供了一个在iOS环境下检测网络用的库:Reachability.它能方便的监测网络状态, ...
- 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )
文章目录 一.获取 WIFI 状态 二.主动获取 WIFI 状态 三.被动获取 WIFI 状态 参考 Google 官方文档 : 优化电池续航时间 一.获取 WIFI 状态 在应用中执行某些操作 , ...
- Win11重置网络后找不到wifi的解决办法
电脑网络无法连接已经是见怪不怪的问题了,可以试试网络重置的方法来恢复连接.但是有用户重置网络后找不到wifi了,这可怎么办?下面就来看看解决的办法,并不对所有电脑有效. Win11网络重置后没有wif ...
最新文章
- python 中sys.stdout.write 和 print sys.stdout的区别(转)
- 第1章 1.9计算机网络概述--OSI参考模型和网络安全
- linux智能电压表设计与实现,毕业论文 智能数字电压表设计.doc
- Vue第二部分(4): 嵌套路由和路由传参
- 视觉SLAM笔记(56) 位姿图优化
- java对象的我可变属性,不可变对象的所有属性都必须是最终的吗?
- AlexNet原理及tensorflow实现
- 作为餐饮店长最需要什么能力?
- html表单文本框作用,HTML表单的用法
- 《linux设备驱动开发详解》笔记——14 linux网络设备驱动
- noip2011——普及组——瑞士轮
- Astar算法基本概念及其实现
- 【2014.01】普林斯顿数学指南(第一卷) [英]Timothy Gowers编 齐民友译
- 同构 JavaScript 应用开发
- ae合成设置快捷键_AE脚本使用快捷键控制关键帧操作 Keyboard v1.2.2【资源分享1449】...
- EZEMC测试软件_EMI 和 EMC 仿真、测量和预兼容性测试
- 基于Qt的笛卡尔心形表白程序
- python爬虫:抓取道指成分股数据
- 如何科学有效地根治肾虚——下篇(如何有效治疗肾虚?)
- 从0到100全流程构建「数据指标体系」