检测网络状态
- 一般用AFN框架中的AFNetworkReachabilityManager.h
- 这个类可以监听用户网络状态,看时3G还是wifi,可以对应的返回缩略图还是大图
- 先获取网络监听管理者对象:单例,share
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
-设置监听
[manager setReachabilityStatusChangeBlock:^ void(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"未连接");
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"手机自带网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
NSLog(@"wifi网络");
break;
default:
NSLog(@"未识别");
break;
}
}];
- 开始监听
[manager startMonitoring];
不用AFN框架。
- 其实这个AFN的类没有依赖AFN框架,可以直接拖出来用,没有耦合性。企业里面用的更多的也是AFN的类,更简单
- 如果不用AFN,苹果也有检测网络环境的工具:Reachability
- 它有两个监听者对象,分别监听是否是手机自带网络和wifi。把方法合并起来写就是这样
if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
NSLog(@"wifi");
}else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable)
{
NSLog(@"手机自带网络");
}else{
NSLog(@"未连接");
}
- 但是这个方法只能监听一次,不能实时监听。
- 要实现实时监听,那么要用到它的通知方法。注意要先添加监听者再发出通知,还有网络监听者Reachability是局部变量,要保存起来。可见这个苹果的方法还是比较烦的。
// 1.注册一个通知, 监听网络状态的改变
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChange) name:kReachabilityChangedNotification object:nil];
// 2.开始发出通知
Reachability *r = [Reachability reachabilityForInternetConnection];
[r startNotifier];
self.r = r;
}
// 这里和上面的方法一样
- (void)networkChange
{
if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
NSLog(@"wifi");
}else if ([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable)
{
NSLog(@"手机自带网络");
}else{
NSLog(@"未连接");
}
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}