檢測網(wǎng)絡(luò)狀態(tài)
題記:最近在帶子公司的人進(jìn)行一些老項(xiàng)目的優(yōu)化,老項(xiàng)目里面網(wǎng)絡(luò)大部分使用ASI和SBJson,ASI依賴于Reachability,所以再次普及一下Reachability和ASI的知識,上一次寫Reachability和ASI的文章三年前了,時光荏苒,白駒過隙,時間轉(zhuǎn)瞬即逝,勸君惜取少年時
- 在網(wǎng)絡(luò)應(yīng)用中,需要對用戶設(shè)備的網(wǎng)絡(luò)狀態(tài)進(jìn)行實(shí)時監(jiān)控,目的是
- 讓用戶了解自己的網(wǎng)絡(luò)狀態(tài),防止一些誤會(比如怪應(yīng)用無能)
- 根據(jù)用戶的網(wǎng)絡(luò)狀態(tài)進(jìn)行智能處理,節(jié)省用戶流量,提高用戶體驗(yàn)
- WIFI\4G網(wǎng)絡(luò):自動下載高清圖片
- 低速網(wǎng)絡(luò):只下載縮略圖
- 沒有網(wǎng)絡(luò):只顯示離線的緩存數(shù)據(jù)
- 蘋果官方提供了一個叫Reachability的示例程序,便于開發(fā)者檢測網(wǎng)絡(luò)狀態(tài)
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
Reachability類:
1.這個類用于檢測當(dāng)前網(wǎng)絡(luò)狀態(tài),它不是SDK的一部分,可以從蘋果網(wǎng)站上下載Reachability.zip文件,解壓之。
2.引用Reachability類
(1)把Reachability.h和Reachability.m文件拖到項(xiàng)目中。
(2)添加框架:SystemConfiguration.framework。
(3)非ARC文件:添加-fno-objc-arc。
3.Reachability的使用
#import "ViewController.h"
#import "Reachability.h"
@interface ViewController ()
@property (nonatomic, strong) Reachability *conn;
@end
@implementation HMViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
self.conn = [Reachability reachabilityForInternetConnection];
[self.conn startNotifier];
}
- (void)dealloc
{
[self.conn stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)networkStateChange
{
[self checkNetworkState];
}
// 用WIFI
// [wifi currentReachabilityStatus] != NotReachable
// [conn currentReachabilityStatus] != NotReachable
// 沒有用WIFI, 只用了手機(jī)網(wǎng)絡(luò)
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] != NotReachable
// 沒有網(wǎng)絡(luò)
// [wifi currentReachabilityStatus] == NotReachable
// [conn currentReachabilityStatus] == NotReachable
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
}
- (void)checkNetworkState
{
// 1.檢測wifi狀態(tài)
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2.檢測手機(jī)是否能上網(wǎng)絡(luò)(WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];
// 3.判斷網(wǎng)絡(luò)狀態(tài)
if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi
NSLog(@"有wifi");
} else if ([conn currentReachabilityStatus] != NotReachable) { // 沒有使用wifi, 使用手機(jī)自帶網(wǎng)絡(luò)進(jìn)行上網(wǎng)
NSLog(@"使用手機(jī)自帶網(wǎng)絡(luò)進(jìn)行上網(wǎng)");
} else { // 沒有網(wǎng)絡(luò)
NSLog(@"沒有網(wǎng)絡(luò)");
}
}
@end