IOS開發過程中網絡狀態的監測
(1) 蘋果自帶的Reachability
注意:Build Phases 中的 Compile Sources中Reachability.m設置
核心代碼:
@property (nonatomic, strong) Reachability *reach;
- (void)viewDidLoad {
[super viewDidLoad];
//發送狀態改變的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStatusChanged) name:kReachabilityChangedNotification object:nil];
//獲取Reachability對象
_reach = [Reachability reachabilityForInternetConnection];
//開始監聽網絡
[self.reach startNotifier];
}
- (void)dealloc{
[self.reach stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self checkNetworkState];
}
- (void)networkStatusChanged{
NSLog(@"網絡狀態改變");
[self checkNetworkState];
}
/** 監聽網絡改變 */
- (void)checkNetworkState{
if ([self isWifi]){
NSLog(@"WIFI");
}else if([self isWan]){
NSLog(@"WAN");
}else{
NSLog(@"無網絡連接");
}
}
/** 判斷是否爲wifi */
- (BOOL)isWifi{
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
//獲取當前的狀態
NetworkStatus wifiStatus = wifi.currentReachabilityStatus;
if (wifiStatus != NotReachable) {
return YES;
}else{
return NO;
}
}
/** 判斷是否爲WAN */
- (BOOL)isWan{
Reachability *wan = [Reachability reachabilityForInternetConnection];
NetworkStatus wanStatus = wan.currentReachabilityStatus;
if (wanStatus != NotReachable) {
return YES;
}else{
return NO;
}
}
2 用 AFNetworking 框架中的 AFNetworkReachabilityManager 實現網絡狀態監聽:
@property (nonatomic, strong) AFNetworkReachabilityManager *mgr;
- (void)afnStatus{
self.mgr = [AFNetworkReachabilityManager manager];
[self.mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知原因");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"無網絡連接");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"WIFI");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"WAN");
break;
default:
break;
}
}];
[self.mgr startMonitoring];
}
- (void)dealloc{
[self.mgr stopMonitoring];
}