zoukankan      html  css  js  c++  java
  • iOS网络监测如何区分2、3、4G?

    你可以在Github下载这个Demo

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


    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里加入

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        //设置状态栏
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
    
        // 监测网络情况
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(reachabilityChanged:)
                                                     name: kReachabilityChangedNotification
                                                   object: nil];
        hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"];
        [hostReach startNotifier];
    }
    - (void)reachabilityChanged:(NSNotification *)note
    {
        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;
        }
    }
  • 相关阅读:
    电商第一季函数笔记(1)
    沈逸老师PHP魔鬼特训笔记(2)
    PHP读书笔记(3)-常量
    2015/8/9 到家了,学完了CodeCademy的Python
    2015/8/4 告别飞思卡尔,抛下包袱上路
    2015/6/23 浪潮过去,我才来
    方维团购系统二次开发,项目经验
    方维团购系统整合云短信网短信平台,方维系统整合短信平台
    方维团购系统,下订单保存多个收货地址
    PHP木马查杀文件,木马查杀插件
  • 原文地址:https://www.cnblogs.com/fengmin/p/5264429.html
Copyright © 2011-2022 走看看