`
zcw_java
  • 浏览: 305724 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

判断网络所属2G、3G、WiFi

 
阅读更多
中国的iphone网络是区分2G和3G,要想获取当前的网络状态一直没有一个好的方法,网上给的例子也不尽让人满意最近闲来无事,仔细的研究Apple提供的
 Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
 NSLog(@"%d", [reach currentReachabilityStatus]); 
 return;

在currentReachabilityStatus函数中,我们注意到这样的输出
static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, c*****t char* comment)
{
#if kShouldPrintReachabilityFlags
NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n",
	 (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', 
	 (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-',
	 (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-',
	 (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-',
	 (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', 
	 (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-',
	 (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', 
	 (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-',
	 (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-',
	 comment 
	 );
#endif
}

当是wifi的时候输出R

当是3G的时候输出Rt

当是联通2G或者是移动的时候输出Rtc

在头文件定义如下:
typedef enum 
{ 
 	NotReachable = 0,
 	ReachableViaWiFi, 
 	ReachableVia3G, 
 	ReachableVia2G,//当前无法区分是联通的2G还是移动的2G
} NetworkStatus;

因此我就是以这个为判断条件的,重写Reachability的函数:
- (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags
{
	if ((flags & kSCNetworkReachabilityFlagsReachable) == 0)
	{ 
		 return NotReachable;
	}
	BOOL retVal = NotReachable;
	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 
 		retVal = ReachableViaWiFi;
	}
	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 
 			retVal = ReachableViaWiFi; 
 		} 
 	}
	if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) 
	{ 
 		retVal = ReachableVia3G;
 		if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) 
		{ 
			if((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection)
 			{ 
 				retVal = ReachableVia2G;
 			} 
 		} 
	}
	return retVal;
}

这样就可以正确的区分是2G,3G,wifi网络,这只支持中国地区,其他地区未考虑。
分享到:
评论

相关推荐

    android开发判断2G/3G/WIFI

    在Android开发中,判断设备当前使用的网络类型是2G、3G还是WiFi是一项常见的需求,这对于网络优化、数据使用监控以及用户体验提升等方面至关重要。本文将详细介绍如何在Android应用中实现这一功能。 首先,我们需要...

    iOS 判断网络状态(包括2G,3G,4G)

    例如,判断2G、3G、4G等移动数据网络,可以这样实现: ```swift func networkStatusChanged(_ reachability: AFNetworkReachabilityManager) { switch reachability.networkReachabilityStatus { case .not...

    Android实时判断网络连接(wifi/2G/3G/4G)

    通过以上步骤,你的应用程序就能实时监测到Android设备的网络连接状态(包括Wi-Fi、2G、3G、4G)以及数据连接所属的网络运营商。这将帮助你更好地处理网络相关的功能和异常情况,提升用户体验。

    iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi

    在iOS开发中,判断设备当前所连接的网络环境是2G、3G、4G、5G或WiFi是一项常见的需求。这有助于优化应用性能,比如根据网络条件选择合适的图片质量或者视频流分辨率。本文将详细介绍如何利用苹果提供的Core ...

    2G与3G参数策略及网络优化

    ### 2G与3G参数策略及网络优化 #### WCDMA网络优化,2G与3G参数策略,相互转换 随着通信技术的发展,2G(第二代移动通信技术)和3G(第三代移动通信技术)网络之间的互操作性和网络优化变得尤为重要。本文将详细...

    WiFi及2G、3G、4G网络介绍.docx

    WiFi 及 2G、3G、4G 网络介绍 WiFi 及 2G、3G、4G 网络介绍中,涵盖了四个主要的知识点: WiFi、2G、3G 和 4G。在介绍中,我们可以了解到每种技术的基本概念、特点和应用场景。 首先,WiFi 是一种无线网络技术,...

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

    在Android开发中,判断用户当前使用的移动数据网络类型(2G、3G、4G)是常见的需求。这有助于优化应用程序的行为,例如限制在低速网络下的数据传输或提供不同的用户体验。以下是一些关键知识点,关于如何实现这一...

    Android App切换网络模式(4G,3G,2G,飞行模式)

    在Android平台上,开发一款应用程序需要实现网络模式的切换功能,如4G、3G、2G和飞行模式,是一项常见的需求。这些功能可以帮助用户在不同的网络环境下管理数据连接,节省流量,或者在必要时完全断开网络连接。下面...

    2G 3G 4G 认证与加密(空口加密) 算法调研报告

    本调研报告建立在大量阅读论文的基础上,总结了2G,3G,4G的认证与空口加密算法的具体实现和三者的变化和比较。2G主要介绍GSM系统的认证算法COMP128以及A5算法,3G主要介绍f8算法及双向认证模式;4G介绍认证和加密在3G...

    2G,3G,4G移动通信测试信号生成代码

    在移动通信领域,2G、3G和4G技术代表了不同代的无线通信标准,它们各自具有不同的特性和功能。这份名为“2G,3G,4G移动通信测试信号生成代码”的MATLAB代码资源,是针对这些通信标准进行仿真和测试的重要工具。 2G...

    2G与3G的区别1

    ### 2G与3G的区别 #### 一、2G与3G的技术背景与定义 - **2G(第二代移动通信系统)**:是相对于第一代模拟制式的蜂窝电话而言,采用数字通信技术,主要提供了语音通话和基本的数据服务(如短信、彩信等)。2G标准...

    android获取以太网,2g,3g,4g和wifi类型

    android获取以太网,2g,3g,4g和wifi类型,可以直接调用里面的getNetWorkType方法获取android端的联网类型

    Phonegap判断网络类型及状态

    cordova 3.4 版本的API 判断网络的连接状态 调用phonegap API 判断网络类型 :2G 3G 4G wifi 等等 博客: http://blog.csdn.net/aaawqqq/article/details/22220319

    iOS 判断网络状态(包括2G,3G,4G)简单DEMO

    本DEMO,"iOS 判断网络状态(包括2G,3G,4G)简单DEMO",提供了一个基于AFNetworking库的简单实现方案。AFNetworking是一款广泛使用的Objective-C网络库,它为iOS和Mac OS X应用提供了强大的HTTP网络请求功能。 首先,...

    2G 3G融合组网.pdf

    2. **覆盖融合**:结合2G与3G网络的覆盖范围,通过2G网络保障全区域的基本覆盖,而3G则专注于热点区域的深度覆盖,提供高速数据服务。 3. **核心网控制与业务平台整合**:通过核心网控制用户流,实现2G与3G用户间的...

    2G-3G handover

    2G到3G的切换,即2G-3G handover,是移动通信网络中一个重要的过程,它涉及了从第二代(2G)通信系统向第三代(3G)通信系统的平稳过渡。这一过程对于提供无缝的用户体验和提高数据传输速率至关重要。在3G网络中,...

    2G 3G减频退网白皮书精品报告2020.rar

    2G(第二代)和3G(第三代)网络技术,作为移动通信发展的里程碑,曾经为全球用户带来了前所未有的便利。然而,随着4G LTE(第四代长期演进)和5G(第五代)技术的崛起,2G和3G网络逐渐面临减频退网的命运。这份报告...

    2g.3g.4g对比分析.pptx

    2G、3G、4G的由来 不同运营商的网络分布 从网络侧看2G、3G、4G 发展趋势

    基于Objective-C+C语言开发的网速实时监测+2G/3G/4G/wifi检测+源码(期末大作业&课程设计&项目开发)

    基于Objective-C+C语言开发的网速实时监测+2G/3G/4G/wifi检测+源码,...方便检查检测网络的2G、3G、4G、WiFi的网速问题。单独的ping测试功能、Traceroute检测功能、DNS检测功能、端口检测等。简单易用的网络检测工具。

    3G、2G之间的互操作

    3G和2G的核心网络架构不同,实现互操作需要在核心网络中建立相应的接口和协议,如Gn和Gp接口在GPRS网络中的应用,以及CAMEL和MAP协议等在电路交换和分组交换网络间提供服务连续性。 5. 数据传输的连续性: 为了保证...

Global site tag (gtag.js) - Google Analytics