网络状况监测三方库:Reachability
@property (nonatomic, strong) Reachability *connect;
- (void)viewDidLoad {
//通知 检测网络状态改变
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netStateChange) name:kReachabilityChangedNotification object:nil];
self.connect = [Reachability reachabilityForInternetConnection]; //单例对象
[self.connect startNotifier];
}
- (void)netStateChange { //通知检测(网络改变)的方法
[self checkNetState];
}
- (void)checkNetState {
// 1.检测WiFi状态
Reachability *wifiConnect = [Reachability reachabilityForLocalWiFi];
// 2.检测手机是否能上网络(WiFi\3G\2.5G)
Reachability *connect = [Reachability reachabilityForInternetConnection];
//reachabilityForLocalWiFi、reachabilityForInternetConnection 检测的网络情况 相同
//0:NotReachable, 1:ReachableViaWWAN, 2:ReachableViaWiFi
NSLog(@"%ld",(long)[wifiConnect currentReachabilityStatus]);
NSLog(@"%ld",(long)[connect currentReachabilityStatus]);
// 3.判断网络状态
if ([connect currentReachabilityStatus] == ReachableViaWiFi) {
// 有WiFi
NSLog(@"使用WiFi");
} else if ([connect currentReachabilityStatus] == ReachableViaWWAN) {
// 没有使用WiFi, 使用手机自带网络
NSLog(@"使用手机自带网络,进行上网");
} else {
// 没有网络
NSLog(@"没有网络");
}
}
// 析构方法:移除通知对象
- (void)dealloc {
[self.connect stopNotifier]; //停止Reachability
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
三方库“AFNetworking”的网络监测:
三方库“AFNetworking”的类似功能,对比:
//AFNetworking监测网络状态 -(void)checkNetStatus { //网络监控句柄 (单例对象) AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager]; //要监控网络连接状态,必须先调用单例的startMonitoring方法 [manager startMonitoring]; [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { //status: /** 网络状态 监控 */ //AFNetworkReachabilityStatusUnknown = -1, 未知 //AFNetworkReachabilityStatusNotReachable = 0, 未连接 //AFNetworkReachabilityStatusReachableViaWWAN = 1, 3G //AFNetworkReachabilityStatusReachableViaWiFi = 2, 无线连接 NSLog(@"%ld", (long)status); }]; }