中国的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、4G等移动数据网络,可以这样实现: ```swift func networkStatusChanged(_ reachability: AFNetworkReachabilityManager) { switch reachability.networkReachabilityStatus { case .not...
通过以上步骤,你的应用程序就能实时监测到Android设备的网络连接状态(包括Wi-Fi、2G、3G、4G)以及数据连接所属的网络运营商。这将帮助你更好地处理网络相关的功能和异常情况,提升用户体验。
在iOS开发中,判断设备当前所连接的网络环境是2G、3G、4G、5G或WiFi是一项常见的需求。这有助于优化应用性能,比如根据网络条件选择合适的图片质量或者视频流分辨率。本文将详细介绍如何利用苹果提供的Core ...
### 2G与3G参数策略及网络优化 #### WCDMA网络优化,2G与3G参数策略,相互转换 随着通信技术的发展,2G(第二代移动通信技术)和3G(第三代移动通信技术)网络之间的互操作性和网络优化变得尤为重要。本文将详细...
WiFi 及 2G、3G、4G 网络介绍 WiFi 及 2G、3G、4G 网络介绍中,涵盖了四个主要的知识点: WiFi、2G、3G 和 4G。在介绍中,我们可以了解到每种技术的基本概念、特点和应用场景。 首先,WiFi 是一种无线网络技术,...
在Android开发中,判断用户当前使用的移动数据网络类型(2G、3G、4G)是常见的需求。这有助于优化应用程序的行为,例如限制在低速网络下的数据传输或提供不同的用户体验。以下是一些关键知识点,关于如何实现这一...
在Android平台上,开发一款应用程序需要实现网络模式的切换功能,如4G、3G、2G和飞行模式,是一项常见的需求。这些功能可以帮助用户在不同的网络环境下管理数据连接,节省流量,或者在必要时完全断开网络连接。下面...
本调研报告建立在大量阅读论文的基础上,总结了2G,3G,4G的认证与空口加密算法的具体实现和三者的变化和比较。2G主要介绍GSM系统的认证算法COMP128以及A5算法,3G主要介绍f8算法及双向认证模式;4G介绍认证和加密在3G...
在移动通信领域,2G、3G和4G技术代表了不同代的无线通信标准,它们各自具有不同的特性和功能。这份名为“2G,3G,4G移动通信测试信号生成代码”的MATLAB代码资源,是针对这些通信标准进行仿真和测试的重要工具。 2G...
### 2G与3G的区别 #### 一、2G与3G的技术背景与定义 - **2G(第二代移动通信系统)**:是相对于第一代模拟制式的蜂窝电话而言,采用数字通信技术,主要提供了语音通话和基本的数据服务(如短信、彩信等)。2G标准...
android获取以太网,2g,3g,4g和wifi类型,可以直接调用里面的getNetWorkType方法获取android端的联网类型
cordova 3.4 版本的API 判断网络的连接状态 调用phonegap API 判断网络类型 :2G 3G 4G wifi 等等 博客: http://blog.csdn.net/aaawqqq/article/details/22220319
本DEMO,"iOS 判断网络状态(包括2G,3G,4G)简单DEMO",提供了一个基于AFNetworking库的简单实现方案。AFNetworking是一款广泛使用的Objective-C网络库,它为iOS和Mac OS X应用提供了强大的HTTP网络请求功能。 首先,...
2. **覆盖融合**:结合2G与3G网络的覆盖范围,通过2G网络保障全区域的基本覆盖,而3G则专注于热点区域的深度覆盖,提供高速数据服务。 3. **核心网控制与业务平台整合**:通过核心网控制用户流,实现2G与3G用户间的...
2G到3G的切换,即2G-3G handover,是移动通信网络中一个重要的过程,它涉及了从第二代(2G)通信系统向第三代(3G)通信系统的平稳过渡。这一过程对于提供无缝的用户体验和提高数据传输速率至关重要。在3G网络中,...
2G(第二代)和3G(第三代)网络技术,作为移动通信发展的里程碑,曾经为全球用户带来了前所未有的便利。然而,随着4G LTE(第四代长期演进)和5G(第五代)技术的崛起,2G和3G网络逐渐面临减频退网的命运。这份报告...
2G、3G、4G的由来 不同运营商的网络分布 从网络侧看2G、3G、4G 发展趋势
基于Objective-C+C语言开发的网速实时监测+2G/3G/4G/wifi检测+源码,...方便检查检测网络的2G、3G、4G、WiFi的网速问题。单独的ping测试功能、Traceroute检测功能、DNS检测功能、端口检测等。简单易用的网络检测工具。
3G和2G的核心网络架构不同,实现互操作需要在核心网络中建立相应的接口和协议,如Gn和Gp接口在GPRS网络中的应用,以及CAMEL和MAP协议等在电路交换和分组交换网络间提供服务连续性。 5. 数据传输的连续性: 为了保证...