本文的意義
- 利用蘋果原生的類Reachability蜜宪,實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)的狀態(tài)
- 利用框架AFNetworking實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)
網(wǎng)絡(luò)狀態(tài)實(shí)時(shí)監(jiān)控的目的
讓用戶了解自己的網(wǎng)絡(luò)狀態(tài),防止一些誤會(huì)
根據(jù)用戶的網(wǎng)絡(luò)狀態(tài)進(jìn)行智能處理七婴,節(jié)省用戶流量官还,提高用戶體驗(yàn)
WIFI\3G網(wǎng)絡(luò):自動(dòng)下載高清圖片
低速網(wǎng)絡(luò):只下載縮略圖
沒有網(wǎng)絡(luò):只顯示離線的緩存數(shù)據(jù)
蘋果官方提供了一個(gè)叫Reachability的示例程序,便于開發(fā)者檢測網(wǎng)絡(luò)狀態(tài)
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
利用蘋果原生的類Reachability實(shí)現(xiàn)實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)
Reachability的使用步驟
- 添加框架SystemConfiguration.framework
- 添加源代碼
- Reachability.h
- Reachability.m - 包含頭文件
實(shí)現(xiàn)代碼如下:
- (void)appleMonitoring
{
// 監(jiān)聽通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetworkStatus) name:kReachabilityChangedNotification object:nil];
// 開始監(jiān)控網(wǎng)絡(luò)
self.reachability = [Reachability reachabilityForInternetConnection];
[self.reachability startNotifier];
}
// 重寫控制器的dealloc方法讥耗,當(dāng)控制器銷毀的時(shí)候移除通知
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
// 關(guān)閉監(jiān)控
[self.reachability stopNotifier];
self.reachability = nil;
}
// 獲取網(wǎng)絡(luò)狀態(tài)
- (void)getNetworkStatus
{
// 判斷當(dāng)前網(wǎng)絡(luò)是否是WiFi
if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
NSLog(@"是wifi");
// 判斷當(dāng)前網(wǎng)絡(luò)是否是手機(jī)自帶網(wǎng)絡(luò)
} else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable) {
NSLog(@"是手機(jī)自帶網(wǎng)絡(luò)");
} else {
NSLog(@"網(wǎng)絡(luò)有問題");
}
}
利用流行框架AFNetworking實(shí)現(xiàn)實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)
實(shí)現(xiàn)代碼如下:
- (void)afnMonitoring
{
// 開始網(wǎng)絡(luò)監(jiān)控
AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"-----當(dāng)前的網(wǎng)絡(luò)狀態(tài)---%zd", status);
}];
[mgr startMonitoring];
// 拿到當(dāng)前網(wǎng)絡(luò)狀態(tài)
// mgr.networkReachabilityStatus;
}