iOS即時監控網路狀態的改變,ios即時監控狀態

來源:互聯網
上載者:User

iOS即時監控網路狀態的改變,ios即時監控狀態

 

在網路應用中,有的時候需要對使用者裝置的網路狀態進行即時監控,有兩個目的:

(1)讓使用者瞭解自己的網路狀態,防止一些誤會(比如怪應用無能)

(2)根據使用者的網路狀態進行智能處理,節省使用者流量,提高使用者體驗

  WIFI網路:自動下載高清圖片

  4G/3G網路:只下載縮圖

  沒有網路:只顯示離線的快取資料

 常用的有以下兩種方法:

  (1)、使用蘋果觀法提供的檢測iOS裝置網路環境用的庫 Reachablity

  (2)、使用AFN架構中的AFNetworkReachabilityManager來監聽網路狀態的改變

 

一、蘋果官方提供了一個叫Reachability的樣本程式,便於開發人員檢測網路狀態

使用之前請從Apple網站下載樣本:

https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

然後將Reachability.h 和 Reachability.m 加到自己的項目中,並引用 SystemConfiguration.framework,就可以使用了。
Reachability 中定義了3種網路狀態:

typedef enum : NSInteger {    NotReachable = 0,  //無串連    ReachableViaWiFi,  //使用3G/GPRS網路    ReachableViaWWAN  //使用WiFi網路} NetworkStatus;

 

我們可以在程式啟動以後啟動即時監測

// AppDelegate.m@interface AppDelegate ()@property (nonatomic, strong) Reachability *reachability;@end// 程式啟動器,啟動網路監視- (void)applicationDidFinishLaunching:(UIApplication *)application {    // 設定網路檢測的網站       NSString *remoteHostName = @"www.apple.com";    self.reachability = [Reachability reachabilityWithHostName:remoteHostName];    // 設定網路狀態變化時的通知函數    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)                                             name:@"kNetworkReachabilityChangedNotification" object:nil];    [self updateStatus];}- (void)reachabilityStatusChange:(NSNotification *)notification{    Reachability* curReach = [notification object];    NSParameterAssert([curReach isKindOfClass:[Reachability class]]);    [self updateInterfaceWithReachability:curReach];}- (void)updateInterfaceWithReachability:(Reachability *)reachability{    if (reachability == _reachability)    {        NetworkStatus netStatus = [reachability currentReachabilityStatus];        switch (netStatus)        {            case NotReachable:      {                NSLog(@"沒有網路!");                break;            }            case ReachableViaWWAN:  {                NSLog(@"4G/3G");                break;            }            case ReachableViaWiFi:  {                NSLog(@"WiFi");                break;            }        }    }}- (void)dealloc{     [_reachability stopNotifier];    [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];}

 

二、使用AFN架構中的AFNetworkReachabilityManager來監聽網路狀態的改變

 

//使用AFN架構來檢測網路狀態的改變-(void)AFNReachability{    //1.建立網路監聽管理者    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];    //2.監聽網路狀態的改變    /*     AFNetworkReachabilityStatusUnknown          = 未知     AFNetworkReachabilityStatusNotReachable     = 沒有網路     AFNetworkReachabilityStatusReachableViaWWAN = 3G     AFNetworkReachabilityStatusReachableViaWiFi = WIFI     */    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {        switch (status) {            case AFNetworkReachabilityStatusUnknown:                NSLog(@"未知");                break;            case AFNetworkReachabilityStatusNotReachable:                NSLog(@"沒有網路");                break;            case AFNetworkReachabilityStatusReachableViaWWAN:                NSLog(@"3G");                break;            case AFNetworkReachabilityStatusReachableViaWiFi:                NSLog(@"WIFI");                break;            default:                break;        }    }];    //3.開始監聽    [manager startMonitoring];}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.