zoukankan      html  css  js  c++  java
  • iOS实时监控网络状态的改变

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

    (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)

    (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验

      WIFI网络:自动下载高清图片

      4G/3G网络:只下载缩略图

      没有网络:只显示离线的缓存数据

     常用的有以下两种方法:

      (1)、使用苹果观法提供的检测iOS设备网络环境用的库 Reachablity

      (2)、使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变

    一、苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态

    使用之前请从Apple网站下载示例:

    https://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip

    然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。
    Reachability 中定义了3种网络状态:

    typedef enum : NSInteger {
    
        NotReachable = 0,  //无连接
        ReachableViaWiFi,  //使用3G/GPRS网络
        ReachableViaWWAN  //使用WiFi网络
    
    } NetworkStatus;

    我们可以在程序启动以后启动实时监测

    // AppDelegate.m
    
    
    @interface AppDelegate ()
    
    @property (nonatomic, strong) Reachability *reachability;
    
    @end
    
    // 程序启动器,启动网络监视
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
    
        // 设置网络检测的站点
           NSString *remoteHostName = @"www.apple.com";
        self.reachability = [Reachability reachabilityWithHostName:remoteHostName];
        // 设置网络状态变化时的通知函数
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)
                                                 name:@"kNetworkReachabilityChangedNotification" object:nil];
        [self updateStatus];
    }
    
    
    - (void)reachabilityStatusChange:(NSNotification *)notification
    {
        Reachability* curReach = [notification object];
        NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
        [self updateInterfaceWithReachability:curReach];
    }
    
    - (void)updateInterfaceWithReachability:(Reachability *)reachability
    {
        if (reachability == _reachability)
        {
            NetworkStatus netStatus = [reachability currentReachabilityStatus];
            switch (netStatus)
            {
                case NotReachable:      {
                    NSLog(@"没有网络!");
                    break;
                }
                case ReachableViaWWAN:  {
                    NSLog(@"4G/3G");
                    break;
                }
                case ReachableViaWiFi:  {
                    NSLog(@"WiFi");
                    break;
                }
            }
        }
    }
    
    
    - (void)dealloc
    {
         [_reachability stopNotifier];
        [[NSNotificationCenter defaultCenter] removeObserver:self name:kReachabilityChangedNotification object:nil];
    }

    二、使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变

    //使用AFN框架来检测网络状态的改变
    -(void)AFNReachability
    {
        //1.创建网络监听管理者
        AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    
        //2.监听网络状态的改变
        /*
         AFNetworkReachabilityStatusUnknown          = 未知
         AFNetworkReachabilityStatusNotReachable     = 没有网络
         AFNetworkReachabilityStatusReachableViaWWAN = 3G
         AFNetworkReachabilityStatusReachableViaWiFi = WIFI
         */
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusUnknown:
                    NSLog(@"未知");
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                    NSLog(@"没有网络");
                    break;
                case AFNetworkReachabilityStatusReachableViaWWAN:
                    NSLog(@"3G");
                    break;
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    NSLog(@"WIFI");
                    break;
    
                default:
                    break;
            }
        }];
    
        //3.开始监听
        [manager startMonitoring];
    }
  • 相关阅读:
    java之集合Collection详解之3
    委托的高级使用
    委托的一般使用
    泛型(Generic)委托
    泛型(Generic)方法(函数,算法)
    泛型(Generic)接口
    泛型(Generic)类的使用原因和使用方式
    C#反射从入门到放弃(这部分遇到的新东西太多了让人接受不能)
    反射应用——依赖注入
    接口的显式实现
  • 原文地址:https://www.cnblogs.com/496668219long/p/5757488.html
Copyright © 2011-2022 走看看