苹果设备的网络状况多变,既可能有网,也可能网络断开,既可能通过wifi联网,也可能通过蜂窝数据联网,很多时候我们需要获知程序当前运行在何种网络状况下
我们可以在苹果官方下载工具类Reachability,解压后将Reachability.h和Reachability.m添加到我们的项目中
示例1:查看当前的网络环境(通过访问一个页面测试网络状况)
Reachability *reach = [Reachability reachabilityWithHostName:@"http://www.cnblogs.com/zanglitao/"]; switch([reach currentReachabilityStatus]) { case NotReachable: NSLog(@"无法访问"); break; case ReachableViaWiFi: NSLog(@"使用wifi"); case ReachableViaWWAN: NSLog(@"使用蜂窝数据"); }
示例2:测试手机是否连接wifi(或者蜂窝)
if([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable) { NSLog(@"wifi网络可用"); } if([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable) { NSLog(@"蜂窝网络可用"); }
示例3:监听网络变化
我们通过Reachability对象的startNotifier方法开启通知,当网络变化时Reachability会发出kReachabilityChangedNotification的通知给默认的通知中心
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(netStatusChange:) name:kReachabilityChangedNotification object:nil]; Reachability *reach = [Reachability reachabilityWithHostName:@"http://www.cnblogs.com/zanglitao/"]; [reach startNotifier];//[reach stopNotifier]; return YES; } - (void)netStatusChange:(NSNotification *)note { Reachability *reach = [note object]; //获取当前网络状态 NetworkStatus *status = [reach currentReachabilityStatus]; }