zoukankan      html  css  js  c++  java
  • iOS判断网络状态

    iOS判断网络状态的方法有很多种,以下三种相对最常用:

    (1)AFN,如果项目的网络请求用到了AFN框架,AFN种有一个AFNetworkReachabilityManager 单例类可以取到当前的网络状态,方便实用。

    #pragma 网络状态监控
    - (void)checkNetworkStatus
    {
        AFNetworkReachabilityManager* manager = [AFNetworkReachabilityManager sharedManager];
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
           NSLog(@"%@",AFStringFromNetworkReachabilityStatus(status));
            switch (status) {
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    //lab.text = @"当前网络连接:wifi";
                 
                    break;
                case AFNetworkReachabilityStatusReachableViaWWAN:
                    //lab.text = @"当前网络连接:2G/3G/4G";
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                default:
                    //lab.text = @"当前网络连接:未连接";
                    break;
            }
        }];
        [manager startMonitoring];
    }

    (2)Apple官方给了 Reachability 文档,用来获取、检测设备的网络状态。

        只需要导入Reachability.h 和 Reachability.m 文件,然后导入SystemConfiguration.framework框架就可以实用了,苹果官方给的方法,比较权威,绝对没问题。

    // 监听网络状态改变的通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];
    
    // 创建Reachability
    self.conn = [Reachability reachabilityForInternetConnection];
    // 开始监控网络(一旦网络状态发生改变, 就会发出通知kReachabilityChangedNotification)
    [self.conn startNotifier];
    
    // 处理网络状态改变
    - (void)networkStateChange
    {
        // 1.检测wifi状态
        Reachability *wifi = [Reachability reachabilityForLocalWiFi];
        
        // 2.检测手机是否能上网
        Reachability *conn = [Reachability reachabilityForInternetConnection];
        
        // 3.判断网络状态
        if ([wifi currentReachabilityStatus] != NotReachable) { // 有wifi
            NSLog(@"有wifi");
        } else if ([conn currentReachabilityStatus] != NotReachable) { // 没有使用wifi, 使用手机自带网络进行上网
            NSLog(@"使用手机自带网络进行上网");
        } else { // 没有网络
            NSLog(@"没有网络");
        }
    }

    (3)根据设备状态栏种网络状态获取

    - (NSString *)getNetWorkStates{
        UIApplication *app = [UIApplication sharedApplication];
        NSArray *children = [[[app valueForKeyPath:@"statusBar"]valueForKeyPath:@"foregroundView"]subviews];
        NSString *state = [[NSString alloc]init];
        int netType = 0;
        //获取到网络返回码
        for (id child in children) {
            if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
                //获取到状态栏
                netType = [[child valueForKeyPath:@"dataNetworkType"]intValue];
                
                switch (netType) {
                    case 0:
                        state = @"无网络";
                        //无网模式
                        break;
                    case 1:
                        state =  @"2G";
                        break;
                    case 2:
                        state =  @"3G";
                        break;
                    case 3:
                        state =   @"4G";
                        break;
                    case 5:
                    {
                        state =  @"wifi";
                        break;
                    default:
                        break;
                    }
                }
            }
            //根据状态选择
        }
        return state;
    }
  • 相关阅读:
    以淘宝商品搜索漫谈查询条件的排序对效率的影响(SQL查询性能优化,附调优(性能诊断)DMV)
    监测ASP.NET MVC网站
    在WCF中使用Ninject轻量级IOC框架 之 SOAP风格服务
    敏捷——SCRUM
    《scrum敏捷软件开发》读书笔记
    【双旦献礼】PortalBasic Java Web 应用开发框架 v3.0.1 正式发布(源码、示例及文档)
    前端架构
    Android源码学习之如何使用eclipse+NDK
    mass Framework attr模块 v3
    【转】iOS 6版本与之前版本差异总结
  • 原文地址:https://www.cnblogs.com/yeschenbaby/p/6627082.html
Copyright © 2011-2022 走看看