iOS 网络监测如何区分2、3、4G wifi

    xiaoxiao2025-10-29  9

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

    并导入相关.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; }

    接下来,在我们的工程里导入Reachability的. h/.m文件 在AppDelegate里(不要忘了引头文件) - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. [self addReachability]; return YES; } - (void)addReachability { // 监测网络情况 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; _hostReach = [Reachability reachabilityWithHostName:@"https://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: break; case ReachableViaWWAN: case kReachableVia2G: break; case kReachableVia3G: break; case kReachableVia4G: break; } } 在你想要调用的地方,例如 viewController 里 - (IBAction)getCurrentReachability:(UIButton *)sender { Reachability * reach = [Reachability reachabilityForInternetConnection]; NSString * tips = @""; switch (reach.currentReachabilityStatus) { case NotReachable: tips = @"无网络连接"; break; case ReachableViaWiFi: tips = @"Wifi"; break; case ReachableViaWWAN: NSLog(@"移动流量"); case kReachableVia2G: tips = @"2G"; break; case kReachableVia3G: tips = @"3G"; break; case kReachableVia4G: tips = @"4G"; break; } NSLog(@"tips = %@",tips); ac = [UIAlertController alertControllerWithTitle:@"提示" message:[NSString stringWithFormat:@"当前网络状态为:%@",tips] preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction * aa = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { [ac dismissViewControllerAnimated:YES completion:nil]; ac = nil; }]; [ac addAction:aa]; [self presentViewController:ac animated:YES completion:nil]; }
    转载请注明原文地址: https://ju.6miu.com/read-1303634.html
    最新回复(0)