中国的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网络
注册广播实时监测当前手机的连接网络(wifi/2G/3G/4G)以及可以检测当前数据连接所属的网络运行商(移动/电信/联通)
本调研报告建立在大量阅读论文的基础上,总结了2G,3G,4G的认证与空口加密算法的具体实现和三者的变化和比较。2G主要介绍GSM系统的认证算法COMP128以及A5算法,3G主要介绍f8算法及双向认证模式;4G介绍认证和加密在3G...
WCDMA网络优化,2G与3G参数策略,相互转换
这是一份能生成2G、3G、4G测试信号的matlab代码,能生成LTE、WCDMA、TD-SCDMA、CDMA2000、WiMax等多种移动通信测试信号。除了能生成单载波信号,也能生成多载波信号。
2G与3G的区别
主要介绍了Android判断用户2G/3G/4G移动数据网络的方法,感兴趣的小伙伴们可以参考一下
Android App实现切换网络模式 4G网络 3G网络 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
基于AFNetworking的网络判断 iOS 网络状态(包括2G,3G,4G)
2G 3G 4G频谱资源分配
2G 3G融合组网.pdf
WiFi及2G、3G、4G网络介绍.docx
主要介绍了Android判断网络类型的方法,可实现判断2g,3g还是wifi的功能,结合实例形式分析了Android针对网络类型的相关判定技巧,需要的朋友可以参考下
2G、3G、4G的由来 不同运营商的网络分布 从网络侧看2G、3G、4G 发展趋势
MTK 2G 3G 4G校准文件
基于Objective-C+C语言开发的网速实时监测+2G/3G/4G/wifi检测+源码,...方便检查检测网络的2G、3G、4G、WiFi的网速问题。单独的ping测试功能、Traceroute检测功能、DNS检测功能、端口检测等。简单易用的网络检测工具。
2G向3G的演进过程 2G向3G的演进过程 2G向3G的演进过程
借助NFNetworking 详细判断网络类型 2G 3G 4G WIFI 等等许多种类型,简单易用。