iOSReachability判断网络连接状态
2015-11-24 14:39
549 查看
//
// NetStateManage.h
//
// Created by miniu on 15/11/24.
// Copyright © 2015年 mini. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Reachability.h"
@protocol NetStateManageDelegate <NSObject>
@optional
-(void)networkStatusChange:(NetworkStatus)networkStatus;
@end
@interface NetStateManage : NSObject
@property (nonatomic,weak)id <NetStateManageDelegate>delegate;
+ (NetStateManage *)shareInstance;
//当前的网络状态
- (NetworkStatus)currentNetworkStatus;
@end
//
// NetStateManage.m
//
// Created by miniu on 15/11/24.
// Copyright © 2015年 mini. All rights reserved.
//
#import "NetStateManage.h"
@interface NetStateManage ()
{
Reachability *reachability;
NetworkStatus hostNetStatus;
}
@end
@implementation NetStateManage
- (instancetype)init
{
self = [super init];
if (self) {
//使用Reachability
[self useReachability];
}
return self;
}
- (void)useReachability{
// 监听网络状态改变的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
// 创建Reachability
reachability = [Reachability reachabilityForInternetConnection];
// 开始监控网络(一旦网络状态发生改变, 就会发出通知kReachabilityChangedNotification)
[reachability startNotifier];
}
// 处理网络状态改变
- (void)networkStateChange
{
// 1.检测wifi状态
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2.检测手机是否能上网络(WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];
// 3.判断网络状态
if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi
NSLog(@"有wifi");
hostNetStatus=ReachableViaWiFi;
} else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网
NSLog(@"使用手机自带网络进行上网");
hostNetStatus=ReachableViaWWAN;
}else { // 没有网络
NSLog(@"没有网络");
hostNetStatus=NotReachable;
}
if ([self.delegate respondsToSelector:@selector(networkStatusChange:)]) {
[self.delegate networkStatusChange:hostNetStatus];
}
}
+ (NetStateManage *)shareInstance
{
static NetStateManage *hardwareManager=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
hardwareManager=[[self alloc] init];
});
return hardwareManager;
}
//返回当前的网络状态
- (NetworkStatus)currentNetworkStatus
{
return [reachability currentReachabilityStatus];
}
@end
// NetStateManage.h
//
// Created by miniu on 15/11/24.
// Copyright © 2015年 mini. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Reachability.h"
@protocol NetStateManageDelegate <NSObject>
@optional
-(void)networkStatusChange:(NetworkStatus)networkStatus;
@end
@interface NetStateManage : NSObject
@property (nonatomic,weak)id <NetStateManageDelegate>delegate;
+ (NetStateManage *)shareInstance;
//当前的网络状态
- (NetworkStatus)currentNetworkStatus;
@end
//
// NetStateManage.m
//
// Created by miniu on 15/11/24.
// Copyright © 2015年 mini. All rights reserved.
//
#import "NetStateManage.h"
@interface NetStateManage ()
{
Reachability *reachability;
NetworkStatus hostNetStatus;
}
@end
@implementation NetStateManage
- (instancetype)init
{
self = [super init];
if (self) {
//使用Reachability
[self useReachability];
}
return self;
}
- (void)useReachability{
// 监听网络状态改变的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
// 创建Reachability
reachability = [Reachability reachabilityForInternetConnection];
// 开始监控网络(一旦网络状态发生改变, 就会发出通知kReachabilityChangedNotification)
[reachability startNotifier];
}
// 处理网络状态改变
- (void)networkStateChange
{
// 1.检测wifi状态
Reachability *wifi = [Reachability reachabilityForLocalWiFi];
// 2.检测手机是否能上网络(WIFI\3G\2.5G)
Reachability *conn = [Reachability reachabilityForInternetConnection];
// 3.判断网络状态
if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi
NSLog(@"有wifi");
hostNetStatus=ReachableViaWiFi;
} else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网
NSLog(@"使用手机自带网络进行上网");
hostNetStatus=ReachableViaWWAN;
}else { // 没有网络
NSLog(@"没有网络");
hostNetStatus=NotReachable;
}
if ([self.delegate respondsToSelector:@selector(networkStatusChange:)]) {
[self.delegate networkStatusChange:hostNetStatus];
}
}
+ (NetStateManage *)shareInstance
{
static NetStateManage *hardwareManager=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
hardwareManager=[[self alloc] init];
});
return hardwareManager;
}
//返回当前的网络状态
- (NetworkStatus)currentNetworkStatus
{
return [reachability currentReachabilityStatus];
}
@end
相关文章推荐
- 随机网络和无标度网络
- HttpClient 发送网络请求步骤
- 小世界网络
- 关于从网络上获取图片后自适应cell并且不失真的问题
- Android HttpUrlConnection 发送网络请求步骤总结
- android中的http通讯----(4)客户端解析json格式
- WebService调试工具之TCPMON
- linux网络编程之TCP/IP基础:IP数据报格式和IP地址路由
- httpClient例子详解
- HttpClient发送post请求
- android访问网络,下载图片,并设置UI
- iOS中ASIHTTPRequest和AFNetworking的区别
- svn错误svn: E170000: Unrecognized URL scheme for http
- java利器jodd打印输出http协议信息
- WinSock网络通信
- 正确方式在XMind 6插入网络图片
- 【计算机网络】:http报文详解
- linux网络编程之TCP/IP基础:ping命令解释
- 【计算机网络】:arp协议分析
- TCP/IP协议(四)---应用层