转载自:http://blog.youkuaiyun.com/lansekj/article/details/7835857
1、注册通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityIsChanged:) name:kReachabilityChangedNotification object:nil];
2、创建Reachability实例对象并开启通知
struct sockaddr_in address;
memset(&address, 0, sizeof(address));
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htonl(IP_PORT);
address.sin_addr.s_addr = htons(inet_addr(IP_Address));
reachability = [[Reachability reachabilityWithAddress:&address] retain];
[reachability startNotifier];//开启网络检测
3、网络状态改变接受通知处理
-(void)reachabilityIsChanged:(NSNotification *)notify {
Reachability *curReach = [notify object];
NetworkStatus networkStatus = [curReach currentReachabilityStatus];
if (networkStatus == NotReachable) { //无网络状态
//TODO
} else { //有网络状态,3G或wifi
//TODO
}
}
4、关闭通知并释放对象
[[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
if (reachability) {
[reachability stopNotifier]; //关闭网络检测
[reachability release];
}
Block方式
- (void)viewDidLoad
{
[super viewDidLoad];
DLog(@"开启 www.apple.com 的网络检测");
Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
DLog(@"-- current status: %@", reach.currentReachabilityString);
// start the notifier which will cause the reachability object to retain itself!
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification
object:nil];
reach.reachableBlock = ^(Reachability * reachability)
{
dispatch_async(dispatch_get_main_queue(), ^{
self.blockLabel.text = @"网络可用";
self.blockLabel.backgroundColor = [UIColor greenColor];
});
};
reach.unreachableBlock = ^(Reachability * reachability)
{
dispatch_async(dispatch_get_main_queue(), ^{
self.blockLabel.text = @"网络不可用";
self.blockLabel.backgroundColor = [UIColor redColor];
});
};
[reach startNotifier];
}
notification方式
- (void)viewDidLoad
{
[super viewDidLoad];
DLog(@"开启 www.apple.com 的网络检测");
Reachability* reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
DLog(@"-- current status: %@", reach.currentReachabilityString);
// start the notifier which will cause the reachability object to retain itself!
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification
object:nil];
[reach startNotifier];
}
- (void) reachabilityChanged: (NSNotification*)note {
Reachability * reach = [note object];
if(![reach isReachable])
{
self.notificationLabel.text = @"网络不可用";
self.notificationLabel.backgroundColor = [UIColor redColor];
self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
return;
}
self.notificationLabel.text = @"网络可用";
self.notificationLabel.backgroundColor = [UIColor greenColor];
if (reach.isReachableViaWiFi) {
self.wifiOnlyLabel.backgroundColor = [UIColor greenColor];
self.wifiOnlyLabel.text = @"当前通过wifi连接";
} else {
self.wifiOnlyLabel.backgroundColor = [UIColor redColor];
self.wifiOnlyLabel.text = @"wifi未开启,不能用";
}
if (reach.isReachableViaWWAN) {
self.wwanOnlyLabel.backgroundColor = [UIColor greenColor];
self.wwanOnlyLabel.text = @"当前通过2g or 3g连接";
} else {
self.wwanOnlyLabel.backgroundColor = [UIColor redColor];
self.wwanOnlyLabel.text = @"2g or 3g网络未使用";
}
}