监测网络状态

Posted 初秋的天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监测网络状态相关的知识,希望对你有一定的参考价值。

在网络应用中,需要对用户设备的网络状态进行实时监控,有两种方法:

第一种:AFNetworkReachabilityManager

需要导入头文件 #import <AFNetworking.h>

+ (void)monitorNetworking {

    

    AFNetworkReachabilityManager *manage = [AFNetworkReachabilityManager sharedManager];

    

    [manage setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

      switch (status) {

          case AFNetworkReachabilityStatusUnknown: // 未知网络

          {

              NSLog(@"未知网络");

          }

              break;

          case AFNetworkReachabilityStatusNotReachable: // 没有网络(断网)

          {

              NSLog(@"没有网络(断网)");

              [MBProgressHUD showError:@"网络异常,请检查网络设置!"];

          }

              break;

          case AFNetworkReachabilityStatusReachableViaWWAN: // 手机自带网络

          {

              NSLog(@"手机自带网络");

          }

              break;

          case AFNetworkReachabilityStatusReachableViaWiFi: // WIFI

          {

              NSLog(@"WIFI");

          }

              break;

      }

    }];

    // 开始监控

    [manage startMonitoring];

}

 

第二种:Reachability

 

在AppDelegate.m中

技术分享图片
 1 @property (nonatomic, strong) Reachability *reach;
 2 
 3 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 4     
 5     // 监测网络情况
 6     [[NSNotificationCenter defaultCenter] addObserver:self
 7                                              selector:@selector(reachabilityChanged:)
 8                                                  name: kReachabilityChangedNotification
 9                                                object: nil];
10     Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];
11     [reach startNotifier];
12     self.reach = reach;
13 }
技术分享图片

通知触发执行的方法

技术分享图片
 1 #pragma mark - 网络状态变化通知
 2 - (void)reachabilityChanged:(NSNotification*)note {
 3     
 4     Reachability* curReach = [note object];
 5     NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
 6     NetworkStatus status = [curReach currentReachabilityStatus];
 7     
 8     /*
 9      NotReachable = 0, 无网络连接
10      ReachableViaWiFi, Wifi
11      ReachableViaWWAN 2G/3G/4G/5G
12      */
13     if (status == NotReachable) {
14        
15        // 没有网络的更多操作 
16 // 实现类似接到电话效果   self.window.frame = CGRectMake(0, 40, __width, __height-40);
17         
18     } else if (status == ReachableViaWiFi) {
19         NSLog(@"Wifi");
20     } else {
21         NSLog(@"3G/4G/5G");
22     }
23 }
技术分享图片
1 - (void)dealloc {
2     [_reach stopNotifier];
3     [[NSNotificationCenter defaultCenter] removeObserver:self];
4 }

以上是关于监测网络状态的主要内容,如果未能解决你的问题,请参考以下文章

OS开发网络篇—监测网络状态

并发ping监测网络状态

iOS开发之监测网络状态

智慧环保--生态环境监测网络扩充

uniapp网络监测

iOS知识点总结