温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

iOS平台判断2G,3G,wifi网络类型

发布时间:2020-07-31 14:42:49 阅读:5950 作者:iKingLai 栏目:移动开发
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

相信大家都有过类似的需求,需要判断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,但是这个大家不用担心,因为我的应用已经被审核通过了。

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

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×