iOS 检测网络状态的2个方法
来源:互联网 发布:js初始化加载 编辑:程序博客网 时间:2024/05/16 23:35
iOS 检测网络状态
一般有两种方式,都是第三方的框架。
一:Reachability
1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.frame。
2. 在AppDelegate.m中这样实现:
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 2 //开启网络状况的监听 3 //来订阅实时的网络状态变化通知。导入Reachability.h头文件,然后注册一个对象来订阅网络状态变化的信息,网络状态变化的信息名称为kReachabilityChanged-Notification 4 5 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; 6 //通过检查某个主机能否访问来判断当前网络是否可用: 7 self.hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"] ; 8 9 //开始监听,会启动一个run loop10 [self.hostReach startNotifier];11 12 }13 14 -(void)reachabilityChanged:(NSNotification *)note{15 Reachability *currReach = [note object];16 17 NSParameterAssert([currReach isKindOfClass:[Reachability class]]);18 19 //对连接改变做出响应处理动作20 21 NetworkStatus status = [currReach currentReachabilityStatus];22 23 //如果没有连接到网络就弹出提醒实况24 25 self.isReachable = YES;26 27 if(status == NotReachable){28 29 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];30 [alert show];31 [alert release];32 self.isReachable = NO;33 return;34 35 }36 37 if (status==kReachableViaWiFi||status==kReachableViaWWAN) {38 39 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接信息" message:@"网络连接正常" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];40 41 // [alert show];42 43 [alert release];44 self.isReachable = YES;45 46 }47 }48 49 然后在每个页面的viewWillAppear:加上:50 51 -(void)viewWillAppear:(BOOL)animated{52 [super viewWillAppear:YES];53 AppDelegate *appDlg = (AppDelegate *)[[UIApplication sharedApplication] delegate];54 if(appDlg.isReachable){55 NSLog(@"网络已连接");//执行网络正常时的代码56 }57 else{58 NSLog(@"网络连接异常");//执行网络异常时的代码59 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];60 [alert show];61 [alert release];62 }63 }
这样就可以检查到在运行程序时网络突然的中断和连接。Reachability类实际上是苹果公司对SCNetworkReachability API的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。
二:AFNetworking监测
1.导入框架,和头文件#import <AFNetworkReachabilityManager.h>
2.代码:
1 -(void)afn{ 2 //1.创建网络状态监测管理者 3 AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManager sharedManager]; 4 //开启监听,记得开启,不然不走block 5 [manger startMonitoring]; 6 //2.监听改变 7 [manger setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 8 /* 9 AFNetworkReachabilityStatusUnknown = -1,10 AFNetworkReachabilityStatusNotReachable = 0,11 AFNetworkReachabilityStatusReachableViaWWAN = 1,12 AFNetworkReachabilityStatusReachableViaWiFi = 2,13 */14 switch (status) {15 case AFNetworkReachabilityStatusUnknown:16 NSLog(@"未知");17 break;18 case AFNetworkReachabilityStatusNotReachable:19 NSLog(@"没有网络");20 break;21 case AFNetworkReachabilityStatusReachableViaWWAN:22 NSLog(@"3G|4G");23 break;24 case AFNetworkReachabilityStatusReachableViaWiFi:25 NSLog(@"WiFi");26 break;27 default:28 break;29 }30 }];31 }
一般有两种方式,都是第三方的框架。
一:Reachability
1.首先在AppDelegate.h添加头文件"Reachability.h",导入框架SystemConfiguration.frame。
2. 在AppDelegate.m中这样实现:
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 2 //开启网络状况的监听 3 //来订阅实时的网络状态变化通知。导入Reachability.h头文件,然后注册一个对象来订阅网络状态变化的信息,网络状态变化的信息名称为kReachabilityChanged-Notification 4 5 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; 6 //通过检查某个主机能否访问来判断当前网络是否可用: 7 self.hostReach = [Reachability reachabilityWithHostName:@"www.baidu.com"] ; 8 9 //开始监听,会启动一个run loop10 [self.hostReach startNotifier];11 12 }13 14 -(void)reachabilityChanged:(NSNotification *)note{15 Reachability *currReach = [note object];16 17 NSParameterAssert([currReach isKindOfClass:[Reachability class]]);18 19 //对连接改变做出响应处理动作20 21 NetworkStatus status = [currReach currentReachabilityStatus];22 23 //如果没有连接到网络就弹出提醒实况24 25 self.isReachable = YES;26 27 if(status == NotReachable){28 29 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];30 [alert show];31 [alert release];32 self.isReachable = NO;33 return;34 35 }36 37 if (status==kReachableViaWiFi||status==kReachableViaWWAN) {38 39 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接信息" message:@"网络连接正常" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];40 41 // [alert show];42 43 [alert release];44 self.isReachable = YES;45 46 }47 }48 49 然后在每个页面的viewWillAppear:加上:50 51 -(void)viewWillAppear:(BOOL)animated{52 [super viewWillAppear:YES];53 AppDelegate *appDlg = (AppDelegate *)[[UIApplication sharedApplication] delegate];54 if(appDlg.isReachable){55 NSLog(@"网络已连接");//执行网络正常时的代码56 }57 else{58 NSLog(@"网络连接异常");//执行网络异常时的代码59 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];60 [alert show];61 [alert release];62 }63 }
这样就可以检查到在运行程序时网络突然的中断和连接。Reachability类实际上是苹果公司对SCNetworkReachability API的封装,这个API定义在SystemConfigure.framework库中。如果有其他特别的需求,也可以直接使用这个原生的SCNetworkReachability类。
二:AFNetworking监测
1.导入框架,和头文件#import <AFNetworkReachabilityManager.h>
2.代码:
1 -(void)afn{ 2 //1.创建网络状态监测管理者 3 AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManager sharedManager]; 4 //开启监听,记得开启,不然不走block 5 [manger startMonitoring]; 6 //2.监听改变 7 [manger setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 8 /* 9 AFNetworkReachabilityStatusUnknown = -1,10 AFNetworkReachabilityStatusNotReachable = 0,11 AFNetworkReachabilityStatusReachableViaWWAN = 1,12 AFNetworkReachabilityStatusReachableViaWiFi = 2,13 */14 switch (status) {15 case AFNetworkReachabilityStatusUnknown:16 NSLog(@"未知");17 break;18 case AFNetworkReachabilityStatusNotReachable:19 NSLog(@"没有网络");20 break;21 case AFNetworkReachabilityStatusReachableViaWWAN:22 NSLog(@"3G|4G");23 break;24 case AFNetworkReachabilityStatusReachableViaWiFi:25 NSLog(@"WiFi");26 break;27 default:28 break;29 }30 }];31 }
阅读全文
0 0
- iOS 检测网络状态的2个方法
- ios网络状态的检测
- iOS两种检测网络状态的方法
- 检测网络状态的方法
- iOS---检测网络状态
- ios 检测网络状态
- 检测iOS网络状态
- iOS检测网络状态
- iOS检测网络状态
- iOS 检测网络状态
- 网络连接状态检测的一个方法
- Android,检测网络状态的方法
- IOS检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- IOS检测网络连接状态
- MS COCO数据集比赛参与(participate)(来自官网)
- 内存之三
- 弟弟的作业
- JVM 内存初学 (堆(heap)、栈(stack)和方法区(method) )
- 如何获取uitableview中最上面的可见cell的索引
- iOS 检测网络状态的2个方法
- PHP 使用session
- 数据挖掘学习------------------2-关联规则-1-基本概念
- DOTween:Sequence
- YOLOv2源码分析(一)
- java多线程(2)-实现生产者/消费者模式
- JS统计页面访问次数并传递可选参数
- jQuery选择器
- ExpandableListView二级列表购物车,MVP获取数据