iOS网络监测区分二、三、4G

欢迎你们关注个人公众号,我会按期分享一些我在项目中遇到问题的解决办法和一些iOS实用的技巧,现阶段主要是整理出一些基础的知识记录下来
javascript

文章也会同步更新到个人博客:
ppsheep.comhtml

若是有在使用AFNetworking朋友知道,在AF里只能区分当前网络是WiFi网络仍是蜂窝网络在3G、4G出现之后,咱们就有一个新需求,须要区分2G、3G、4G网络了,虽然同为蜂窝网络可是速度但是千差万别,有时咱们会感受到4G比WiFi还快,固然流量也是跑的至关肉痛java

下面咱们就来说一讲怎么区分2G 3G 4G网络 git

下载Reachability

首先咱们须要下载苹果官方的一个示例工程 github

developer.apple.com/library/con…网络

在这个工程里有咱们须要用到的 苹果官方提供的实时监测网络的类 咱们是在这个基础上 稍做修改就能够作到app

进入网页 ui

1

在示例代码中 将Reachability类拷贝到咱们的项目当中spa

2

修改Reachability

首先修改Reachability类中的网络类型枚举:code

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

而后再.m文件中 找到方法

- (NetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags;复制代码

增长判断2G 3G 4G的方法
在 if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) 判断中加上代码

if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)
    {
        returnValue = ReachableViaWWAN;

        CTTelephonyNetworkInfo *phonyNetwork = [[CTTelephonyNetworkInfo alloc] init];
        NSString *currentStr = phonyNetwork.currentRadioAccessTechnology;
        if (currentStr) {
            if ([currentStr isEqualToString:CTRadioAccessTechnologyLTE]) {
                return kReachableVia4G;
            }else if ([currentStr isEqualToString:CTRadioAccessTechnologyGPRS]|| [currentStr isEqualToString:CTRadioAccessTechnologyEdge]){
                return kReachableVia2G;
            }else{
                return kReachableVia3G;
            }
        }

        if ((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) {
            if((flags & kSCNetworkReachabilityFlagsConnectionRequired) == kSCNetworkReachabilityFlagsConnectionRequired) {
                return kReachableVia2G;
            }
            return kReachableVia3G;
        }
        return ReachableViaWWAN;
    }复制代码

在须要用到的地方引入咱们修改事后的Reachability

使用Reachability

监听网络变化

//添加网络监测
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name: kReachabilityChangedNotification
                                               object: nil];

    //开启网络监测
    self.intertReach = [Reachability reachabilityForInternetConnection];
    [self.intertReach startNotifier];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 300, 30)];
    [self.view addSubview:label];
    self.label = label;

    //获取当前的网络状态
    NetworkStatus status = [self.intertReach currentReachabilityStatus];
    [self judgeNetWorkStatus:status];复制代码

当网络发生改变时 会触发

/**
 当网络状态发生变换时 会触发这个方法

 @param no 通知
 */
- (void)reachabilityChanged:(NSNotification *)no{
    Reachability* curReach = [no object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    NetworkStatus status = [curReach currentReachabilityStatus];
    [self judgeNetWorkStatus:status];
}复制代码

仍是很简单的

源代码 放在了

github.com/yangqian111…

相关文章
相关标签/搜索