我是靠谱客的博主 专注小松鼠,最近开发中收集的这篇文章主要介绍iOS获取当前网络状态(Wifi、蜂窝、无网络),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们在开发APP时,涉及网络连接的时候,都会想着提前判断一下当前的网络连接状态,如果没有网络,就不再请求url,省去不必要的步骤,所以,这个如何判断? 
记得在工程添加:SystemConfiguration.framework

去苹果API里搜索Reachability,下载demo,把demo里的Reachability.h和Reachability.m拖到自己的工程里。也可以在百度里面搜索”Reachability”,然后下载,不一定非要到苹果官网去下载。

但是使用Reachability有一个问题,就是它只能判断当前是Wifi或者手机自带网络,没有办法详细得判断2G、3G、4G。 
如果确定为手机自带网络,这时可以使用系统自带的API来判断是2G、3G还是4G,这就要使用到CTTelephonyNetworkInfo这类,记得在工程添加CoreTelephony.framework

记得导入头文件:

#import "Reachability.h"
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

下面附上我在项目中使用的代码:

- (void)monitorNetWork{

    AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager];

    //        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(afNetworkStatusChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];//这个可以放在需要侦听的页面

    [afNetworkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        switch (status) {

            case AFNetworkReachabilityStatusNotReachable:{

                KDSLog(@"网络状态:当前手机断网了-%@",@(status) );

                [KDSUserManager sharedManager].netWorkIsAvailable = NO;

//                [MBProgressHUD showError:Localized(@"networkNotAvailable")];

                break;

            }

            case AFNetworkReachabilityStatusReachableViaWiFi:{

                KDSLog(@"网络状态:通过WIFI连接-%@",@(status));

                [KDSUserManager sharedManager].netWorkIsAvailable = YES;

                break;

            }

            case AFNetworkReachabilityStatusReachableViaWWAN:{

                KDSLog(@"网络状态:通过手机网络连接-%@",@(status) );

                [KDSUserManager sharedManager].netWorkIsAvailable = YES;

                break;

            }

            default:

                break;

        }

    }];

    [afNetworkReachabilityManager startMonitoring];  //开启网络监视器;

}

+ (NSString *)getNetconnType{

    NSString *netconnType = @"";

    Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"];

    switch ([reach currentReachabilityStatus]) {
        case NotReachable:// 没有网络
        {

            netconnType = @"no network";
        }
            break;

        case ReachableViaWiFi:// Wifi
        {
            netconnType = @"Wifi";
        }
            break;

        case ReachableViaWWAN:// 手机自带网络
        {
            // 获取手机网络类型
            CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];

            NSString *currentStatus = info.currentRadioAccessTechnology;

            if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyGPRS"]) {

                netconnType = @"GPRS";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyEdge"]) {

                netconnType = @"2.75G EDGE";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyWCDMA"]){

                netconnType = @"3G";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSDPA"]){

                netconnType = @"3.5G HSDPA";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyHSUPA"]){

                netconnType = @"3.5G HSUPA";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMA1x"]){

                netconnType = @"2G";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORev0"]){

                netconnType = @"3G";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevA"]){

                netconnType = @"3G";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyCDMAEVDORevB"]){

                netconnType = @"3G";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyeHRPD"]){

                netconnType = @"HRPD";
            }else if ([currentStatus isEqualToString:@"CTRadioAccessTechnologyLTE"]){

                netconnType = @"4G";
            }
        }
            break;

        default:
            break;
    }

    return netconnType;
}

最后

以上就是专注小松鼠为你收集整理的iOS获取当前网络状态(Wifi、蜂窝、无网络)的全部内容,希望文章能够帮你解决iOS获取当前网络状态(Wifi、蜂窝、无网络)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部