iOS開發中監測網路狀態實現方案,ios監測

來源:互聯網
上載者:User

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; }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.