天天看點

ios 快速判斷目前網絡狀态(三種方法)

1️⃣-利用AFN架構

//1.建立網絡狀态監測管理者

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager  sharedManager];

//2.監聽改變

[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus  status) {

switch (status) {

case  AFNetworkReachabilityStatusUnknown:

NSLog(@"未知");

break;

case AFNetworkReachabilityStatusNotReachable:

NSLog(@"沒有網絡");

[MBProgressHUD showError:@"網絡不可用,請連接配接網絡"];

case AFNetworkReachabilityStatusReachableViaWWAN:

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

case AFNetworkReachabilityStatusReachableViaWiFi:

NSLog(@"WiFi");

default:

}

}];

[manager startMonitoring];//開始監聽

---------------------------------------------------

2️⃣

-利用系統狀态欄判斷網絡狀态

// 狀态欄是由目前app控制的,首先擷取目前app

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";

case 2:

return @"3G";

case 3:

return @"4G";

case 5:

return @"WIFI";

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

警告 :此方法存在一定的局限性,比如當狀态欄被隐藏的時候,無法使用此方法。

----------------------------------------------------------

3️⃣

-通過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(@"正在使用移動資料網絡");

case  ReachableViaWiFi:

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

NSLog(@"無網絡");

//根據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){

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

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

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

繼續閱讀