iOS網絡監測如何區分2、3、4G(Reachability)

首先,引入系統的Reachability類,不知道怎麼引入的話,在Xcode,按下shift+command+0,搜索Reachability,看到圖中所選的工程下載即可。

Apple Reachability
網絡監測

Reachability.png
Reachability.png

並導入相關.h文件

#import<CoreTelephony/CTTelephonyNetworkInfo.h>

引入後,Reachability.h文件裏面修改NetworkStatus的枚舉,

typedef enum : NSInteger {
    NotReachable = 0,
    ReachableViaWiFi,
    ReachableViaWWAN,
    kReachableVia2G,
    kReachableVia3G,
    kReachableVia4G
} NetworkStatus;

在修改下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;
    }

如何使用?

在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;
    }

轉自:http://www.jianshu.com/p/efcfa3c87306
發佈了78 篇原創文章 · 獲贊 54 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章