关于获取当前网络是属于2G还是3G(极其简单)

中国的iphone网络是区分2G和3G,要想获取当前的网络状态一直没有一个好的方法,网上给的例子也不尽让人满意最近闲来无事,仔细的研究Apple提供的例子:Reachability

通过如下的代码:

[cpp]  view plain copy
  1. Reachability *reach [Reachability reachabilityWithHostName:@"www.apple.com"];  
  2. NSLog(@"%d"[reach currentReachabilityStatus]);   
  3. return 

在currentReachabilityStatus函数中,我们注意到这样的输出:

[cpp]  view plain copy
  1. static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, c*****t charcomment)  
  2.  
  3. #if kShouldPrintReachabilityFlags  
  4. NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n" 
  5.      (flags kSCNetworkReachabilityFlagsIsWWAN) 'W' '-'  
  6.      (flags kSCNetworkReachabilityFlagsReachable) 'R' '-' 
  7.      (flags kSCNetworkReachabilityFlagsTransientConnection) 't' '-' 
  8.      (flags kSCNetworkReachabilityFlagsConnectionRequired) 'c' '-' 
  9.      (flags kSCNetworkReachabilityFlagsConnectionOnTraffic) 'C' '-'  
  10.      (flags kSCNetworkReachabilityFlagsInterventionRequired) 'i' '-' 
  11.      (flags kSCNetworkReachabilityFlagsConnectionOnDemand) 'D' '-'  
  12.      (flags kSCNetworkReachabilityFlagsIsLocalAddress) 'l' '-' 
  13.      (flags kSCNetworkReachabilityFlagsIsDirect) 'd' '-' 
  14.      comment   
  15.      );  
  16. #endif  
  17.  

当是wifi的时候输出R

当是3G的时候输出Rt

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

在头文件定义如下:

[cpp]  view plain copy
  1. typedef enum   
  2.   
  3.     NotReachable 0,  
  4.     ReachableViaWiFi,   
  5.     ReachableVia3G,   
  6.     ReachableVia2G,//当前无法区分是联通的2G还是移动的2G  
  7. NetworkStatus;  

因此我就是以这个为判断条件的,重写Reachability的函数:

[cpp]  view plain copy
  1. (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags  
  2.  
  3.     if ((flags kSCNetworkReachabilityFlagsReachable) == 0)  
  4.       
  5.          return NotReachable;  
  6.      
  7.     BOOL retVal NotReachable;  
  8.     if ((flags kSCNetworkReachabilityFlagsConnectionRequired) == 0)  
  9.       
  10.          // if target host is reachable and no connection is required  
  11.         // then we'll assume (for now) that your on Wi-Fi   
  12.         retVal ReachableViaWiFi;  
  13.      
  14.     if  
  15.         ((flags kSCNetworkReachabilityFlagsConnectionOnDemand != 0) ||   
  16.         (flags kSCNetworkReachabilityFlagsConnectionOnTraffic) !=  
  17.      
  18.      
  19.         // ... and the connection is on-demand (or on-traffic) if the  
  20.         // calling application is using the CFSocketStream or higher APIs  
  21.          if ((flags kSCNetworkReachabilityFlagsInterventionRequired) == 0)   
  22.           
  23.             // ... and no [user] intervention is needed   
  24.             retVal ReachableViaWiFi;   
  25.           
  26.      
  27. if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
    {
       if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) {
           if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {
                retVal = ReachableVia3G;
                if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {
                     retVal = ReachableVia2G;
                }
            }
        }

  28.     return retVal;  
  29.  

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

作者:Rush.D.Xzj

http://blog.csdn.net/zengconggen/article/details/7556007

但我使用此方法没成功。。。先做个记录吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值