• iOS 使用Reachability实时检测网络连接状况


    当我们做项目的时候有的时候会去判断是否有网络从而在没网络时改为离线模式。

    那么怎么进行网络判断呢,其实很简单我们只要使用Reachability类库就可以了,当然添加完Reachability类库之后我们要添加SystemConfiguration.framework

    在 Reachability.h定义了三种网络状态:

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

    因此可以这样检查网络状态

    Reachability *reach = [Reachability reachabilityWithHostname:@"www.apple.com"];
        switch ([reach currentReachabilityStatus])
        {
            case NotReachable:
            {
                isExistenceNetwork = NO;
                NSLog(@"没有网络");
            }
                break;
            case ReachableViaWiFi:
            {
                isExistenceNetwork = YES;
                NSLog(@"WiFi网络");
                [self versionUpgrade];
            }
                break;
            case ReachableViaWWAN:
            {
                isExistenceNetwork = YES;
                [self versionUpgrade];
                NSLog(@"3G网络");
            }
                break;
        }

    好了,Reachability的基本用法介绍完了,那么言归正传怎么进行实时网络检测呢

    一、 在程序的启动处开启通知

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        //开启网络状况的监听
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
        
        Reachability *hostReach = [Reachability reachabilityWithHostname:@"www.baidu.com"];
        [hostReach startNotifier];
        /*
         该方法在我查看的资料上是有调用的但是我使用的时候可能会有小的bug具体使用可以个人试试
         [self updateInterfaceWithReachability:hostReach];
         */
    
        return YES;
    }

    二、 连接改变

    // 连接改变
    - (void)reachabilityChanged:(NSNotification *)note
    {
        Reachability *curReach = [note object];
        NSParameterAssert([curReach isKindOfClass:[Reachability class]]);
        [self updateInterfaceWithReachability:curReach];
    }

    三、 处理连接改变后的情况

    //处理连接改变后的情况
    - (void) updateInterfaceWithReachability: (Reachability*) curReach
    {
        //对连接改变做出响应的处理动作。
        NetworkStatus status = [curReach currentReachabilityStatus];
        
        if (status == NotReachable) {  //没有连接到网络就弹出提实况
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提醒"
                                                            message:@"当前网络不好,请检查网络"
                                                           delegate:nil
                                                  cancelButtonTitle:@"确定" otherButtonTitles:nil];
            [alert show];
        }
        
    }
  • 相关阅读:
    VMware Workstation Pro 12 创建虚拟机(安装Ubuntu)
    老师的题目(开心一刻)
    政务私有云盘系统建设的工具 – Mobox私有云盘
    学校信息化分享-中小学怎样快速完成教学资源库的建设
    SpringBoot 2.x 文件上传出现 The field file exceeds its maximum permitted size of 1048576 bytes
    nginx错误集
    nginx做http强制跳转https,接口的POST请求变成GET
    swagger Base URL地址和下边的不一致
    CentOS7关闭防火墙
    nginx配置:静态访问txt文件
  • 原文地址:https://www.cnblogs.com/anyezhuixing/p/4169484.html
Copyright © 2020-2023  润新知