iOS平台判断2G,3G,wifi网络类型-创新互联

相信大家都有过类似的需求,需要判断iOS上面当前连接的网络是2G,3G还是wifi?大部分的做法是使用reachability这个类,但是这种做法有一个致命的缺点就是:无法区分2G和3G。虽然网上号称有人可以准确的区分开,但是我自己测试,发现并非如此。而且reachability这种做法,需要连接到指定的一个网站,然后采用通知的方式来获取连接的状态,由此可见这种做法,既慢又复杂。下面就介绍一种简单而又准确的方法。

创新互联专注于宝丰网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供宝丰营销型网站建设,宝丰网站制作、宝丰网页设计、宝丰网站官网定制、成都微信小程序服务,打造宝丰网络公司原创品牌,更为您提供宝丰网站排名全网营销落地服务。

首先定义一个枚举来代表不同的网络类型

typedef enum {

  NETWORK_TYPE_NONE= 0,

  NETWORK_TYPE_WIFI= 1,

  NETWORK_TYPE_3G= 2,

  NETWORK_TYPE_2G= 3,

}NETWORK_TYPE;

然后通过获取手机信号栏上面的网络类型的标志

+ (int)dataNetworkTypeFromStatusBar {

  UIApplication *app = [UIApplicationsharedApplication];

  NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews];

  NSNumber *dataNetworkItemView = nil;

  for (id subview in subviews) {

    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {

      dataNetworkItemView = subview;

      break;

    }

  }

int netType = NETWORK_TYPE_NONE;

NSNumber * num = [dataNetworkItemView valueForKey:@"dataNetworkType"];

if (num == nil) {

    netType = NETWORK_TYPE_NONE;

  }else{

int n = [num intValue];

if (n == 0) {

      netType = NETWORK_TYPE_NONE;

    }elseif (n == 1){

      netType = NETWORK_TYPE_2G;

    }elseif (n == 2){

      netType = NETWORK_TYPE_3G;

    }else{

      netType = NETWORK_TYPE_WIFI;

    }

  }

return netType;

}

注意:这里用到了私有的API,但是这个大家不用担心,因为我的应用已经被审核通过了。

经过测试,上面的方法是非常简单有效的,大家不妨自己实验一下。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页题目:iOS平台判断2G,3G,wifi网络类型-创新互联
本文路径:http://bzwzjz.com/article/dsogeh.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 四川成都网站制作 成都网站设计 营销网站建设 达州网站设计 成都网站设计 企业网站设计 成都网站制作 品牌网站建设 网站建设公司 手机网站建设 app网站建设 宜宾网站设计 成都网站制作 营销型网站建设 成都做网站建设公司 移动网站建设 成都网站建设公司 成都网站建设 网站设计 LED网站设计方案 成都品牌网站设计 成都企业网站设计