美文网首页
获取iPhone/iPad设备网络类型(2G,3G,4G,WIF

获取iPhone/iPad设备网络类型(2G,3G,4G,WIF

作者: ivylee_mr | 来源:发表于2019-01-15 13:55 被阅读17次

    目前我们获取手机网络类型主要还是用的 AFNetwork

    但是AFNetwork有个问题就是类型不够充分,只能四种类型

    typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
        AFNetworkReachabilityStatusUnknown          = -1,
        AFNetworkReachabilityStatusNotReachable     = 0,
        AFNetworkReachabilityStatusReachableViaWWAN = 1,
        AFNetworkReachabilityStatusReachableViaWiFi = 2,
    };
    
    1. AFNetworkReachabilityStatusUnknown 未知网络
    2. AFNetworkReachabilityStatusNotReachable 无网络
    3. AFNetworkReachabilityStatusReachableViaWWAN 蜂窝移动网络
    4. AFNetworkReachabilityStatusReachableViaWiFi WIFI

    具体获取代码如下

    /**
     监测网络类型
     */
    -(void)configReachabilityStatusByAFNetwork {
        AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            [MyAppConfigModel sharedSingleton].netWorkReachabilityStatus = status;
            switch (status) {
                case AFNetworkReachabilityStatusUnknown:
                    NSLog(@"⚠️⚠️⚠️⚠️⚠️⚠️⚠️当前网络:未知");
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                    NSLog(@"⚠️⚠️⚠️⚠️⚠️⚠️⚠️当前网络:网络无连接\n请检查网络");
                    break;
                case AFNetworkReachabilityStatusReachableViaWWAN:
                    NSLog(@"⚠️⚠️⚠️⚠️⚠️⚠️⚠️当前网络:3G|4G");
                    break;
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    NSLog(@"⚠️⚠️⚠️⚠️⚠️⚠️⚠️当前网络:WiFi");
                    break;
                default:
                    break;
            }
        }];
    }
    

    那么 如何获取蜂窝移动网络的具体类型呢?
    这里就需要用到

    #import <CoreTelephony/CoreTelephonyDefines.h>
    #import <CoreTelephony/CTCarrier.h>
    #import <CoreTelephony/CTTelephonyNetworkInfo.h>
    

    具体代码如下

    
    + (NSInteger)getDeviceNetWorkingStatus{
        
        NSString *state = [[NSString alloc] init];
        NSInteger stateType = 0;
        
        AFNetworkReachabilityStatus netWorkReachabilityStatus =  [MyAppConfigModel sharedSingleton].netWorkReachabilityStatus;
        switch (netWorkReachabilityStatus) {
            case AFNetworkReachabilityStatusUnknown:
                state = @"无网络";
                stateType = 5;
                break;
            case AFNetworkReachabilityStatusNotReachable:
                state = @"无网络";
                stateType = 5;
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
            {
                NSArray *typeStrings2G = @[CTRadioAccessTechnologyEdge,
                                           CTRadioAccessTechnologyGPRS,
                                           CTRadioAccessTechnologyCDMA1x];
             
                NSArray *typeStrings3G = @[CTRadioAccessTechnologyHSDPA,
                                           CTRadioAccessTechnologyWCDMA,
                                           CTRadioAccessTechnologyHSUPA,
                                           CTRadioAccessTechnologyCDMAEVDORev0,
                                           CTRadioAccessTechnologyCDMAEVDORevA,
                                           CTRadioAccessTechnologyCDMAEVDORevB,
                                           CTRadioAccessTechnologyeHRPD];
                
                NSArray *typeStrings4G = @[CTRadioAccessTechnologyLTE];
                
                CTTelephonyNetworkInfo *teleInfo= [[CTTelephonyNetworkInfo alloc] init];
                NSString *accessString = teleInfo.currentRadioAccessTechnology;
                if ([typeStrings4G containsObject:accessString]) {
                    state = @"4G";
                    stateType = 2;
                } else if ([typeStrings3G containsObject:accessString]) {
                    state = @"3G";
                    stateType = 3;
                } else if ([typeStrings2G containsObject:accessString]) {
                    state = @"2G";
                    stateType = 4;
                } else {
                    state = @"无网络";
                    stateType = 5;
                }
            }
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                state = @"WIFI";
                stateType = 1;
                break;
            default:
                state = @"无网络";
                stateType = 5;
                break;
        }
        
        NSLog(@"当前网络网络状态 %@",state);
        return stateType;
    }
    

    相关文章

      网友评论

          本文标题:获取iPhone/iPad设备网络类型(2G,3G,4G,WIF

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