qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          iOS中使用Reachability 檢測網絡

          如果你想在iOS程序中提供一僅在wifi網絡下使用(Reeder),或者在沒有網絡狀態下提供離線模式(Evernote)。那么你會使用到Reachability來實現網絡檢測。
            寫本文的目的
            了解Reachability都能做什么
            檢測3中網絡環境
            2G/3G
            wifi
            無網絡
            如何使用通知
            單個controller
            多個controller
            簡單的功能:
            僅在wifi下使用
            Reachability簡介
            Reachablity 是一個iOS下檢測,iOS設備網絡環境用的庫。
            監視目標網絡是否可用
            監視當前網絡的連接方式
            監測連接方式的變更
            安裝
            創建 network 工程(network是我創建的demo工程,附件中可以下載到)
            使用Cocoaspod安裝依賴
            在項目中添加 SystemConfiguration.framework 庫
            由于Reachability非常常用。直接將其加入到Supporting Files/networ-Prefix.pch中:
            #import <Reachability/Reachability.h>
            #import <Reachability/Reachability.h>
            如果你還不知道cocoaspod是什么,看這里:
            http://witcheryne.iteye.com/blog/1873221
            使用
            stackoverflow上有一篇回答,很好的解釋了reachability的用法
            http://stackoverflow.com/questions/11177066/how-to-use-ios-reachability
            一般情況一個Reachability實例就ok了。
            一個Controller只需要一個Reachability
            Block方式使用
          - (void)viewDidLoad
          {
          [super viewDidLoad];
          DLog(@"開啟 www.apple.com 的網絡檢測");
          Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
          DLog(@"-- current status: %@", reach.currentReachabilityString);
          // start the notifier which will cause the reachability object to retain itself!
          [[NSNotificationCenter defaultCenter] addObserver:self
          selector:@selector(reachabilityChanged:)
          name:kReachabilityChangedNotification
          object:nil];
          reach.reachableBlock = ^(Reachability * reachability)
          {
          dispatch_async(dispatch_get_main_queue(), ^{
          self.blockLabel.text = @"網絡可用";
          self.blockLabel.backgroundColor = [UIColor greenColor];
          });
          };
          reach.unreachableBlock = ^(Reachability * reachability)
          {
          dispatch_async(dispatch_get_main_queue(), ^{
          self.blockLabel.text = @"網絡不可用";
          self.blockLabel.backgroundColor = [UIColor redColor];
          });
          };
          [reach startNotifier];
          }
          - (void)viewDidLoad
          {
          [super viewDidLoad];
          DLog(@"開啟 www.apple.com 的網絡檢測");
          Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
          DLog(@"-- current status: %@", reach.currentReachabilityString);
          // start the notifier which will cause the reachability object to retain itself!
          [[NSNotificationCenter defaultCenter] addObserver:self
          selector:@selector(reachabilityChanged:)
          name:kReachabilityChangedNotification
          object:nil];
          reach.reachableBlock = ^(Reachability * reachability)
          {
          dispatch_async(dispatch_get_main_queue(), ^{
          self.blockLabel.text = @"網絡可用";
          self.blockLabel.backgroundColor = [UIColor greenColor];
          });
          };
          reach.unreachableBlock = ^(Reachability * reachability)
          {
          dispatch_async(dispatch_get_main_queue(), ^{
          self.blockLabel.text = @"網絡不可用";
          self.blockLabel.backgroundColor = [UIColor redColor];
          });
          };
          [reach startNotifier];
          }
           使用notification的方式
          - (void)viewDidLoad
          {
          [super viewDidLoad];
          DLog(@"開啟 www.apple.com 的網絡檢測");
          Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
          DLog(@"-- current status: %@", reach.currentReachabilityString);
          // start the notifier which will cause the reachability object to retain itself!
          [[NSNotificationCenter defaultCenter] addObserver:self
          selector:@selector(reachabilityChanged:)
          name:kReachabilityChangedNotification
          object:nil];
          [reach startNotifier];
          }
          - (void) reachabilityChanged: (NSNotification*)note {
          Reachability * reach = [note object];
          if(![reach isReachable])
          {
          self.notificationLabel.text = @"網絡不可用";
          self.notificationLabel.backgroundColor = [UIColor redColor];
          self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          return;
          }
          self.notificationLabel.text = @"網絡可用";
          self.notificationLabel.backgroundColor = [UIColor greenColor];
          if (reach.isReachableViaWiFi) {
          self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
          self.wifiOnlyLabel.text = @"當前通過wifi連接";
          } else {
          self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          self.wifiOnlyLabel.text = @"wifi未開啟,不能用";
          }
          if (reach.isReachableViaWWAN) {
          self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
          self.wwanOnlyLabel.text = @"當前通過2g or 3g連接";
          } else {
          self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          self.wwanOnlyLabel.text = @"2g or 3g網絡未使用";
          }
          }
          - (void)viewDidLoad
          {
          [super viewDidLoad];
          DLog(@"開啟 www.apple.com 的網絡檢測");
          Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
          DLog(@"-- current status: %@", reach.currentReachabilityString);
          // start the notifier which will cause the reachability object to retain itself!
          [[NSNotificationCenter defaultCenter] addObserver:self
          selector:@selector(reachabilityChanged:)
          name:kReachabilityChangedNotification
          object:nil];
          [reach startNotifier];
          }
          - (void) reachabilityChanged: (NSNotification*)note {
          Reachability * reach = [note object];
          if(![reach isReachable])
          {
          self.notificationLabel.text = @"網絡不可用";
          self.notificationLabel.backgroundColor = [UIColor redColor];
          self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          return;
          }
          self.notificationLabel.text = @"網絡可用";
          self.notificationLabel.backgroundColor = [UIColor greenColor];
          if (reach.isReachableViaWiFi) {
          self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
          self.wifiOnlyLabel.text = @"當前通過wifi連接";
          } else {
          self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
          self.wifiOnlyLabel.text = @"wifi未開啟,不能用";
          }
          if (reach.isReachableViaWWAN) {
          self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
          self.wwanOnlyLabel.text = @"當前通過2g or 3g連接";
          } else {
          self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
          self.wwanOnlyLabel.text = @"2g or 3g網絡未使用";
          }
          }
            附件demo說明
            開啟wifi狀態
            關閉wifi的狀態
            遺留問題
            如何在多個controller之前共用一個Reachability(附件demo中是一個controller一個Reachability實例)
            應該在什么使用停止Reachability的檢測.

          posted on 2014-12-03 13:31 順其自然EVO 閱讀(203) 評論(0)  編輯  收藏 所屬分類: android

          <2014年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 邮箱| 从化市| 安宁市| 洱源县| 共和县| 临高县| 二连浩特市| 于田县| 奉贤区| 厦门市| 香港 | 桃园县| 乌鲁木齐县| 揭阳市| 九龙县| 通道| 荔波县| 周至县| 天柱县| 六枝特区| 红原县| 余江县| 侯马市| 延长县| 天柱县| 卢湾区| 阿合奇县| 阿图什市| 卢氏县| 宣武区| 汉川市| 静海县| 常德市| 阜康市| 洛宁县| 贵南县| 墨江| 军事| 盘锦市| 兖州市| 山阳县|