Qt for Ios 使用AFNetWorking監(jiān)聽APP網絡狀態(tài)變化(可用于更改緩存策略、提示網絡等)
我們知道在APP開發(fā)過程中,監(jiān)聽手機當前的網絡狀態(tài)還是一個很常用的方法,這里我來為大家接受一種使用AFNetWorking來監(jiān)聽當前的網絡狀態(tài)的方法;網絡監(jiān)聽對程序開發(fā)的幫助有很多:比如下載時在不同的網絡狀態(tài)下使用不同下載策略、緩存策略、或者就是一個單純的提示
使用控件在這里我使用的是AFNetWorking 3.0之前的版本,我并沒有測試過最新的3.0.4版本是否可以正常使用,但是我認為是不影響的,如果各位在測試過程中,有什么問題的話請直接私信我。
代碼實現(xiàn)首先我們新建一個繼承與NSObject的類,編寫一個單例。
NetworkingTools.h
#import
#import "AFNetworking.h"
@interface NetworkingTools : NSObject
+ (AFHTTPRequestOperationManager *)sharedManager;
@end
NetworkingTools.m
#import "NetworkingTools.h"
#import "AFNetworking.h"
@implementation NetworkingTools
+ (AFHTTPRequestOperationManager *)sharedManager {
static AFHTTPRequestOperationManager * manager = nil;
if (!manager) {
manager = [AFHTTPRequestOperationManager manager];
}
return manager;
}
@end
可以看到這基本上就是一個很簡單的單例。相信大家都不存在什么問題。?接下來會給大家看一個方法,也就是監(jiān)聽網絡狀態(tài)的方法,那么這里我推薦可以將這個方法在APPDelegate.m里面進行監(jiān)聽。
下面這段代碼是最關鍵的行的代碼,只要實現(xiàn)了堅聽網絡變化回調一般就沒有問題。
切記文章中的AFHTTPRequestOperationManager替換為AFNetworkReachabilityManager。
我的用法:?self.manager? = [AFNetworkReachabilityManager sharedManager];
? ? //開始監(jiān)聽
?[self.manager startMonitoring];
- (void)listenNetWorkingPort{
[[NSURLCache sharedURLCache] setMemoryCapacity:5 * 1024 * 1024];
[[NSURLCache sharedURLCache] setDiskCapacity:50 * 1024 * 1024];
AFHTTPRequestOperationManager * manager = [NetworkingTools sharedManager];
// 設置網絡狀態(tài)變化回調
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
// 設置網絡請求的緩存政策
manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataDontLoad;
NSLog(@"斷網狀態(tài)");
// [UIAlertView showConfigPrompt:NSLocalizedString(@"當前沒有網絡,請檢查你的網絡設置", nil)];
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
// 設置網絡請求的緩存政策
manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
NSLog(@"4G狀態(tài)");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
// 設置網絡請求的緩存政策
manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
NSLog(@"WiFi狀態(tài)");
break;
default:
break;
}
}];
// 啟動網絡狀態(tài)監(jiān)聽
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
后記目前為大家?guī)淼亩际切┍容^簡單的小技巧和工具,希望和大家共同交流和進步。也很想寫一遍比較充實的干貨,但是目前水平和各方面的限制,就先這樣了。