iOS實(shí)時(shí)監(jiān)控網(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ù)
常用的有以下兩種方法:
?。?)、使用蘋果觀法提供的檢測(cè)iOS設(shè)備網(wǎng)絡(luò)環(huán)境用的庫(kù) Reachablity
?。?)、使用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]; }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- iOS實(shí)現(xiàn)實(shí)時(shí)檢測(cè)網(wǎng)絡(luò)狀態(tài)的示例代碼
- iOS 檢測(cè)網(wǎng)絡(luò)狀態(tài)的兩種方法
- iOS中如何判斷當(dāng)前網(wǎng)絡(luò)環(huán)境是2G/3G/4G/5G/WiFi
- iOS 12+ 中檢測(cè)網(wǎng)絡(luò)訪問的方法
- 詳解iOS AFNetworking取消正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求
- iOS中從網(wǎng)絡(luò)獲取數(shù)據(jù)的幾種方法的比較
- iOS中多網(wǎng)絡(luò)請(qǐng)求的線程安全詳解
- iOS 本地視頻和網(wǎng)絡(luò)視頻流播放實(shí)例代碼
- 詳解IOS判斷當(dāng)前網(wǎng)絡(luò)狀態(tài)的三種方法
相關(guān)文章
iOS測(cè)試手機(jī)APP的方法匯總:真機(jī)運(yùn)行,打ipa包,testFlighe,蒲公英
這篇文章主要介紹了iOS通常測(cè)試手機(jī)APP的四種方法:真機(jī)運(yùn)行,打ipa包,(testFlighe)郵件,蒲公英測(cè)試。需要的朋友可以參考下2022-12-12iOS中UIWebView網(wǎng)頁(yè)加載組件的基礎(chǔ)及使用技巧實(shí)例
UIWebView是開發(fā)中很常用的應(yīng)用內(nèi)調(diào)用網(wǎng)頁(yè)瀏覽的控件,這里整理了一些iOS中UIWebView網(wǎng)頁(yè)加載組件的基礎(chǔ)及使用技巧實(shí)例 ,需要的朋友可以參考下2016-06-06iOS開發(fā)之用javascript調(diào)用oc方法而非url
本文說(shuō)的是非攔截URL進(jìn)行判斷,然后調(diào)用oc方法這種調(diào)用手段,所以不用討論說(shuō)為什么不用url這種方法,具體看需求,有需要的可以參考。2016-07-07iOS開發(fā)項(xiàng)目- 基于WebSocket的聊天通訊(1)
這篇文章主要介紹了iOS開發(fā)項(xiàng)目- 基于WebSocket的聊天通訊,WebSocket是web通信方式的一種,有需要的可以了解一下。2016-11-11IOS 手勢(shì)操作詳解及實(shí)例總結(jié)篇
這篇文章主要介紹了IOS 手勢(shì)操作詳解及實(shí)例總結(jié)篇的相關(guān)資料,需要的朋友可以參考下2017-01-01iOS實(shí)現(xiàn)抖音點(diǎn)贊動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)抖音點(diǎn)贊動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01