.#### - 可以利用AFNetworking实现监测手机网络状态的功能
- 创建监听管理者
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
- 开始进行监控
[manager startMonitoring];
- 判断当前状态
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
/*
typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {
AFNetworkReachabilityStatusUnknown = -1, //未知
AFNetworkReachabilityStatusNotReachable = 0, //无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, //3G
AFNetworkReachabilityStatusReachableViaWiFi = 2, //WIFI
};
*/
case AFNetworkReachabilityStatusUnknown:
{
NSLog(@"未知网络");
}
break;
case AFNetworkReachabilityStatusNotReachable:
{
NSLog(@"无法联网");
}
break;
case AFNetworkReachabilityStatusReachableViaWWAN:
{
NSLog(@"当前使用的是2g/3g/4g网络");
}
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
{
NSLog(@"当前在WIFI网络下");
}
}
}];
- 还可以利用苹果提供的Reachablity库进行实现
苹果官方提供的Doc,下载地址: http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html
Reachability类:这个类用于检测当前网络状态,是苹果公司对SCNetworkReachability API的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。Reachability类不是SDK的一部分,可以在iOS Developer Library里找到这份代码。
如何使用Reachability
从苹果网站上下载Reachability.zip文件,解压之。
-
重用Reachability类
(1)把Reachability.h和Reachability.m文件拖到项目中。
(2)添加框架:SystemConfiguration.framework。
因为Reachablity只能监听网络状态的状况,不能监听它的改变,所以采用通知的方式
- 首先添加引用
@property (nonatomic) Reachability *internetReachability;
- 然后在viewDidLoad中添加监听
- (void)viewDidLoad {
[super viewDidLoad];
//创建监听
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
//生成对象
self.internetReachability = [Reachability reachabilityForInternetConnection];
[self.internetReachability startNotifier];
//由于kReachabilityChangedNotification监听只有在网络状态改变时才会生效,所以调用此方法,主动判断网络状态
[self updateInterfaceWithReachability:self.internetReachability];
}
-(void)reachabilityChanged:(NSNotification *)note{
Reachability *curReach = [note object];
NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
[self updateInterfaceWithReachability:curReach];
}
- (void)updateInterfaceWithReachability:(Reachability *)reachability{
NetworkStatus netStatus = [reachability currentReachabilityStatus];
switch (netStatus) {
case NotReachable:
NSLog(@"无网络");
break;
case ReachableViaWiFi:
NSLog(@"WIFI");
break;
case ReachableViaWWAN:
NSLog(@"手机网络");
break;
default:
break;
}
}
- 最后销毁监听
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
}
但是第一次尝试的时候,没有添加引用,发现在页面加载时检测到网络状态,但是在网络状态改变是不会调用通知,要注意这样写是不行的
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
Reachability *reach = [Reachability reachabilityForInternetConnection];
[self updateInterfaceWithReachability:reach];
[reach startNotifier];
}