189 8069 5689

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网络类型-创新互联
URL链接:http://jkwzsj.com/article/dsogeh.html

其他资讯