ios 開發之使用Reachability檢測網路狀態

來源:互聯網
上載者:User

一:確認網路環境3G/WIFI

   1. 添加源檔案和framework    開發Web等網路應用程式的時候,需要確認網路環境,串連情況等資訊。如果沒有處理它們,是不會通過Apple的審(我們的)查的。  Apple 的 常式 Reachability 中介紹了取得/檢測網路狀態的方法。要在應用程式程式中使用Reachability,首先要完成如下兩部:    1.1. 添加源檔案:  在你的程式中使用 Reachability 只須將該常式中的 Reachability.h 和 Reachability.m 拷貝到你的工程中。Reachability的h和m檔案可以在這裡下載:https://github.com/tonymillion/Reachability/blob/master/Reachability.h(支援ARC和GCD)     1.2.添加framework:  將SystemConfiguration.framework 添加進工程。如:      2. 網路狀態    Reachability.h中定義了三種網路狀態:  typedef enum {    NotReachable = 0,      //無串連    ReachableViaWiFi,      //使用3G/GPRS網路    ReachableViaWWAN      //使用WiFi網路  } NetworkStatus;    因此可以這樣檢查網路狀態:   Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];  switch ([r currentReachabilityStatus]) {      case NotReachable:          // 沒有網路連接          break;      case ReachableViaWWAN:          // 使用3G網路          break;      case ReachableViaWiFi:          // 使用WiFi網路          break;  }    3.檢查當前網路環境  程式啟動時,如果想檢測可用的網路環境,可以像這樣  // 是否wifi  + (BOOL) IsEnableWIFI {    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);  }   // 是否3G  + (BOOL) IsEnable3G {    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);  }  例子:  - (void)viewWillAppear:(BOOL)animated {    if (([Reachability reachabilityForInternetConnection].currentReachabilityStatus == NotReachable) &&       ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus == NotReachable)) {      self.navigationItem.hidesBackButton = YES;      [self.navigationItem setLeftBarButtonItem:nil animated:NO];    }  }   4. 連結狀態的即時通知  網路連接狀態的即時檢查,通知在網路應用中也是十分必要的。接續狀態發生變化時,需要及時地通知使用者:    Reachability 1.5版本  // My.AppDelegate.h  #import "Reachability.h"   @interface MyAppDelegate : NSObject <UIApplicationDelegate> {    NetworkStatus remoteHostStatus;  }   @property NetworkStatus remoteHostStatus;   @end   // My.AppDelegate.m  #import "MyAppDelegate.h"   @implementation MyAppDelegate  @synthesize remoteHostStatus;   // 更新網路狀態  - (void)updateStatus {    self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];  }   // 通知網路狀態  - (void)reachabilityChanged:(NSNotification *)note {    [self updateStatus];    if (self.remoteHostStatus == NotReachable) {      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AppName", nil)             message:NSLocalizedString (@"NotReachable", nil)            delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];      [alert show];      [alert release];    }  }   // 程式啟動器,啟動網路監視  - (void)applicationDidFinishLaunching:(UIApplication *)application {      // 設定網路檢測的網站    [[Reachability sharedReachability] setHostName:@"www.apple.com"];    [[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];    // 設定網路狀態變化時的通知函數    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)                         name:@"kNetworkReachabilityChangedNotification" object:nil];    [self updateStatus];  }   - (void)dealloc {    // 刪除通知對象    [[NSNotificationCenter defaultCenter] removeObserver:self];    [window release];    [super dealloc];  }     Reachability 2.0版本     // MyAppDelegate.h  @class Reachability;     @interface MyAppDelegate : NSObject <UIApplicationDelegate> {      Reachability *hostReach;    }   @end   // MyAppDelegate.m  - (void)reachabilityChanged:(NSNotification *)note {    Reachability* curReach = [note object];    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);    NetworkStatus status = [curReach currentReachabilityStatus];      if (status == NotReachable) {      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AppName""               message:@"NotReachable"               delegate:nil               cancelButtonTitle:@"YES" otherButtonTitles:nil];               [alert show];               [alert release];    }  }                 - (void)applicationDidFinishLaunching:(UIApplication *)application {    // ...             // 監測網路情況    [[NSNotificationCenter defaultCenter] addObserver:self               selector:@selector(reachabilityChanged:)               name: kReachabilityChangedNotification               object: nil];    hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];    hostReach startNotifer];    // ...  }

相關文章

聯繫我們

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