iOS开发中监测网络状态实现方案
程序员文章站
2022-06-23 12:06:32
iOS开发中监测网络状态实现方案,我们常常会碰到这样的需求,在2G网络状态下不下载高清图片,只查看文字,在wifi、3G、4G可以下载高清图片,以达到提升用户体验的目的。最近在自己...
iOS开发中监测网络状态实现方案,我们常常会碰到这样的需求,在2G网络状态下不下载高清图片,只查看文字,在wifi、3G、4G可以下载高清图片,以达到提升用户体验的目的。最近在自己的项目里面也有类似的需求,查找资料,稍微修改了苹果官方的Reachability实时监测网络状态变化。
1、不废话,直接上干货
在Reachability.m文件中导入CoreTelephony库
#import
找到此方法if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN)修改,对了 ,先修改枚举值在Reachability.h中
typedef enum : NSInteger { NotReachable = 0, ReachableViaWiFi, ReachableViaWWAN, kRaeachableVia4G, kReachableVia2G, kReachableVia3G } NetworkStatus;
增加代码
if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { /* ... but WWAN connections are OK if the calling application is using the CFNetwork APIs. */ returnValue = ReachableViaWWAN; if (IOS_VERSION >= 7.0) { CTTelephonyNetworkInfo *phonyNetwork = [[CTTelephonyNetworkInfo alloc] init]; NSString *currentStr = phonyNetwork.currentRadioAccessTechnology; if (currentStr) { if ([currentStr isEqualToString:CTRadioAccessTechnologyLTE]) { return kRaeachableVia4G; }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; }
2、在需要的地方引入#import "Reachability.h"监听网络状态变化通知
- (void)viewDidLoad { [super viewDidLoad]; // 监测网络情况 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; NSString *remoteHostName = @"www.apple.com"; NSString *remoteHostLabelFormatString = NSLocalizedString(@"Remote Host: %@", @"Remote host label format string"); UILabel *remoteHostLabel = [[UILabel alloc] init]; remoteHostLabel.text = [NSString stringWithFormat:remoteHostLabelFormatString, remoteHostName]; self.hostReachability = [Reachability reachabilityWithHostName:remoteHostName]; [self.hostReachability startNotifier]; }
3、记得在delloc里面销毁通知
- (void)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self]; }
4、处理通知方法
- (void)reachabilityChanged:(NSNotification *)no{ Reachability* curReach = [no object]; NSParameterAssert([curReach isKindOfClass: [Reachability class]]); NetworkStatus status = [curReach currentReachabilityStatus]; switch (status) { case NotReachable: NSLog(@"====当前网络状态不可达======="); //其他处理 self.kReachableVia = @"当前网络状态不可达"; break; case ReachableViaWiFi: NSLog(@"====当前网络状态为Wifi======="); self.kReachableVia = @"ReachableViaWiFi"; //其他处理 break; case kReachableVia2G: NSLog(@"====当前网络状态为2G======="); self.kReachableVia = @"kReachableVia2G"; break; case kReachableVia3G: NSLog(@"====当前网络状态为3G======="); //其他处理 self.kReachableVia = @"kReachableVia3G"; break; case kRaeachableVia4G: NSLog(@"====当前网络状态为4G======="); self.kReachableVia = @"kRaeachableVia4G"; //其他处理 break; default: NSLog(@"你是外星来的吗?"); //其他处理 self.kReachableVia = @"你是外星来的吗?"; break; } }
上一篇: iOS开发中打包.a静态库教程