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;
}

 

posted on 2017-03-27 15:44  黑鲤鱼与绿鲤鱼与驴  阅读(180)  评论(0编辑  收藏  举报

导航