iOS平台判断2G,3G,wifi网络类型
2014-07-24 09:42
471 查看
http://stackoverflow.com/questions/16774885/objective-c-determine-data-network-type-of-the-ios-device
相信大家都有过类似的需求,需要判断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,但是这个大家不用担心,因为我的应用已经被审核通过了。
相信大家都有过类似的需求,需要判断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,但是这个大家不用担心,因为我的应用已经被审核通过了。
相关文章推荐
- iOS平台判断2G,3G,wifi网络类型
- IOS判断运营商网络类型2G/3G/4G/WIFI/是否有网络
- IOS判断当前网络连接类型(可区分2G和3G)
- Android网络类型判断(2g、3g、wifi)
- Android 判断网络是否可用、网络类型WIFI/2G/3G/4G及获取IP
- Android网络类型判断(2g、3g、wifi)
- Android判断当前网络类型2G/3G/4G/WIFI
- iOS获取当前网络类型(Wifi、2G、3G、4G)
- Android网络类型判断(2g、3g、wifi)(待续)
- iOS 判断网络类型2G、3G、4G等等等
- Android网络类型判断(2g、3g、wifi)
- Android网络类型判断(2g、3g、wifi)
- 判断是否联网_检测网络的类型为3G、2G、wap、wifi
- Android之判断手机连接的网络类型是WIFI还是2G/3G/4G(转载)
- Android 判断网络类型 wifi,2G,3G,4G
- Android网络类型判断(2g、3g、wifi)
- iOS开发之判断具体当前网络类型(2G网络还是3G网络)
- 判断当前网络类型(WIFI,2G,3G)
- android如何判断当前网络类型(联网,2g,3g,wifi等)