十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
相信大家都有过类似的需求,需要判断iOS上面当前连接的网络是2G,3G还是wifi?大部分的做法是使用reachability这个类,但是这种做法有一个致命的缺点就是:无法区分2G和3G。虽然网上号称有人可以准确的区分开,但是我自己测试,发现并非如此。而且reachability这种做法,需要连接到指定的一个网站,然后采用通知的方式来获取连接的状态,由此可见这种做法,既慢又复杂。下面就介绍一种简单而又准确的方法。
创新互联建站专注于企业成都全网营销、网站重做改版、碾子山网站定制设计、自适应品牌网站建设、H5建站、商城建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为碾子山等各大城市提供网站开发制作服务。
首先定义一个枚举来代表不同的网络类型
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 = [[[appvalueForKey:@"statusBar"]valueForKey:@"foregroundView"]subviews];
NSNumber *dataNetworkItemView = nil;
for (id subview in subviews) {
if([subviewisKindOfClass:[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,但是这个大家不用担心,因为我的应用已经被审核通过了。
经过测试,上面的方法是非常简单有效的,大家不妨自己实验一下。