5.1 网络基础->1.4 网络状态监控
2016-04-13 本文已影响188人
蓝田_Loto
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。
1.4.1 网络状态监控-Reachability
在网络应用中,需要对用户设备的网络状态进行实时监控,目的是让用户了解自己的网络状态,防止一些误会(比如怪应用无能)
根据用户的网络状态进行智能处理,节省用户流量,提高用户体验
- WIFI、3G网络:自动下载高清图片
- 低速网络:只下载缩略图
- 没有网络:只显示离线的缓存数据
Reachability的使用步骤:
(1)添加框架SystemConfiguration.framework
(2)添加源代码
苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态
https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
(3)包含头文件
#import "Reachability.h"
Reachability常见方法
1.主动监测监测网络状态
// 是否WIFI
+ (BOOL)isEnableWIFI {
return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}
// 是否3G
+ (BOOL)isEnable3G {
return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}
2.监控网络状态
1> 监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
2> 开始监听网络状态
// 获得Reachability对象
self.reachability = [Reachability reachabilityForInternetConnection];
// 开始监控网络
[self.reachability startNotifier];
3> 移除监听
[self.reachability stopNotifier];
[[NSNotificationCenter defaultCenter] removeObserver:self];
代码示例:
#import "Reachability.h"
#import "ViewController.h"
@interface ViewController ()
@property(nonatomic, strong) Reachability *reachability; //监控网络
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self getNetworkStatus];
// 监听网络状态发生改变的通知
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(getNetworkStatus)
name:kReachabilityChangedNotification
object:nil];
// 获得Reachability对象
self.reachability = [Reachability reachabilityForInternetConnection];
// 开始监控网络(一旦网络状态发生改变,就会发出通知kReachabilityChangedNotification)
[self.reachability startNotifier];
}
// 获取现在的网络状态
- (void)getNetworkStatus {
if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus !=
NotReachable) {
NSLog(@"是wifi");
} else if ([Reachability reachabilityForInternetConnection]
.currentReachabilityStatus != NotReachable) {
NSLog(@"是手机自带网络");
} else {
NSLog(@"网络有问题");
}
}
// 移除通知
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self.reachability stopNotifier];
self.reachability = nil;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
1.4.2 网络状态监控-AFN框架
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, // 未知网络
AFNetworkReachabilityStatusNotReachable = 0, // 无法联网
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 手机自带网络
AFNetworkReachabilityStatusReachableViaWiFi = 2, // WIFI
};
代码示例:
#import "ViewController.h"
#import <AFNetworking.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 开始网络监控(获得网络监控的管理者)
AFNetworkReachabilityManager *mgr =
[AFNetworkReachabilityManager sharedManager];
// 设置网络状态改变后的处理
[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
// 当网络状态改变了, 就会调用这个block
switch (status) {
case AFNetworkReachabilityStatusUnknown: // 未知网络
NSLog(@"未知网络");
break;
case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)
NSLog(@"没有网络(断网)");
break;
case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络
NSLog(@"手机自带网络");
break;
case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI
NSLog(@"WIFI");
break;
}
}];
// 开始监控
[mgr startMonitoring];
// 拿到当前网络状态
// mgr.networkReachabilityStatus;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
作者:蓝田(Loto)
出处: 简书
如果你觉得本篇文章对你有所帮助,请点击文章末尾下方“喜欢”
如有疑问,请通过以下方式交流:
① 评论区回复
② 微信(加好友请注明“简书+称呼”)
③发送邮件
至 shorfng@126.com
本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。