最近項目中遇到了要判斷用戶是以哪種上網(wǎng)方式豫喧,再做不同的操作石洗,每次主動讀取網(wǎng)絡(luò)狀態(tài)重復(fù)代碼太多,因此找到了兩種監(jiān)聽網(wǎng)絡(luò)被動響應(yīng)的方法紧显。
AFNetworkReachabilityManager
- 添加框架
pod 'AFNetworking', '~> 2.6.3'
- 導(dǎo)入頭文件
#import "AFNetworking.h"
- 監(jiān)聽網(wǎng)絡(luò)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self listenNetWorkingStatus]; //監(jiān)聽網(wǎng)絡(luò)是否可用
}
-(void)listenNetWorkingStatus{
//1:創(chuàng)建網(wǎng)絡(luò)監(jiān)聽者
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager manager];
//2:獲取網(wǎng)絡(luò)狀態(tài)
/*
AFNetworkReachabilityStatusUnknown = 未知網(wǎng)絡(luò)讲衫,
AFNetworkReachabilityStatusNotReachable = 沒有聯(lián)網(wǎng)
AFNetworkReachabilityStatusReachableViaWWAN = 蜂窩數(shù)據(jù)
AFNetworkReachabilityStatusReachableViaWiFi = 無線網(wǎng)
*/
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusUnknown:
NSLog(@"未知網(wǎng)絡(luò)");
break;
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"沒有聯(lián)網(wǎng)");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"蜂窩數(shù)據(jù)");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"無線網(wǎng)");
break;
default:
break;
}
}];
//開啟網(wǎng)絡(luò)監(jiān)聽
[manager startMonitoring];
}
RealReachability
- 添加框架
pod 'RealReachability', '~> 1.1.2'
- 導(dǎo)入頭文件
#import "RealReachability.h"
- 監(jiān)聽網(wǎng)絡(luò)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self listenNetWorkingStatus]; //監(jiān)聽網(wǎng)絡(luò)是否可用
}
-(void)listenNetWorkingStatus{
[GLobalRealReachability startNotifier];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(networkChanged:)
name:kRealReachabilityChangedNotification
object:nil];
ReachabilityStatus status = [GLobalRealReachability currentReachabilityStatus];
[self realNetworkingStatus:status];
}
- (void)networkChanged:(NSNotification *)notification
{
RealReachability *reachability = (RealReachability *)notification.object;
ReachabilityStatus status = [reachability currentReachabilityStatus];
[self realNetworkingStatus:status];
}
-(void)realNetworkingStatus:(ReachabilityStatus)status{
switch (status)
{
case RealStatusUnknown:
{
NSLog(@"~~~~~~~~~~~~~RealStatusUnknown");
break;
}
case RealStatusNotReachable:
{
NSLog(@"~~~~~~~~~~~~~RealStatusNotReachable");
break;
}
case RealStatusViaWWAN:
{
NSLog(@"~~~~~~~~~~~~~RealStatusViaWWAN");
break;
}
case RealStatusViaWiFi:
{
NSLog(@"~~~~~~~~~~~~~RealStatusViaWiFi");
break;
}
default:
break;
}
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}