1. 程式人生 > >ios 快速判斷當前網路狀態(三種方法)

ios 快速判斷當前網路狀態(三種方法)

一、利用AFN框架
//1.建立網路狀態監測管理者

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager  sharedManager];

//2.監聽改變

[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus  status) {

switch (status) {

case  AFNetworkReachabilityStatusUnknown:

NSLog(@"未知");

break;

case AFNetworkReachabilityStatusNotReachable:

NSLog(@"沒有網路");

[MBProgressHUD showError:@"網路不可用,請連線網路"];

break;

case AFNetworkReachabilityStatusReachableViaWWAN:

NSLog(@"3G|4G");

break;

case AFNetworkReachabilityStatusReachableViaWiFi:

NSLog(@"WiFi");

break;

default:

break;

}

}];

[manager startMonitoring];//開始監聽

}

二、利用系統狀態列判斷網路狀態

    UIApplication *app = [UIApplication sharedApplication];

    NSArray *children = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];

    int type = 0;

    for (id child in children) {

    if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {

    type = [[child valueForKeyPath:@"dataNetworkType"] intValue];

    }

    }

    switch (type) {

    case 1:

    return @"2G";

    break;

    case 2:

    return @"3G";

    case 3:

    return @"4G";

    case 5:

    return @"WIFI";

    default:

    return @“NO-WIFI";//代表未知網路

    break;

    }

警告:此方法存在一定的侷限性,比如當狀態列被隱藏的時候,無法使用此方法。


三、通過Reachability框架

Reachability是一個在iOS系統環境下檢測iOS裝置當前的網路環境的庫。它的主要功能是監測三種網路環境:2G/3G/4G、WiFi網路、無網路。在應用的執行狀態下,實時監測網路連線方式的變更,及時給出通知。

Reachability的使用

首先需要在GitHub上下載Reachability的壓縮包,解壓後將Reachability.h和Reachability.m檔案拖入工程當中,在使用的地方引入標頭檔案即可(或者使用cocoapods管理第三方庫)。

1.直接獲取當前網路環境:

  Reachability*reach=[Reachability reachabilityWithHostName:@"www.hcios.com"];

  //2.判斷當前的網路狀態

  switch([reach currentReachabilityStatus]){

  case  ReachableViaWWAN:

  NSLog(@"正在使用移動資料網路");

  break;

  case  ReachableViaWiFi:

  NSLog(@"正在使用WiFi");

  break;

  default:

  NSLog(@"無網路");

  break;

  }

//根據currentReachabilityStatus方法獲取當前的網路環境,ReachableViaWWAN表示移動資料網路,ReachableViaWiFi表示WiFi網路,NotReachable表示沒有接入網路。

通知的方式獲取當前網路環境:

    Reachability *reach=[Reachability reachabilityWithHostName:@"www.hcios.com"];

    //通知中心註冊通知

    [[NSNotificationCenter defaultCenter] addObserver:self selector:

    @selector(reachabilityChanged:)name:kReachabilityChangedNotification object:nil];

    //Reachability例項呼叫startNotifier方法啟動網路狀態監測

    [reach startNotifier];

    //收到通知呼叫的方法

    -(void)reachabilityChanged:(NSNotification*)notification{

    Reachability *reach=[notification object];

    //判斷網路狀態

    if(![reach isReachable]){

    NSLog(@"網路連線不可用");

    }else{

    if([reach currentReachabilityStatus]==ReachableViaWiFi){

    NSLog(@"正在使用WiFi");

    }else if([reach currentReachabilityStatus]==ReachableViaWWAN){

    NSLog(@"正在使用移動資料");

    }

    }

    }

通過通知的方式使用Reachability是在程式中經常使用的,Reachability可以在使用者的網路狀態發生改變時,及時給出通知提醒,防止資料流量的快速流失,在實際的專案應用中是十分常見的。