美文网首页
iOS网络监测如何区分2、3、4G和WiFi(Reachabil

iOS网络监测如何区分2、3、4G和WiFi(Reachabil

作者: 祥子_HelloWorld | 来源:发表于2019-08-04 01:57 被阅读0次

首先,引入系统的Reachability类,不知道怎么引入的话,在Xcode,按下shift+command+0,搜索Reachability,看到图中所选的工程下载即可。

1. 导入相关.h文件
#import<CoreTelephony/CTTelephonyNetworkInfo.h>
2. 引入后,Reachability.h文件里面修改NetworkStatus的枚举:
typedef enum : NSInteger {
    NotReachable = 0,
    ReachableViaWiFi,
    ReachableViaWWAN,
    kReachableVia2G,
    kReachableVia3G,
    kReachableVia4G
} NetworkStatus;
3. 在修改下Reachability.m文件

找到

- (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags

修改下面的代码

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])
                {
                    returnValue =  kReachableVia4G;
                }
                else if ([currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || [currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS])
                {
                    returnValue =  kReachableVia2G;
                }
                else
                {
                    returnValue =  kReachableVia3G;
                }
                return returnValue;
 
            }
        }
 
        if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection)
        {
            if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired)
            {
                returnValue =  kReachableVia2G;
                return returnValue;
            }
            returnValue =  kReachableVia3G;
            return returnValue;
        }
 
        returnValue = ReachableViaWWAN;
    }
4. 如何使用?

在AppDelegate里加入

    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    NetworkStatus status = [curReach currentReachabilityStatus];
 
    switch (status)
    {
 
        case NotReachable:
            break;
 
        case ReachableViaWiFi:
        case ReachableViaWWAN:
            break;
 
        case kReachableVia2G:
            break;
 
        case kReachableVia3G:
            break;
 
        case kReachableVia4G:
            break;
    }

相关文章

网友评论

      本文标题:iOS网络监测如何区分2、3、4G和WiFi(Reachabil

      本文链接:https://www.haomeiwen.com/subject/jotrdctx.html