ios 快速判斷當前網路狀態(三種方法)
阿新 • • 發佈:2019-01-02
一、利用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可以在使用者的網路狀態發生改變時,及時給出通知提醒,防止資料流量的快速流失,在實際的專案應用中是十分常見的。