iOS開發中監測網路狀態實現方案,ios監測
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; }}