iOS 檢測網路狀態

2021-07-27 05:43:40 字數 3776 閱讀 2194

1.ios平台是按照一直有網路連線的思路來設計的,開發者利用這一特點創造了很多優秀的第三方應用。大多數的ios應用都需要聯網,甚至有些應用嚴重依賴網路,沒有網路就無法正常工作。

2.在你的應用嘗試通過網路獲取資料之前,你需要知道當前裝置是否知道連線上了網路,甚至有時候你可能還需要知道當前網路是由wifi還是由移動蜂窩網路提供的。

3.「在網路訪問失敗的時候,應用沒有做出適當的提示」是蘋果的ios審核團隊拒絕乙個應用的常見理由。蘋果要求你必須先檢測網路連線狀態,當網路不可用的時候以某種方式告知使用者,或者用其他優雅的方式進行處理。

reachability類:

1.這個類用於檢測當前網路狀態,它不是sdk的一部分,可以在ios developer library裡找到這份**。

2.重用reachability類

(1)把reachability.h和reachability.m檔案拖到專案中。

(2)新增框架:systemconfiguration.framework。

3.同步的reachability

(1)使用同步的方式是比較簡單,匯入reachability.h標頭檔案,然後通過**檢查網路:

#import 「reachability.h」

。。。some code omitted…

reachability *reach = [reachability reachabilityforinternetconnection];

networkstatus status = [reach currentreachabilitystatus];

(2)通過檢查某個主機能否訪問來判斷當前網路是否可用:

networkstatus status = [reach currentreachabilitystatus];

(3)案例:

建立乙個工程,並新增reachability.h和reachability.m到工程中,並鏈結systemconfiguration.framework.

#import #import "reachability.h"

-(nsstring *)stringfromstatus:(networkstatus)status;

@end

reachability *reach = [reachability reachabilityforinternetconnection];

networkstatus status = [reach currentreachabilitystatus];

uialertview *alert = [[uialertview alloc]initwithtitle:@"reachability" message:[self stringfromstatus:status] delegate:nil cancelbuttontitle:@"ok" otherbuttontitles:nil];

[alert show];

return yes;

}-(nsstring *)stringfromstatus:(networkstatus)status

return string;

}4.非同步的reachability

(1)非同步的方式稍微複雜,不過通過這種方式可以來訂閱實時的網路狀態變化通知。匯入reachability.h標頭檔案,然後註冊乙個物件來訂閱網路狀態變化的資訊,網路狀態變化的資訊名稱為kreachabilitychanged-notification.如下:

[[nsnotificationcenter defaultcenter] addobserver:self

selector:@selector(reachabilitychanged:)

name:kreachabilitychangednotification

object:nil];

(2)你需要建立乙個reachability物件例項並開始向外發布網路狀態變化的訊息:

[reach startnotifier];

(3)當網路狀態發生變化的時候,reachability物件將呼叫reachabilitychanged:方法,可以在這個方法裡面獲取當前的網路狀態,然後做相應的處理。

- (void)reachabilitychanged:(nsnotification *)notification                   

}

5.原生 reachability api

前面將的reachability類實際上是蘋果公司對scnetworkreachability api的封裝,這個api定義在systemconfigure.framework庫中。如果有其他特別的需求,也可以直接使用這個原生的scnetworkreachability類。

6.可以為reachability增加2g/3g/4g的判斷

reachability.h裡增加三種狀態

typedef enum : nsinteger  networkstatus;
reachability.m裡匯入#import

替換這個方法

- (networkstatus)networkstatusforflags:(scnetworkreachabilityflags)flags

networkstatus returnvalue = notreachable;

if ((flags & kscnetworkreachabilityflagsconnectionrequired) == 0)

if ((((flags & kscnetworkreachabilityflagsconnectionondemand ) != 0) ||

(flags & kscnetworkreachabilityflagsconnectionontraffic) != 0))

}if ((flags & kscnetworkreachabilityflagsiswwan) == kscnetworkreachabilityflagsiswwan)

else if ([networknamestring isequaltostring:ctradioaccesstechnologywcdma]||[networknamestring isequaltostring:ctradioaccesstechnologyhsdpa]||[networknamestring isequaltostring:ctradioaccesstechnologyhsupa]||[networknamestring isequaltostring:ctradioaccesstechnologyhsupa]||[networknamestring isequaltostring:ctradioaccesstechnologycdmaevdorev0]||[networknamestring isequaltostring:ctradioaccesstechnologycdmaevdoreva]||[networknamestring isequaltostring:ctradioaccesstechnologycdmaevdorevb]||[networknamestring isequaltostring:ctradioaccesstechnologyehrpd])else if ([networknamestring isequaltostring:ctradioaccesstechnologylte])else

}else

}else

}return returnvalue;

}

參考:

iOS檢測網路狀態

很多任務程多需要用到網路,時刻需要對網路鏈結進行判斷,下面介紹怎麼使用網路鏈結第三方,進行判斷網路以及判斷是wifi,4g網路等等 少說廢話上 import viewcontroller.h import reachability.h inte ce viewcontroller property ...

iOS 檢測網路狀態

1.為什麼要檢測網路狀態?1.1 讓使用者知道自己的網路狀態,防止使用者埋怨 這個應用太垃圾,獲取資料那麼慢 1.2 根據使用者的網路狀態,智慧型處理,提公升使用者體驗 例如某些手機瀏覽器,檢測到使用者網路是2g 3g時,會自動切換為無圖模式 2.手動觸發 如下 void touchesbegan ...

IOS檢測網路連線狀態

然後將reachability.h 和 reachability.m 加到自己的專案中,並引用systemconfiguration.framework,就可以使用了。reachability 中定義了3種網路狀態 the network state of the device for reacha...