我正在开发iOS应用,并希望确定该设备具有哪种类型的蜂窝连接。
我对我的设备使用的蜂窝网络最感兴趣:2G或3G,或其他。
然而,Reachability.h仅提供wifi或3G的检查。
如何查看2G,3G等?
答案 0 :(得分:13)
在iOS 7.0+中我们有CoreTelephony框架,它可以为我们提供有关网络类型的必要详细信息。
CTTelephonyNetworkInfo *telephonyInfo = [[CTTelephonyNetworkInfo alloc] init];
NSString *currentRadio = telephonyInfo.currentRadioAccessTechnology;
if ([currentRadio isEqualToString:CTRadioAccessTechnologyLTE]) {
// LTE
} else if([currentRadio isEqualToString:CTRadioAccessTechnologyEdge]) {
// EDGE
} else if([currentRadio isEqualToString:CTRadioAccessTechnologyWCDMA]){
// 3G
}
答案 1 :(得分:12)
2G / 3G无法通过Reachability.h
或任何其他第三方库区分,因为iPhone仅向API提供网络类型信息(WWAN,WiFi,无网络)。
但是,如果您能够知道2G或3G网络的IP范围,则可以确定iPhone正在使用的网络速度/频率。
答案 2 :(得分:1)
您可以使用此技术告诉EDGE:Determining 3G vs Edge
答案 3 :(得分:1)
我找到的最佳方法:
+ (NSNumber *)dataNetworkTypeFromStatusBar {
UIApplication *app = [UIApplication sharedApplication];
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;
}
}
return [dataNetworkItemView valueForKey:@"dataNetworkType"]; }
/* Where
0 = No wifi or cellular
1 = 2G and earlier
2 = 3G
3 = 4G
4 = LTE
5 = Wifi
*/
由于方法检查状态栏的值,请确保状态栏未隐藏在您的应用程序中。如果它不可见,方法将始终返回0.
答案 4 :(得分:0)
对于Swift 4
let telephonyInfo = CTTelephonyNetworkInfo()
let currentRadio = telephonyInfo.currentRadioAccessTechnology
if (currentRadio == CTRadioAccessTechnologyLTE) {
// LTE
print("LTE")
} else if (currentRadio == CTRadioAccessTechnologyEdge) {
// EDGE
print("EDGE")
} else if (currentRadio == CTRadioAccessTechnologyWCDMA) {
// 3G
print("3G")
}
else if(currentRadio==CTRadioAccessTechnologyHSDPA){
// HSDPA
print("HSDPA")
}
注意:导入CoreTelephony