監(jiān)測(cè)網(wǎng)絡(luò)狀態(tài)

在網(wǎng)絡(luò)應(yīng)用中颅拦,有的時(shí)候需要對(duì)用戶設(shè)備的網(wǎng)絡(luò)狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)控默伍,有兩個(gè)目的:
(1)讓用戶了解自己的網(wǎng)絡(luò)狀態(tài)梆惯,防止一些誤會(huì)(比如怪應(yīng)用無(wú)能)
(2)根據(jù)用戶的網(wǎng)絡(luò)狀態(tài)進(jìn)行智能處理密似,節(jié)省用戶流量,提高用戶體驗(yàn)
  WIFI網(wǎng)絡(luò):自動(dòng)下載高清圖片
  4G/3G網(wǎng)絡(luò):只下載縮略圖
  沒有網(wǎng)絡(luò):只顯示離線的緩存數(shù)據(jù)

常用的有以下兩種方法:
 】(1)蛋勺、使用蘋果觀法提供的檢測(cè)iOS設(shè)備網(wǎng)絡(luò)環(huán)境用的庫(kù) Reachablity
  (2)鸠删、使用AFN框架中的AFNetworkReachabilityManager來(lái)監(jiān)聽網(wǎng)絡(luò)狀態(tài)的改變
一抱完、蘋果官方提供了一個(gè)叫Reachability的示例程序,便于開發(fā)者檢測(cè)網(wǎng)絡(luò)狀態(tài)
使用之前請(qǐng)從Apple網(wǎng)站下載示例:http://xiazai.jb51.net/201608/yuanma/Reachability(jb51.net).rar
然后將Reachability.h 和 Reachability.m 加到自己的項(xiàng)目中刃泡,并引用 SystemConfiguration.framework乾蛤,就可以使用了。
Reachability 中定義了3種網(wǎng)絡(luò)狀態(tài):

typedef enum : NSInteger {
 
  NotReachable = 0, //無(wú)連接
  ReachableViaWiFi, //使用3G/GPRS網(wǎng)絡(luò)
  ReachableViaWWAN //使用WiFi網(wǎng)絡(luò)
 
} NetworkStatus;

我們可以在程序啟動(dòng)以后啟動(dòng)實(shí)時(shí)監(jiān)測(cè)

// AppDelegate.m
 
 
@interface AppDelegate ()
 
@property (nonatomic, strong) Reachability *reachability;
 
@end
 
// 程序啟動(dòng)器捅僵,啟動(dòng)網(wǎng)絡(luò)監(jiān)視
- (void)applicationDidFinishLaunching:(UIApplication *)application {
 
  // 設(shè)置網(wǎng)絡(luò)檢測(cè)的站點(diǎn)
    NSString *remoteHostName = @"www.apple.com";
  self.reachability = [Reachability reachabilityWithHostName:remoteHostName];
  // 設(shè)置網(wǎng)絡(luò)狀態(tài)變化時(shí)的通知函數(shù)
  [[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(@"沒有網(wǎng)絡(luò)家卖!");
        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來(lái)監(jiān)聽網(wǎng)絡(luò)狀態(tài)的改變

//使用AFN框架來(lái)檢測(cè)網(wǎng)絡(luò)狀態(tài)的改變
-(void)AFNReachability
{
  //1.創(chuàng)建網(wǎng)絡(luò)監(jiān)聽管理者
  AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
 
  //2.監(jiān)聽網(wǎng)絡(luò)狀態(tài)的改變
  /*
   AFNetworkReachabilityStatusUnknown     = 未知
   AFNetworkReachabilityStatusNotReachable   = 沒有網(wǎng)絡(luò)
   AFNetworkReachabilityStatusReachableViaWWAN = 3G
   AFNetworkReachabilityStatusReachableViaWiFi = WIFI
   */
  [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
      case AFNetworkReachabilityStatusUnknown:
        NSLog(@"未知");
        break;
      case AFNetworkReachabilityStatusNotReachable:
        NSLog(@"沒有網(wǎng)絡(luò)");
        break;
      case AFNetworkReachabilityStatusReachableViaWWAN:
        NSLog(@"3G");
        break;
      case AFNetworkReachabilityStatusReachableViaWiFi:
        NSLog(@"WIFI");
        break;
 
      default:
        break;
    }
  }];
 
  //3.開始監(jiān)聽
  [manager startMonitoring];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庙楚,一起剝皮案震驚了整個(gè)濱河市上荡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌馒闷,老刑警劉巖酪捡,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纳账,居然都是意外死亡逛薇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門疏虫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)永罚,“玉大人,你說(shuō)我怎么就攤上這事卧秘∧馗ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵翅敌,是天一觀的道長(zhǎng)羞福。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚯涮,這世上最難降的妖魔是什么治专? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任卖陵,我火速辦了婚禮,結(jié)果婚禮上张峰,老公的妹妹穿的比我還像新娘泪蔫。我一直安慰自己,他們只是感情好挟炬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嗦哆,像睡著了一般谤祖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上老速,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天粥喜,我揣著相機(jī)與錄音,去河邊找鬼橘券。 笑死额湘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旁舰。 我是一名探鬼主播锋华,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼箭窜!你這毒婦竟也來(lái)了毯焕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤磺樱,失蹤者是張志新(化名)和其女友劉穎纳猫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竹捉,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芜辕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了块差。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侵续。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖憨闰,靈堂內(nèi)的尸體忽然破棺而出询兴,到底是詐尸還是另有隱情,我是刑警寧澤起趾,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布诗舰,位于F島的核電站,受9級(jí)特大地震影響训裆,放射性物質(zhì)發(fā)生泄漏眶根。R本人自食惡果不足惜蜀铲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望属百。 院中可真熱鬧记劝,春花似錦、人聲如沸族扰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)渔呵。三九已至怒竿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扩氢,已是汗流浹背耕驰。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留录豺,地道東北人朦肘。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像双饥,于是被迫代替她去往敵國(guó)和親媒抠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容