1. 程式人生 > >IOS開發中網路狀態的判斷和時時更新

IOS開發中網路狀態的判斷和時時更新

   現在手機應用開發,幾乎離不開網路操作,這裡介紹一下當前網路狀態的判斷和如何監聽網路狀態的改變。

   首先新增原始檔,在Apple的開原始碼Reachability中介紹瞭如何獲取網路狀態,這裡也是使用這個,把Reachability.h和Reachability.m檔案新增到你的工程中。沒有這兩個檔案?https://github.com/tonymillion/Reachability這裡是開源專案,裡面有這兩個檔案。注意還需要新增支援庫:將SystemConfig.framework新增到工程。

  在Reachability中定義了三種網路型別,如下:

typedef uint32_t

NetworkStatus;

enum {

// Apple NetworkStatus Constant Names.

NotReachable     = kNotReachable,     //無網路

ReachableViaWiFi = kReachableViaWiFi,      //GPRS/3G

ReachableViaWWAN = kReachableViaWWAN     //WIFI

};

判斷網路狀態的程式碼,如下:

+ (BOOL) IsEnableWIFI {
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}

+ (BOOL) IsEnableIntent {
    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
方法名言簡意賅,很容易理解。

那麼有時我們需要時時的監聽網路狀態,那麼怎麼辦呢?其實在Reachability中也是有處理的,該物件會監聽網路狀態的改變,併發出一個名為 “kReachabilityChangedNotification”的notification,這個字串在Reachability.m中定義,

NSString *const kReachabilityChangedNotification =@"NetworkReachabilityChangedNotification";

如果你想在應用中時時的監聽網路狀態,只需要註冊這個notification的接收器。
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(reachabilityChanged:)
                                                 name: kReachabilityChangedNotification
                                               object: nil];
當網路狀態改變時就會回撥該方法
- (void)reachabilityChanged:(NSNotification *)note {
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    //得到當前網路狀態
    self.netStatus = [curReach currentReachabilityStatus];
}